<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://graalonline.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tolnaftate2004</id>
	<title>Graal Bible - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://graalonline.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tolnaftate2004"/>
	<link rel="alternate" type="text/html" href="https://graalonline.net/Special:Contributions/Tolnaftate2004"/>
	<updated>2026-04-10T00:36:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18959</id>
		<title>Creation/Dev/Script/Clientside Functions</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18959"/>
		<updated>2011-10-13T15:55:03Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Functions */ trace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;50%&amp;quot;&lt;br /&gt;
|[R]&lt;br /&gt;
| denotes it is read-only.&lt;br /&gt;
|-&lt;br /&gt;
|[3D]&lt;br /&gt;
| denotes it is a Graal3D function.&lt;br /&gt;
|-&lt;br /&gt;
|[opengl]&lt;br /&gt;
| denotes it is functional only in opengl mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| allfeatures&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allplayerscount&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the count of all players on your playerlist, including IRC bots.&lt;br /&gt;
|-&lt;br /&gt;
| allrenderobjecttypes&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allstats &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Used with showstats() in order to show all stats.&lt;br /&gt;
|-&lt;br /&gt;
| canspin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player has spin attack.&lt;br /&gt;
|-&lt;br /&gt;
| carriesblackstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a black stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesbush&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a bush.&lt;br /&gt;
|-&lt;br /&gt;
| carriesnpc&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying an NPC&lt;br /&gt;
|-&lt;br /&gt;
| carriessign&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a sign.&lt;br /&gt;
|-&lt;br /&gt;
| carriesstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesvase&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a vase.&lt;br /&gt;
|-&lt;br /&gt;
| downloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Returns the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the position of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadsize&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the size of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| editingmission&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| emoticonchar&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| focusx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| focusy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| ghostsnear&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If a ghost(observer) is in the same level as the player.&lt;br /&gt;
|-&lt;br /&gt;
| graalplugincookie&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| graalversion&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Version of Graal the player is using.&lt;br /&gt;
|-&lt;br /&gt;
| gravity&lt;br /&gt;
| ''float''&lt;br /&gt;
| The gravity value that effects how fast projectiles fall. It universally effects all projectiles.&lt;br /&gt;
|-&lt;br /&gt;
| installedlanguages&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isapplicationactive&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Is Graal window active?&lt;br /&gt;
|-&lt;br /&gt;
| iscarrying&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player is carrying something.&lt;br /&gt;
|-&lt;br /&gt;
| isfocused&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraal3d&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isleader&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player was the first to enter the level.&lt;br /&gt;
|-&lt;br /&gt;
| isonmap&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is on a map.&lt;br /&gt;
|-&lt;br /&gt;
| isopengl&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Graal is in opengl mode.&lt;br /&gt;
|-&lt;br /&gt;
| isrecordingvideo&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is currently recording(alt+6) Graal.&lt;br /&gt;
|-&lt;br /&gt;
| jpegquality&lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lastdownloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| The last file downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| levelorgx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| levelorgy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lighteffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| Whether the player has their lights enabled via options.&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttons &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttonsglobal&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousepitch&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousescreenx &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousescreeny &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousewheeldelta&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| How much the mouse wheel has been scrolled.&lt;br /&gt;
|-&lt;br /&gt;
| mousex&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousey&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the y-axis&lt;br /&gt;
|-&lt;br /&gt;
| mouseyaw&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| musiclen &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Length of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| musicpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Position of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| particleeffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If player has particles enabled in their options.&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebutton &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebuttonglobal &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| screenheight&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Height of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| screenwidth&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Width of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| scriptedcontrols &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scriptedplayerlist&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Whether the player has the scripted playerlist enabled.&lt;br /&gt;
|-&lt;br /&gt;
| scriptlogwritetoreadonly&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedlistplayers&lt;br /&gt;
| ''object''&lt;br /&gt;
| An object of all players selected on the playerlist.&lt;br /&gt;
|-&lt;br /&gt;
| selectedsword &lt;br /&gt;
| ''integer''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedweapon &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Index of the currently selected weapon.&lt;br /&gt;
|-&lt;br /&gt;
| servername&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Name of the server.&lt;br /&gt;
|-&lt;br /&gt;
| serverstartconnect &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| serverstartparams &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| shotbybaddy&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a baddy(default) arrow.&lt;br /&gt;
|-&lt;br /&gt;
| shotbyplayer&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by another players arrow.&lt;br /&gt;
|-&lt;br /&gt;
| showterraingrid&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| spritesimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set sprite image.&lt;br /&gt;
|-&lt;br /&gt;
| statusimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set state image.&lt;br /&gt;
|-&lt;br /&gt;
| timevar&lt;br /&gt;
| ''integer [R].''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar2&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar3&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
| Synchronized time which works on both server and client-side, precision is milliseconds.&lt;br /&gt;
|-&lt;br /&gt;
| wasshooted&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a default arrow.&lt;br /&gt;
|-&lt;br /&gt;
| waterheight&lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| weapons&lt;br /&gt;
| ''object [R]''&lt;br /&gt;
| all the players weapons, this includes login inherited weapons.&lt;br /&gt;
|-&lt;br /&gt;
| weaponsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If the players weapons are enabled via disableweapons()/enableweapons().&lt;br /&gt;
|-&lt;br /&gt;
| weathereffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If weather is enabled in the players options.&lt;br /&gt;
|-&lt;br /&gt;
| worldclockstopped&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldhour &lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminute &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminutesofday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldrealsecondsperday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Functions=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Function'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| addcontrol(object)&lt;br /&gt;
|&lt;br /&gt;
| adds 'object' to the parent control.&lt;br /&gt;
|-&lt;br /&gt;
| addmaterialmapping(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef(string image, string prefix, int format)&lt;br /&gt;
| &lt;br /&gt;
| Adds a tileset definition with the supplied tileset image, level prefix and tileset format (0=pics1, 1=new world, 5=terrain).&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef2(string image, string prefix, int x, int y)&lt;br /&gt;
| &lt;br /&gt;
| Overlays an image on the tileset with the supplied tileset image and level prefix. Parameters 'x' and 'y' represent the x and y position on the tileset of where to place the new image.&lt;br /&gt;
|-&lt;br /&gt;
| aindexof(float, array)&lt;br /&gt;
| &lt;br /&gt;
| Returns integer - the position of 'float' in the array.&lt;br /&gt;
|-&lt;br /&gt;
| arccos(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc cosine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| arcsin(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc sine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| attachplayertoobj(integer1, integer2)&lt;br /&gt;
| &lt;br /&gt;
| Attaches the player to the object with the matching ID where integer1 is the object type (currently only NPCs - 0) and integer2 is the ID of the desired object.&lt;br /&gt;
|-&lt;br /&gt;
| base64decode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Decodes a base64 string.&lt;br /&gt;
|-&lt;br /&gt;
| base64encode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Encodes string in to several characters of a 64 printable character set (A-Z, a-z, 0-9, + and /, while &amp;quot;=&amp;quot; is a special suffix code)&lt;br /&gt;
|-&lt;br /&gt;
| boxcontains(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| boxcontainsvector(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxintersect(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| boxoverlaps(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxscale(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| callnpc(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from an NPC where 'index' is the NPC's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| callweapon(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from a weapon where 'index' is the weapon's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| castray({x,y,x}, {x,y,z}, string type)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object - specify the start and end of the ray, and the object types (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| checksum(string)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| contains(string2, string1)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - True if string1 is contained within string2.&lt;br /&gt;
|-&lt;br /&gt;
| copystrings(string, string)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| cursoroff()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Disables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| cursoron()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Enables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| degtorad(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float - Converts angle measurements of degrees to radians&lt;br /&gt;
|-&lt;br /&gt;
| detachplayer()&lt;br /&gt;
| &lt;br /&gt;
| Detaches a player from an attached object.&lt;br /&gt;
|-&lt;br /&gt;
| disabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default movement system and controls(including weapons, sword, grab. Does not include Q-menu, pause, map...).&lt;br /&gt;
|-&lt;br /&gt;
| disablemap()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default map (M).&lt;br /&gt;
|-&lt;br /&gt;
| disablepause()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default pause (P).&lt;br /&gt;
|-&lt;br /&gt;
| disableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default Q-menu (Q).&lt;br /&gt;
|-&lt;br /&gt;
| disableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default sword (S) and weapons (D).&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#echo.28.29|echo(string)]]&lt;br /&gt;
| &lt;br /&gt;
| echos 'string' to the debug window(F2).&lt;br /&gt;
|-&lt;br /&gt;
| enabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default movement system.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Script/Functions/enablefeatures(int)|enablefeatures(int)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| enablemap()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default map system(M).&lt;br /&gt;
|-&lt;br /&gt;
| enablepause()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default pause system(P).&lt;br /&gt;
|-&lt;br /&gt;
| enableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default Q-menu(Q).&lt;br /&gt;
|-&lt;br /&gt;
| enableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default sword(S) and weapons(D).&lt;br /&gt;
|-&lt;br /&gt;
| escapestring(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string - adds \\ in front of &amp;quot;, ' and \\, and removes non-printable characters&lt;br /&gt;
|-&lt;br /&gt;
| explodebomb(integer)&lt;br /&gt;
| &lt;br /&gt;
| explodes the bomb with the id of 'integer'.&lt;br /&gt;
|-&lt;br /&gt;
| extractfilebase(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| extractfileext(string)&lt;br /&gt;
| &lt;br /&gt;
| Takes in a file name, and returns its extension. &lt;br /&gt;
|-&lt;br /&gt;
| extractfilepath(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string &lt;br /&gt;
|-&lt;br /&gt;
| fileexists(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean of whether the file 'str' exists in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| filesize(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns the size(int) of the file 'string' in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| fileupdate(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| findani(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findfiles(string, integer)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findlevel(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayer(float1, float2)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest player's object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayers(float, float)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest players' object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnpcbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the NPC object with the ID of 'int'.&lt;br /&gt;
|-&lt;br /&gt;
| findpathinarray(obj1, obj2, obj3, obj4, obj5, int, int, int)&lt;br /&gt;
|&lt;br /&gt;
| Returns object - Simple path-finding: Obj1 being tiles that allow walking, Obj2 being tiles that don't allow walking, Obj3; tiles that shouldn't be allowed to walked on, Obj4; tiles that are able to be walked on, Obj5; tiles where we may stop. Integers are relevant to the startx, starty and maximum path length. - Arrays for allowed/non-allowed tiles are only checked if they aren't null.&lt;br /&gt;
|-&lt;br /&gt;
| findplayer(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the account equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbycommunityname(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the community name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the ID equal to integer.&lt;br /&gt;
|-&lt;br /&gt;
| findweapon(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the weapon object with the name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#format.28.29_function|format(string, string, ...)]]&lt;br /&gt;
|&lt;br /&gt;
| See [[Creation/Dev/Output_Methods#format.28.29_function|format()]]. &lt;br /&gt;
|- &lt;br /&gt;
| [[Creation/Dev/Output_Methods#format2.28.29_function|format2(string, array)]]&lt;br /&gt;
| &lt;br /&gt;
| Like format(), except that this expects the format string and an array of variables instead of passing the variables as separate parameters.&lt;br /&gt;
|-&lt;br /&gt;
| freefileresources(string)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| freezeplayer(float)&lt;br /&gt;
|&lt;br /&gt;
| Freezes the player for the number of seconds specified by float.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectat(float, float, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the specified screen position, third parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectatmouse(boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the mouse.  Parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectbyray(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectsbybox(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| 1st parameter defines the box {minx,miny,minz, maxx,maxy,maxz}.  Second parameter specifies the type of object to find (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| get3dscreenposition(string, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getanglesfromvector({x, y, z})&lt;br /&gt;
|&lt;br /&gt;
| Returns an array that contains the angles the 3D vector {x, y, z} makes with the X-Y and X-Z axes.&lt;br /&gt;
|-&lt;br /&gt;
| getascii(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the [http://www.asciitable.com/ ascii] code for string.&lt;br /&gt;
|-&lt;br /&gt;
| getbasepackage()&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getboxcenter(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array containing the center of a 3D box specified by string ({x0,y0,z0,x1,y1,z1,...}).&lt;br /&gt;
|-&lt;br /&gt;
| getdesktopresolution()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdisplaydevicelist()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadedupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| Returns the size of the downloaded update package.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackage()&lt;br /&gt;
|&lt;br /&gt;
| Returns a reference to current update package being downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackagescount()&lt;br /&gt;
|&lt;br /&gt;
| Returns a count of the number of update packages to download.&lt;br /&gt;
|-&lt;br /&gt;
| getdropz(string)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| getExtension(string)&lt;br /&gt;
|&lt;br /&gt;
| This function is the same as extractFileExt().  Takes in a file name, and returns its extension.&lt;br /&gt;
|-&lt;br /&gt;
| getfilemodtime(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns a timestamp of when the file was last modified (in unix time compatible to timevar2). This function accepts both exact file path and plain file name.&lt;br /&gt;
|-&lt;br /&gt;
| gethttprequest(string, integer, string)&lt;br /&gt;
| &lt;br /&gt;
| returns object (This function is the same as requestHttp())&lt;br /&gt;
|-&lt;br /&gt;
| getimgheight(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the height (in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getimgpixel(string, integer, integer)&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getimgwidth(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the width(in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getkeycode(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the keycode of the key indicated by string.  The keycode returned can be used in keydown2().&lt;br /&gt;
|-&lt;br /&gt;
| getloginaccountname()&lt;br /&gt;
|&lt;br /&gt;
| Presumably used for the login server.  Use player.account instead.&lt;br /&gt;
|-&lt;br /&gt;
| getmapx(string)&lt;br /&gt;
| &lt;br /&gt;
| Gets the x coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmapy(string)&lt;br /&gt;
|&lt;br /&gt;
| Gets the y coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmusicfilename()&lt;br /&gt;
|&lt;br /&gt;
| Returns the filename of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusicstatus()&lt;br /&gt;
|&lt;br /&gt;
| Returns the status of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusictags()&lt;br /&gt;
|&lt;br /&gt;
| Returns the tags of the music currently playing.  This function can be used to retrieve the title and artist info of the music.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayer(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayer() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayers(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayers() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloadcomplete()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the package downloads are complete.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloaded()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the most recent packages are already downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getplatform()&lt;br /&gt;
|&lt;br /&gt;
| Returns the platform that the player is using.  (i.e. windows, mac, or linux)&lt;br /&gt;
|-&lt;br /&gt;
| getresolutionlist(string)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getservername()&lt;br /&gt;
|&lt;br /&gt;
| Returns the name of the server the player is currently connected to.&lt;br /&gt;
|-&lt;br /&gt;
| getstringkeys(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array of the variables that begins with the supplied string.&lt;br /&gt;
|-&lt;br /&gt;
| getterraintexture(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getterraintextureindex(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| gettextheight(float zoom, string style, string font)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The height in pixels of the text with the given zoom, style and font.&lt;br /&gt;
|-&lt;br /&gt;
| gettextwidth(float zoom, string style, string font, string text)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The width of the text with the given zoom, style, font and text.&lt;br /&gt;
|-&lt;br /&gt;
| gettileset()&lt;br /&gt;
|&lt;br /&gt;
| returns string - the current main tileset (pics1.png, picso.png etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettilesettype()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - the current tileset type (pics1.png:0, picso.png:5 etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettotalupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The total size of the update packages.&lt;br /&gt;
|-&lt;br /&gt;
| getupdatepackage(string name)&lt;br /&gt;
|&lt;br /&gt;
| returns object - A reference to the update package with the given name.&lt;br /&gt;
|-&lt;br /&gt;
| getvectorfromangles(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|- &lt;br /&gt;
| getz(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| graalcontrolhasfocus(bool)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - Whether or not the graal control has focus.  Parameter says if it should also check if the chat bar has the focus&lt;br /&gt;
|-&lt;br /&gt;
| hideplayer(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides player for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hidesword(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player's sword for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hitnpc(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's npc with specified index causing the specified amount of halfhearts in damage. It also knocks back the npc based on the from X and Y coordinate passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitobjects(float power, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
| Hurts all the npcs with the specified power on the position passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitplayer(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's player with specified index causing the specified amount of halfhearts in damage. It also knocks back the player based on the from X and Y coordinate passed to it. Use 0 as the index to hit your own player.&lt;br /&gt;
|-&lt;br /&gt;
| isadminguild(str guildname)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - If the passed guildname is an admin guild or not.&lt;br /&gt;
|-&lt;br /&gt;
| isclassloaded(str classname)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the passed classname is loaded for the client.&lt;br /&gt;
|-&lt;br /&gt;
| iscursoron()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the cursor is on or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdevicefullscreenonly(str device)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the device is full screen only or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloading(str filename)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If a file is currently downloaded or requested from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloadingfiles()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently downloading or requesting files from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isfullscreenmode()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently in fullscreen mode.&lt;br /&gt;
|-&lt;br /&gt;
| isimgrectangletransparent(str, int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| ismusicplaying()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| isobject(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| issoundplaying(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2global(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydownglobal(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keyname(int)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| lay2(str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lightscene()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| loadclass(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadmap(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadtranslation(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lowercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| ltmfs(bool)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmax(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmin(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| makescreenshot2(str, int, float, float, float, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| matrixcreate(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixcreatefromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulpoint(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmultiply(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulvector(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| md5(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| noplayerkilling()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| onwall(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwall2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| opengraalurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl2(str, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play3d(str, bool, str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| popdialog()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pushdialog(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| putleaps(int, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| radtodeg(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| randomstring(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| removetiledefs(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| replaceani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfiledeletion(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilerename(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilesmove(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesthttp(str, int, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| requesttext(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesturl(str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| resetfocus()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| rotationadd(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationaddeuler(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationfromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationsub(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationtoeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rungarbagecollector()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| savelog(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| screenx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| screeny(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| selectfilefordownload(str)&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| selectfileforupload()&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#sendrpgmessage.28.29|sendrpgmessage(str)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtext(str, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#sendtorc.28.29|sendtorc(str)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| serverwarp(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setbeltcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcoatcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcontentcontrol(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcursor2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| seteffect(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfocus(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfogcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setgender(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sethead(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setinteriorrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setletters(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setmap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| sets a text map (you can see the tiles of other levels but not the npcs), parameters are text file with level names, the map image (not used anymore), default x and y for the head icons; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setminimap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| parameters are a text file with level names, the image, default x and y; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setmusicvolume(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setplayerdir(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshield(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshoecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshootparams(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskincolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandsizes(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsleevecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setspritesimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setstatusimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsuncolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsword(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setterrainrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| showstats(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| spyfire(int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| startrecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopmidi()&lt;br /&gt;
| &lt;br /&gt;
| same as stopmusic(), kept for compatibility&lt;br /&gt;
|-&lt;br /&gt;
| stopmusic()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| stoprecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopsound(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| strcmp(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| strequals(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| switchtoopengl()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| synctimeofday(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayercarry()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayerhorse()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| testplayer(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#echo.28.29|trace(string)]]&lt;br /&gt;
| &lt;br /&gt;
| same as [[Creation/Dev/Output_Methods#echo.28.29|echo()]]. Included for compatibility with ActionScript. As such, it should be considered &amp;lt;span style=&amp;quot;color:red; font-weight: bold;&amp;quot;&amp;gt;deprecated&amp;lt;/span&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| triggeraction(float, float, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| triggerserver(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| update3dterrain(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateboard(int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateterrain()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updatevisibledistance()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| uploadfile(str)&lt;br /&gt;
| &lt;br /&gt;
| uploads a file, you must provide the full path provided by a onDropFiles() event, also this will only work if the scripted RC has currently a file browser window open; once the file is uploaded an onFilesUploaded event will be invoked&lt;br /&gt;
|-&lt;br /&gt;
| uppercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Addition|vectoradd(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Cross Product|vectorcross(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Distance_Between_Terminal_Points|vectordist(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Dot Product|vectordot(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Length_.28Magnitude.2FModulus.29|vectorlen(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Unit_Length|vectornormalize(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectororthobasis(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector-Scalar_Multiplication|vectorscale(str, float)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Subtraction|vectorsub(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| worldx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| worldy(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| wraptext(int, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| wraptext2(int, float, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Objects=&lt;br /&gt;
{{:Creation/Dev/Script/Client}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=GUI Objects=&lt;br /&gt;
GUI Objects are currently well documented starting here [[Creation/Dev/Script/Client/GuiControl]].&lt;br /&gt;
&lt;br /&gt;
=Preference Variables=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::choosenvoicecodec&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivatebyvolume&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivationlevel&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microinputdevice&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microon&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microvolumefactor&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::midivolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::mp3volume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::radiovolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::reversestereo&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::sfxvolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::voicevolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::allowbyscript&lt;br /&gt;
| &lt;br /&gt;
| boolean [R]&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::area&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::audiobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::disabledaynight&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::format&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::fps&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::hideinterface&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::recordaudio&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::showmouse&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::size&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::videobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::allowglobalpms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::automapping&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontname&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontsize&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontconnectlevels&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontloadlistheads&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepasswords&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedport&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedudpport&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::language&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::limitnicknames&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::loadbuddylistfromserver&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nicknamelimit&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nomassmessages&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::notoalls&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::noudp&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::showyourselfonbuddylists&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::input::mousesensitivity&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::interior::lockarrays&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::defaultguistyle&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::detailfactor&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fogdistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fullscreenmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::resolution&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::screenshotformat&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::visibledistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::windowmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18801</id>
		<title>Creation/Dev/Script/Clientside Functions</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18801"/>
		<updated>2011-09-20T01:36:54Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;50%&amp;quot;&lt;br /&gt;
|[R]&lt;br /&gt;
| denotes it is read-only.&lt;br /&gt;
|-&lt;br /&gt;
|[3D]&lt;br /&gt;
| denotes it is a Graal3D function.&lt;br /&gt;
|-&lt;br /&gt;
|[opengl]&lt;br /&gt;
| denotes it is functional only in opengl mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| allfeatures&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allplayerscount&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the count of all players on your playerlist, including IRC bots.&lt;br /&gt;
|-&lt;br /&gt;
| allrenderobjecttypes&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allstats &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Used with showstats() in order to show all stats.&lt;br /&gt;
|-&lt;br /&gt;
| canspin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player has spin attack.&lt;br /&gt;
|-&lt;br /&gt;
| carriesblackstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a black stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesbush&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a bush.&lt;br /&gt;
|-&lt;br /&gt;
| carriesnpc&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying an NPC&lt;br /&gt;
|-&lt;br /&gt;
| carriessign&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a sign.&lt;br /&gt;
|-&lt;br /&gt;
| carriesstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesvase&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a vase.&lt;br /&gt;
|-&lt;br /&gt;
| downloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Returns the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the position of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadsize&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the size of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| editingmission&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| emoticonchar&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| focusx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| focusy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| ghostsnear&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If a ghost(observer) is in the same level as the player.&lt;br /&gt;
|-&lt;br /&gt;
| graalplugincookie&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| graalversion&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Version of Graal the player is using.&lt;br /&gt;
|-&lt;br /&gt;
| gravity&lt;br /&gt;
| ''float''&lt;br /&gt;
| The gravity value that effects how fast projectiles fall. It universally effects all projectiles.&lt;br /&gt;
|-&lt;br /&gt;
| installedlanguages&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isapplicationactive&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Is Graal window active?&lt;br /&gt;
|-&lt;br /&gt;
| iscarrying&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player is carrying something.&lt;br /&gt;
|-&lt;br /&gt;
| isfocused&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraal3d&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isleader&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player was the first to enter the level.&lt;br /&gt;
|-&lt;br /&gt;
| isonmap&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is on a map.&lt;br /&gt;
|-&lt;br /&gt;
| isopengl&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Graal is in opengl mode.&lt;br /&gt;
|-&lt;br /&gt;
| isrecordingvideo&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is currently recording(alt+6) Graal.&lt;br /&gt;
|-&lt;br /&gt;
| jpegquality&lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lastdownloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| The last file downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| levelorgx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| levelorgy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lighteffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| Whether the player has their lights enabled via options.&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttons &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttonsglobal&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousepitch&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousescreenx &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousescreeny &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousewheeldelta&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| How much the mouse wheel has been scrolled.&lt;br /&gt;
|-&lt;br /&gt;
| mousex&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousey&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the y-axis&lt;br /&gt;
|-&lt;br /&gt;
| mouseyaw&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| musiclen &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Length of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| musicpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Position of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| particleeffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If player has particles enabled in their options.&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebutton &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebuttonglobal &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| screenheight&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Height of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| screenwidth&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Width of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| scriptedcontrols &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scriptedplayerlist&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Whether the player has the scripted playerlist enabled.&lt;br /&gt;
|-&lt;br /&gt;
| scriptlogwritetoreadonly&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedlistplayers&lt;br /&gt;
| ''object''&lt;br /&gt;
| An object of all players selected on the playerlist.&lt;br /&gt;
|-&lt;br /&gt;
| selectedsword &lt;br /&gt;
| ''integer''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedweapon &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Index of the currently selected weapon.&lt;br /&gt;
|-&lt;br /&gt;
| servername&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Name of the server.&lt;br /&gt;
|-&lt;br /&gt;
| serverstartconnect &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| serverstartparams &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| shotbybaddy&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a baddy(default) arrow.&lt;br /&gt;
|-&lt;br /&gt;
| shotbyplayer&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by another players arrow.&lt;br /&gt;
|-&lt;br /&gt;
| showterraingrid&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| spritesimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set sprite image.&lt;br /&gt;
|-&lt;br /&gt;
| statusimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set state image.&lt;br /&gt;
|-&lt;br /&gt;
| timevar&lt;br /&gt;
| ''integer [R].''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar2&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar3&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
| Synchronized time which works on both server and client-side, precision is milliseconds.&lt;br /&gt;
|-&lt;br /&gt;
| wasshooted&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a default arrow.&lt;br /&gt;
|-&lt;br /&gt;
| waterheight&lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| weapons&lt;br /&gt;
| ''object [R]''&lt;br /&gt;
| all the players weapons, this includes login inherited weapons.&lt;br /&gt;
|-&lt;br /&gt;
| weaponsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If the players weapons are enabled via disableweapons()/enableweapons().&lt;br /&gt;
|-&lt;br /&gt;
| weathereffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If weather is enabled in the players options.&lt;br /&gt;
|-&lt;br /&gt;
| worldclockstopped&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldhour &lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminute &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminutesofday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldrealsecondsperday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Functions=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Function'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| addcontrol(object)&lt;br /&gt;
|&lt;br /&gt;
| adds 'object' to the parent control.&lt;br /&gt;
|-&lt;br /&gt;
| addmaterialmapping(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef(string image, string prefix, int format)&lt;br /&gt;
| &lt;br /&gt;
| Adds a tileset definition with the supplied tileset image, level prefix and tileset format (0=pics1, 1=new world, 5=terrain).&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef2(string image, string prefix, int x, int y)&lt;br /&gt;
| &lt;br /&gt;
| Overlays an image on the tileset with the supplied tileset image and level prefix. Parameters 'x' and 'y' represent the x and y position on the tileset of where to place the new image.&lt;br /&gt;
|-&lt;br /&gt;
| aindexof(float, array)&lt;br /&gt;
| &lt;br /&gt;
| Returns integer - the position of 'float' in the array.&lt;br /&gt;
|-&lt;br /&gt;
| arccos(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc cosine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| arcsin(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc sine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| attachplayertoobj(integer1, integer2)&lt;br /&gt;
| &lt;br /&gt;
| Attaches the player to the object with the matching ID where integer1 is the object type (currently only NPCs - 0) and integer2 is the ID of the desired object.&lt;br /&gt;
|-&lt;br /&gt;
| base64decode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Decodes a base64 string.&lt;br /&gt;
|-&lt;br /&gt;
| base64encode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Encodes string in to several characters of a 64 printable character set (A-Z, a-z, 0-9, + and /, while &amp;quot;=&amp;quot; is a special suffix code)&lt;br /&gt;
|-&lt;br /&gt;
| boxcontains(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| boxcontainsvector(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxintersect(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| boxoverlaps(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxscale(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| callnpc(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from an NPC where 'index' is the NPC's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| callweapon(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from a weapon where 'index' is the weapon's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| castray({x,y,x}, {x,y,z}, string type)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object - specify the start and end of the ray, and the object types (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| checksum(string)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| contains(string2, string1)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - True if string1 is contained within string2.&lt;br /&gt;
|-&lt;br /&gt;
| copystrings(string, string)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| cursoroff()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Disables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| cursoron()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Enables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| degtorad(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float - Converts angle measurements of degrees to radians&lt;br /&gt;
|-&lt;br /&gt;
| detachplayer()&lt;br /&gt;
| &lt;br /&gt;
| Detaches a player from an attached object.&lt;br /&gt;
|-&lt;br /&gt;
| disabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default movement system and controls(including weapons, sword, grab. Does not include Q-menu, pause, map...).&lt;br /&gt;
|-&lt;br /&gt;
| disablemap()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default map (M).&lt;br /&gt;
|-&lt;br /&gt;
| disablepause()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default pause (P).&lt;br /&gt;
|-&lt;br /&gt;
| disableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default Q-menu (Q).&lt;br /&gt;
|-&lt;br /&gt;
| disableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default sword (S) and weapons (D).&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#echo.28.29|echo(string)]]&lt;br /&gt;
| &lt;br /&gt;
| echos 'string' to the debug window(F2).&lt;br /&gt;
|-&lt;br /&gt;
| enabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default movement system.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Script/Functions/enablefeatures(int)|enablefeatures(int)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| enablemap()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default map system(M).&lt;br /&gt;
|-&lt;br /&gt;
| enablepause()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default pause system(P).&lt;br /&gt;
|-&lt;br /&gt;
| enableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default Q-menu(Q).&lt;br /&gt;
|-&lt;br /&gt;
| enableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default sword(S) and weapons(D).&lt;br /&gt;
|-&lt;br /&gt;
| escapestring(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string - adds \\ in front of &amp;quot;, ' and \\, and removes non-printable characters&lt;br /&gt;
|-&lt;br /&gt;
| explodebomb(integer)&lt;br /&gt;
| &lt;br /&gt;
| explodes the bomb with the id of 'integer'.&lt;br /&gt;
|-&lt;br /&gt;
| extractfilebase(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| extractfileext(string)&lt;br /&gt;
| &lt;br /&gt;
| Takes in a file name, and returns its extension. &lt;br /&gt;
|-&lt;br /&gt;
| extractfilepath(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string &lt;br /&gt;
|-&lt;br /&gt;
| fileexists(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean of whether the file 'str' exists in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| filesize(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns the size(int) of the file 'string' in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| fileupdate(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| findani(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findfiles(string, integer)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findlevel(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayer(float1, float2)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest player's object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayers(float, float)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest players' object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnpcbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the NPC object with the ID of 'int'.&lt;br /&gt;
|-&lt;br /&gt;
| findpathinarray(obj1, obj2, obj3, obj4, obj5, int, int, int)&lt;br /&gt;
|&lt;br /&gt;
| Returns object - Simple path-finding: Obj1 being tiles that allow walking, Obj2 being tiles that don't allow walking, Obj3; tiles that shouldn't be allowed to walked on, Obj4; tiles that are able to be walked on, Obj5; tiles where we may stop. Integers are relevant to the startx, starty and maximum path length. - Arrays for allowed/non-allowed tiles are only checked if they aren't null.&lt;br /&gt;
|-&lt;br /&gt;
| findplayer(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the account equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbycommunityname(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the community name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the ID equal to integer.&lt;br /&gt;
|-&lt;br /&gt;
| findweapon(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the weapon object with the name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#format.28.29_function|format(string, string, ...)]]&lt;br /&gt;
|&lt;br /&gt;
| See [[Creation/Dev/Output_Methods#format.28.29_function|format()]]. &lt;br /&gt;
|- &lt;br /&gt;
| [[Creation/Dev/Output_Methods#format2.28.29_function|format2(string, array)]]&lt;br /&gt;
| &lt;br /&gt;
| Like format(), except that this expects the format string and an array of variables instead of passing the variables as separate parameters.&lt;br /&gt;
|-&lt;br /&gt;
| freefileresources(string)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| freezeplayer(float)&lt;br /&gt;
|&lt;br /&gt;
| Freezes the player for the number of seconds specified by float.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectat(float, float, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the specified screen position, third parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectatmouse(boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the mouse.  Parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectbyray(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectsbybox(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| 1st parameter defines the box {minx,miny,minz, maxx,maxy,maxz}.  Second parameter specifies the type of object to find (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| get3dscreenposition(string, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getanglesfromvector({x, y, z})&lt;br /&gt;
|&lt;br /&gt;
| Returns an array that contains the angles the 3D vector {x, y, z} makes with the X-Y and X-Z axes.&lt;br /&gt;
|-&lt;br /&gt;
| getascii(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the [http://www.asciitable.com/ ascii] code for string.&lt;br /&gt;
|-&lt;br /&gt;
| getbasepackage()&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getboxcenter(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array containing the center of a 3D box specified by string ({x0,y0,z0,x1,y1,z1,...}).&lt;br /&gt;
|-&lt;br /&gt;
| getdesktopresolution()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdisplaydevicelist()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadedupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| Returns the size of the downloaded update package.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackage()&lt;br /&gt;
|&lt;br /&gt;
| Returns a reference to current update package being downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackagescount()&lt;br /&gt;
|&lt;br /&gt;
| Returns a count of the number of update packages to download.&lt;br /&gt;
|-&lt;br /&gt;
| getdropz(string)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| getExtension(string)&lt;br /&gt;
|&lt;br /&gt;
| This function is the same as extractFileExt().  Takes in a file name, and returns its extension.&lt;br /&gt;
|-&lt;br /&gt;
| getfilemodtime(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns a timestamp of when the file was last modified (in unix time compatible to timevar2). This function accepts both exact file path and plain file name.&lt;br /&gt;
|-&lt;br /&gt;
| gethttprequest(string, integer, string)&lt;br /&gt;
| &lt;br /&gt;
| returns object (This function is the same as requestHttp())&lt;br /&gt;
|-&lt;br /&gt;
| getimgheight(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the height (in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getimgpixel(string, integer, integer)&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getimgwidth(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the width(in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getkeycode(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the keycode of the key indicated by string.  The keycode returned can be used in keydown2().&lt;br /&gt;
|-&lt;br /&gt;
| getloginaccountname()&lt;br /&gt;
|&lt;br /&gt;
| Presumably used for the login server.  Use player.account instead.&lt;br /&gt;
|-&lt;br /&gt;
| getmapx(string)&lt;br /&gt;
| &lt;br /&gt;
| Gets the x coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmapy(string)&lt;br /&gt;
|&lt;br /&gt;
| Gets the y coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmusicfilename()&lt;br /&gt;
|&lt;br /&gt;
| Returns the filename of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusicstatus()&lt;br /&gt;
|&lt;br /&gt;
| Returns the status of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusictags()&lt;br /&gt;
|&lt;br /&gt;
| Returns the tags of the music currently playing.  This function can be used to retrieve the title and artist info of the music.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayer(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayer() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayers(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayers() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloadcomplete()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the package downloads are complete.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloaded()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the most recent packages are already downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getplatform()&lt;br /&gt;
|&lt;br /&gt;
| Returns the platform that the player is using.  (i.e. windows, mac, or linux)&lt;br /&gt;
|-&lt;br /&gt;
| getresolutionlist(string)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getservername()&lt;br /&gt;
|&lt;br /&gt;
| Returns the name of the server the player is currently connected to.&lt;br /&gt;
|-&lt;br /&gt;
| getstringkeys(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array of the variables that begins with the supplied string.&lt;br /&gt;
|-&lt;br /&gt;
| getterraintexture(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getterraintextureindex(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| gettextheight(float zoom, string style, string font)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The height in pixels of the text with the given zoom, style and font.&lt;br /&gt;
|-&lt;br /&gt;
| gettextwidth(float zoom, string style, string font, string text)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The width of the text with the given zoom, style, font and text.&lt;br /&gt;
|-&lt;br /&gt;
| gettileset()&lt;br /&gt;
|&lt;br /&gt;
| returns string - the current main tileset (pics1.png, picso.png etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettilesettype()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - the current tileset type (pics1.png:0, picso.png:5 etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettotalupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The total size of the update packages.&lt;br /&gt;
|-&lt;br /&gt;
| getupdatepackage(string name)&lt;br /&gt;
|&lt;br /&gt;
| returns object - A reference to the update package with the given name.&lt;br /&gt;
|-&lt;br /&gt;
| getvectorfromangles(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|- &lt;br /&gt;
| getz(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| graalcontrolhasfocus(bool)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - Whether or not the graal control has focus.  Parameter says if it should also check if the chat bar has the focus&lt;br /&gt;
|-&lt;br /&gt;
| hideplayer(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides player for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hidesword(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player's sword for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hitnpc(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's npc with specified index causing the specified amount of halfhearts in damage. It also knocks back the npc based on the from X and Y coordinate passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitobjects(float power, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
| Hurts all the npcs with the specified power on the position passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitplayer(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's player with specified index causing the specified amount of halfhearts in damage. It also knocks back the player based on the from X and Y coordinate passed to it. Use 0 as the index to hit your own player.&lt;br /&gt;
|-&lt;br /&gt;
| isadminguild(str guildname)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - If the passed guildname is an admin guild or not.&lt;br /&gt;
|-&lt;br /&gt;
| isclassloaded(str classname)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the passed classname is loaded for the client.&lt;br /&gt;
|-&lt;br /&gt;
| iscursoron()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the cursor is on or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdevicefullscreenonly(str device)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the device is full screen only or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloading(str filename)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If a file is currently downloaded or requested from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloadingfiles()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently downloading or requesting files from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isfullscreenmode()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently in fullscreen mode.&lt;br /&gt;
|-&lt;br /&gt;
| isimgrectangletransparent(str, int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| ismusicplaying()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| isobject(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| issoundplaying(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2global(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydownglobal(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keyname(int)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| lay2(str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lightscene()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| loadclass(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadmap(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadtranslation(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lowercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| ltmfs(bool)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmax(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmin(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| makescreenshot2(str, int, float, float, float, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| matrixcreate(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixcreatefromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulpoint(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmultiply(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulvector(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| md5(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| noplayerkilling()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| onwall(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwall2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| opengraalurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl2(str, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play3d(str, bool, str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| popdialog()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pushdialog(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| putleaps(int, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| radtodeg(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| randomstring(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| removetiledefs(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| replaceani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfiledeletion(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilerename(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilesmove(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesthttp(str, int, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| requesttext(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesturl(str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| resetfocus()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| rotationadd(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationaddeuler(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationfromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationsub(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationtoeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rungarbagecollector()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| savelog(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| screenx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| screeny(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| selectfilefordownload(str)&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| selectfileforupload()&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#sendrpgmessage.28.29|sendrpgmessage(str)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtext(str, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#sendtorc.28.29|sendtorc(str)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| serverwarp(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setbeltcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcoatcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcontentcontrol(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcursor2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| seteffect(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfocus(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfogcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setgender(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sethead(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setinteriorrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setletters(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setmap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| sets a text map (you can see the tiles of other levels but not the npcs), parameters are text file with level names, the map image (not used anymore), default x and y for the head icons; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setminimap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| parameters are a text file with level names, the image, default x and y; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setmusicvolume(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setplayerdir(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshield(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshoecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshootparams(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskincolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandsizes(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsleevecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setspritesimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setstatusimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsuncolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsword(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setterrainrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| showstats(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| spyfire(int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| startrecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopmidi()&lt;br /&gt;
| &lt;br /&gt;
| same as stopmusic(), kept for compatibility&lt;br /&gt;
|-&lt;br /&gt;
| stopmusic()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| stoprecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopsound(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| strcmp(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| strequals(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| switchtoopengl()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| synctimeofday(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayercarry()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayerhorse()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| testplayer(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| trace(str)&lt;br /&gt;
| &lt;br /&gt;
| same as echo()&lt;br /&gt;
|-&lt;br /&gt;
| triggeraction(float, float, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| triggerserver(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| update3dterrain(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateboard(int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateterrain()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updatevisibledistance()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| uploadfile(str)&lt;br /&gt;
| &lt;br /&gt;
| uploads a file, you must provide the full path provided by a onDropFiles() event, also this will only work if the scripted RC has currently a file browser window open; once the file is uploaded an onFilesUploaded event will be invoked&lt;br /&gt;
|-&lt;br /&gt;
| uppercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Addition|vectoradd(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Cross Product|vectorcross(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Distance_Between_Terminal_Points|vectordist(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Dot Product|vectordot(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Length_.28Magnitude.2FModulus.29|vectorlen(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Unit_Length|vectornormalize(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectororthobasis(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector-Scalar_Multiplication|vectorscale(str, float)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Subtraction|vectorsub(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| worldx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| worldy(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| wraptext(int, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| wraptext2(int, float, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Objects=&lt;br /&gt;
{{:Creation/Dev/Script/Client}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=GUI Objects=&lt;br /&gt;
GUI Objects are currently well documented starting here [[Creation/Dev/Script/Client/GuiControl]].&lt;br /&gt;
&lt;br /&gt;
=Preference Variables=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::choosenvoicecodec&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivatebyvolume&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivationlevel&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microinputdevice&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microon&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microvolumefactor&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::midivolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::mp3volume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::radiovolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::reversestereo&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::sfxvolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::voicevolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::allowbyscript&lt;br /&gt;
| &lt;br /&gt;
| boolean [R]&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::area&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::audiobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::disabledaynight&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::format&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::fps&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::hideinterface&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::recordaudio&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::showmouse&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::size&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::videobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::allowglobalpms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::automapping&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontname&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontsize&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontconnectlevels&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontloadlistheads&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepasswords&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedport&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedudpport&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::language&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::limitnicknames&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::loadbuddylistfromserver&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nicknamelimit&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nomassmessages&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::notoalls&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::noudp&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::showyourselfonbuddylists&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::input::mousesensitivity&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::interior::lockarrays&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::defaultguistyle&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::detailfactor&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fogdistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fullscreenmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::resolution&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::screenshotformat&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::visibledistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::windowmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18800</id>
		<title>Creation/Dev/Script/Clientside Functions</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18800"/>
		<updated>2011-09-20T01:34:06Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;50%&amp;quot;&lt;br /&gt;
|[R]&lt;br /&gt;
| denotes it is read-only.&lt;br /&gt;
|-&lt;br /&gt;
|[3D]&lt;br /&gt;
| denotes it is a Graal3D function.&lt;br /&gt;
|-&lt;br /&gt;
|[opengl]&lt;br /&gt;
| denotes it is functional only in opengl mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| allfeatures&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allplayerscount&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the count of all players on your playerlist, including IRC bots.&lt;br /&gt;
|-&lt;br /&gt;
| allrenderobjecttypes&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allstats &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Used with showstats() in order to show all stats.&lt;br /&gt;
|-&lt;br /&gt;
| canspin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player has spin attack.&lt;br /&gt;
|-&lt;br /&gt;
| carriesblackstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a black stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesbush&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a bush.&lt;br /&gt;
|-&lt;br /&gt;
| carriesnpc&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying an NPC&lt;br /&gt;
|-&lt;br /&gt;
| carriessign&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a sign.&lt;br /&gt;
|-&lt;br /&gt;
| carriesstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesvase&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a vase.&lt;br /&gt;
|-&lt;br /&gt;
| downloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Returns the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the position of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadsize&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the size of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| editingmission&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| emoticonchar&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| focusx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| focusy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| ghostsnear&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If a ghost(observer) is in the same level as the player.&lt;br /&gt;
|-&lt;br /&gt;
| graalplugincookie&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| graalversion&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Version of Graal the player is using.&lt;br /&gt;
|-&lt;br /&gt;
| gravity&lt;br /&gt;
| ''float''&lt;br /&gt;
| The gravity value that effects how fast projectiles fall. It universally effects all projectiles.&lt;br /&gt;
|-&lt;br /&gt;
| installedlanguages&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isapplicationactive&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Is Graal window active?&lt;br /&gt;
|-&lt;br /&gt;
| iscarrying&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player is carrying something.&lt;br /&gt;
|-&lt;br /&gt;
| isfocused&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraal3d&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isleader&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player was the first to enter the level.&lt;br /&gt;
|-&lt;br /&gt;
| isonmap&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is on a map.&lt;br /&gt;
|-&lt;br /&gt;
| isopengl&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Graal is in opengl mode.&lt;br /&gt;
|-&lt;br /&gt;
| isrecordingvideo&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is currently recording(alt+6) Graal.&lt;br /&gt;
|-&lt;br /&gt;
| jpegquality&lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lastdownloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| The last file downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| levelorgx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| levelorgy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lighteffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| Whether the player has their lights enabled via options.&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttons &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttonsglobal&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousepitch&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousescreenx &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousescreeny &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousewheeldelta&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| How much the mouse wheel has been scrolled.&lt;br /&gt;
|-&lt;br /&gt;
| mousex&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousey&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the y-axis&lt;br /&gt;
|-&lt;br /&gt;
| mouseyaw&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| musiclen &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Length of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| musicpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Position of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| particleeffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If player has particles enabled in their options.&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebutton &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebuttonglobal &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| screenheight&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Height of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| screenwidth&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Width of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| scriptedcontrols &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scriptedplayerlist&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Whether the player has the scripted playerlist enabled.&lt;br /&gt;
|-&lt;br /&gt;
| scriptlogwritetoreadonly&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedlistplayers&lt;br /&gt;
| ''object''&lt;br /&gt;
| An object of all players selected on the playerlist.&lt;br /&gt;
|-&lt;br /&gt;
| selectedsword &lt;br /&gt;
| ''integer''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedweapon &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Index of the currently selected weapon.&lt;br /&gt;
|-&lt;br /&gt;
| servername&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Name of the server.&lt;br /&gt;
|-&lt;br /&gt;
| serverstartconnect &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| serverstartparams &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| shotbybaddy&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a baddy(default) arrow.&lt;br /&gt;
|-&lt;br /&gt;
| shotbyplayer&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by another players arrow.&lt;br /&gt;
|-&lt;br /&gt;
| showterraingrid&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| spritesimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set sprite image.&lt;br /&gt;
|-&lt;br /&gt;
| statusimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set state image.&lt;br /&gt;
|-&lt;br /&gt;
| timevar&lt;br /&gt;
| ''integer [R].''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar2&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar3&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
| Synchronized time which works on both server and client-side, precision is milliseconds.&lt;br /&gt;
|-&lt;br /&gt;
| wasshooted&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a default arrow.&lt;br /&gt;
|-&lt;br /&gt;
| waterheight&lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| weapons&lt;br /&gt;
| ''object [R]''&lt;br /&gt;
| all the players weapons, this includes login inherited weapons.&lt;br /&gt;
|-&lt;br /&gt;
| weaponsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If the players weapons are enabled via disableweapons()/enableweapons().&lt;br /&gt;
|-&lt;br /&gt;
| weathereffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If weather is enabled in the players options.&lt;br /&gt;
|-&lt;br /&gt;
| worldclockstopped&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldhour &lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminute &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminutesofday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldrealsecondsperday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Functions=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Function'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| addcontrol(object)&lt;br /&gt;
|&lt;br /&gt;
| adds 'object' to the parent control.&lt;br /&gt;
|-&lt;br /&gt;
| addmaterialmapping(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef(string image, string prefix, int format)&lt;br /&gt;
| &lt;br /&gt;
| Adds a tileset definition with the supplied tileset image, level prefix and tileset format (0=pics1, 1=new world, 5=terrain).&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef2(string image, string prefix, int x, int y)&lt;br /&gt;
| &lt;br /&gt;
| Overlays an image on the tileset with the supplied tileset image and level prefix. Parameters 'x' and 'y' represent the x and y position on the tileset of where to place the new image.&lt;br /&gt;
|-&lt;br /&gt;
| aindexof(float, array)&lt;br /&gt;
| &lt;br /&gt;
| Returns integer - the position of 'float' in the array.&lt;br /&gt;
|-&lt;br /&gt;
| arccos(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc cosine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| arcsin(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc sine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| attachplayertoobj(integer1, integer2)&lt;br /&gt;
| &lt;br /&gt;
| Attaches the player to the object with the matching ID where integer1 is the object type (currently only NPCs - 0) and integer2 is the ID of the desired object.&lt;br /&gt;
|-&lt;br /&gt;
| base64decode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Decodes a base64 string.&lt;br /&gt;
|-&lt;br /&gt;
| base64encode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Encodes string in to several characters of a 64 printable character set (A-Z, a-z, 0-9, + and /, while &amp;quot;=&amp;quot; is a special suffix code)&lt;br /&gt;
|-&lt;br /&gt;
| boxcontains(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| boxcontainsvector(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxintersect(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| boxoverlaps(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxscale(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| callnpc(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from an NPC where 'index' is the NPC's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| callweapon(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from a weapon where 'index' is the weapon's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| castray({x,y,x}, {x,y,z}, string type)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object - specify the start and end of the ray, and the object types (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| checksum(string)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| contains(string2, string1)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - True if string1 is contained within string2.&lt;br /&gt;
|-&lt;br /&gt;
| copystrings(string, string)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| cursoroff()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Disables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| cursoron()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Enables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| degtorad(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float - Converts angle measurements of degrees to radians&lt;br /&gt;
|-&lt;br /&gt;
| detachplayer()&lt;br /&gt;
| &lt;br /&gt;
| Detaches a player from an attached object.&lt;br /&gt;
|-&lt;br /&gt;
| disabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default movement system and controls(including weapons, sword, grab. Does not include Q-menu, pause, map...).&lt;br /&gt;
|-&lt;br /&gt;
| disablemap()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default map (M).&lt;br /&gt;
|-&lt;br /&gt;
| disablepause()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default pause (P).&lt;br /&gt;
|-&lt;br /&gt;
| disableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default Q-menu (Q).&lt;br /&gt;
|-&lt;br /&gt;
| disableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default sword (S) and weapons (D).&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#echo.28.29|echo(string)]]&lt;br /&gt;
| &lt;br /&gt;
| echos 'string' to the debug window(F2).&lt;br /&gt;
|-&lt;br /&gt;
| enabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default movement system.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Script/Functions/enablefeatures(int)|enablefeatures(int)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| enablemap()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default map system(M).&lt;br /&gt;
|-&lt;br /&gt;
| enablepause()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default pause system(P).&lt;br /&gt;
|-&lt;br /&gt;
| enableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default Q-menu(Q).&lt;br /&gt;
|-&lt;br /&gt;
| enableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default sword(S) and weapons(D).&lt;br /&gt;
|-&lt;br /&gt;
| escapestring(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string - adds \\ in front of &amp;quot;, ' and \\, and removes non-printable characters&lt;br /&gt;
|-&lt;br /&gt;
| explodebomb(integer)&lt;br /&gt;
| &lt;br /&gt;
| explodes the bomb with the id of 'integer'.&lt;br /&gt;
|-&lt;br /&gt;
| extractfilebase(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| extractfileext(string)&lt;br /&gt;
| &lt;br /&gt;
| Takes in a file name, and returns its extension. &lt;br /&gt;
|-&lt;br /&gt;
| extractfilepath(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string &lt;br /&gt;
|-&lt;br /&gt;
| fileexists(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean of whether the file 'str' exists in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| filesize(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns the size(int) of the file 'string' in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| fileupdate(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| findani(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findfiles(string, integer)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findlevel(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayer(float1, float2)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest player's object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayers(float, float)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest players' object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnpcbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the NPC object with the ID of 'int'.&lt;br /&gt;
|-&lt;br /&gt;
| findpathinarray(obj1, obj2, obj3, obj4, obj5, int, int, int)&lt;br /&gt;
|&lt;br /&gt;
| Returns object - Simple path-finding: Obj1 being tiles that allow walking, Obj2 being tiles that don't allow walking, Obj3; tiles that shouldn't be allowed to walked on, Obj4; tiles that are able to be walked on, Obj5; tiles where we may stop. Integers are relevant to the startx, starty and maximum path length. - Arrays for allowed/non-allowed tiles are only checked if they aren't null.&lt;br /&gt;
|-&lt;br /&gt;
| findplayer(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the account equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbycommunityname(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the community name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the ID equal to integer.&lt;br /&gt;
|-&lt;br /&gt;
| findweapon(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the weapon object with the name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#format.28.29_function|format(string, string, ...)]]&lt;br /&gt;
|&lt;br /&gt;
| See [[Creation/Dev/Output_Methods#format.28.29_function|format()]]. &lt;br /&gt;
|- &lt;br /&gt;
| [[Creation/Dev/Output_Methods#format2.28.29_function|format2(string, array)]]&lt;br /&gt;
| &lt;br /&gt;
| Like format(), except that this expects the format string and an array of variables instead of passing the variables as separate parameters.&lt;br /&gt;
|-&lt;br /&gt;
| freefileresources(string)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| freezeplayer(float)&lt;br /&gt;
|&lt;br /&gt;
| Freezes the player for the number of seconds specified by float.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectat(float, float, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the specified screen position, third parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectatmouse(boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the mouse.  Parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectbyray(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectsbybox(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| 1st parameter defines the box {minx,miny,minz, maxx,maxy,maxz}.  Second parameter specifies the type of object to find (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| get3dscreenposition(string, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getanglesfromvector({x, y, z})&lt;br /&gt;
|&lt;br /&gt;
| Returns an array that contains the angles the 3D vector {x, y, z} makes with the X-Y and X-Z axes.&lt;br /&gt;
|-&lt;br /&gt;
| getascii(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the [http://www.asciitable.com/ ascii] code for string.&lt;br /&gt;
|-&lt;br /&gt;
| getbasepackage()&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getboxcenter(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array containing the center of a 3D box specified by string ({x0,y0,z0,x1,y1,z1,...}).&lt;br /&gt;
|-&lt;br /&gt;
| getdesktopresolution()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdisplaydevicelist()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadedupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| Returns the size of the downloaded update package.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackage()&lt;br /&gt;
|&lt;br /&gt;
| Returns a reference to current update package being downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackagescount()&lt;br /&gt;
|&lt;br /&gt;
| Returns a count of the number of update packages to download.&lt;br /&gt;
|-&lt;br /&gt;
| getdropz(string)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| getExtension(string)&lt;br /&gt;
|&lt;br /&gt;
| This function is the same as extractFileExt().  Takes in a file name, and returns its extension.&lt;br /&gt;
|-&lt;br /&gt;
| getfilemodtime(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns a timestamp of when the file was last modified (in unix time compatible to timevar2). This function accepts both exact file path and plain file name.&lt;br /&gt;
|-&lt;br /&gt;
| gethttprequest(string, integer, string)&lt;br /&gt;
| &lt;br /&gt;
| returns object (This function is the same as requestHttp())&lt;br /&gt;
|-&lt;br /&gt;
| getimgheight(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the height (in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getimgpixel(string, integer, integer)&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getimgwidth(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the width(in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getkeycode(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the keycode of the key indicated by string.  The keycode returned can be used in keydown2().&lt;br /&gt;
|-&lt;br /&gt;
| getloginaccountname()&lt;br /&gt;
|&lt;br /&gt;
| Presumably used for the login server.  Use player.account instead.&lt;br /&gt;
|-&lt;br /&gt;
| getmapx(string)&lt;br /&gt;
| &lt;br /&gt;
| Gets the x coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmapy(string)&lt;br /&gt;
|&lt;br /&gt;
| Gets the y coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmusicfilename()&lt;br /&gt;
|&lt;br /&gt;
| Returns the filename of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusicstatus()&lt;br /&gt;
|&lt;br /&gt;
| Returns the status of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusictags()&lt;br /&gt;
|&lt;br /&gt;
| Returns the tags of the music currently playing.  This function can be used to retrieve the title and artist info of the music.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayer(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayer() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayers(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayers() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloadcomplete()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the package downloads are complete.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloaded()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the most recent packages are already downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getplatform()&lt;br /&gt;
|&lt;br /&gt;
| Returns the platform that the player is using.  (i.e. windows, mac, or linux)&lt;br /&gt;
|-&lt;br /&gt;
| getresolutionlist(string)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getservername()&lt;br /&gt;
|&lt;br /&gt;
| Returns the name of the server the player is currently connected to.&lt;br /&gt;
|-&lt;br /&gt;
| getstringkeys(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array of the variables that begins with the supplied string.&lt;br /&gt;
|-&lt;br /&gt;
| getterraintexture(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getterraintextureindex(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| gettextheight(float zoom, string style, string font)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The height in pixels of the text with the given zoom, style and font.&lt;br /&gt;
|-&lt;br /&gt;
| gettextwidth(float zoom, string style, string font, string text)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The width of the text with the given zoom, style, font and text.&lt;br /&gt;
|-&lt;br /&gt;
| gettileset()&lt;br /&gt;
|&lt;br /&gt;
| returns string - the current main tileset (pics1.png, picso.png etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettilesettype()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - the current tileset type (pics1.png:0, picso.png:5 etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettotalupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The total size of the update packages.&lt;br /&gt;
|-&lt;br /&gt;
| getupdatepackage(string name)&lt;br /&gt;
|&lt;br /&gt;
| returns object - A reference to the update package with the given name.&lt;br /&gt;
|-&lt;br /&gt;
| getvectorfromangles(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|- &lt;br /&gt;
| getz(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| graalcontrolhasfocus(bool)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - Whether or not the graal control has focus.  Parameter says if it should also check if the chat bar has the focus&lt;br /&gt;
|-&lt;br /&gt;
| hideplayer(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides player for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hidesword(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player's sword for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hitnpc(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's npc with specified index causing the specified amount of halfhearts in damage. It also knocks back the npc based on the from X and Y coordinate passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitobjects(float power, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
| Hurts all the npcs with the specified power on the position passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitplayer(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's player with specified index causing the specified amount of halfhearts in damage. It also knocks back the player based on the from X and Y coordinate passed to it. Use 0 as the index to hit your own player.&lt;br /&gt;
|-&lt;br /&gt;
| isadminguild(str guildname)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - If the passed guildname is an admin guild or not.&lt;br /&gt;
|-&lt;br /&gt;
| isclassloaded(str classname)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the passed classname is loaded for the client.&lt;br /&gt;
|-&lt;br /&gt;
| iscursoron()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the cursor is on or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdevicefullscreenonly(str device)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the device is full screen only or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloading(str filename)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If a file is currently downloaded or requested from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloadingfiles()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently downloading or requesting files from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isfullscreenmode()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently in fullscreen mode.&lt;br /&gt;
|-&lt;br /&gt;
| isimgrectangletransparent(str, int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| ismusicplaying()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| isobject(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| issoundplaying(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2global(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydownglobal(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keyname(int)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| lay2(str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lightscene()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| loadclass(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadmap(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadtranslation(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lowercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| ltmfs(bool)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmax(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmin(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| makescreenshot2(str, int, float, float, float, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| matrixcreate(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixcreatefromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulpoint(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmultiply(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulvector(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| md5(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| noplayerkilling()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| onwall(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwall2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| opengraalurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl2(str, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play3d(str, bool, str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| popdialog()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pushdialog(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| putleaps(int, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| radtodeg(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| randomstring(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| removetiledefs(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| replaceani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfiledeletion(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilerename(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilesmove(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesthttp(str, int, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| requesttext(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesturl(str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| resetfocus()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| rotationadd(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationaddeuler(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationfromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationsub(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationtoeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rungarbagecollector()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| savelog(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| screenx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| screeny(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| selectfilefordownload(str)&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| selectfileforupload()&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| sendrpgmessage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtext(str, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtorc(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| serverwarp(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setbeltcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcoatcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcontentcontrol(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcursor2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| seteffect(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfocus(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfogcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setgender(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sethead(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setinteriorrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setletters(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setmap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| sets a text map (you can see the tiles of other levels but not the npcs), parameters are text file with level names, the map image (not used anymore), default x and y for the head icons; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setminimap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| parameters are a text file with level names, the image, default x and y; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setmusicvolume(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setplayerdir(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshield(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshoecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshootparams(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskincolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandsizes(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsleevecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setspritesimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setstatusimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsuncolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsword(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setterrainrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| showstats(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| spyfire(int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| startrecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopmidi()&lt;br /&gt;
| &lt;br /&gt;
| same as stopmusic(), kept for compatibility&lt;br /&gt;
|-&lt;br /&gt;
| stopmusic()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| stoprecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopsound(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| strcmp(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| strequals(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| switchtoopengl()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| synctimeofday(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayercarry()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayerhorse()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| testplayer(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| trace(str)&lt;br /&gt;
| &lt;br /&gt;
| same as echo()&lt;br /&gt;
|-&lt;br /&gt;
| triggeraction(float, float, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| triggerserver(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| update3dterrain(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateboard(int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateterrain()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updatevisibledistance()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| uploadfile(str)&lt;br /&gt;
| &lt;br /&gt;
| uploads a file, you must provide the full path provided by a onDropFiles() event, also this will only work if the scripted RC has currently a file browser window open; once the file is uploaded an onFilesUploaded event will be invoked&lt;br /&gt;
|-&lt;br /&gt;
| uppercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Addition|vectoradd(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Cross Product|vectorcross(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Distance_Between_Terminal_Points|vectordist(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Dot Product|vectordot(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Length_.28Magnitude.2FModulus.29|vectorlen(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Unit_Length|vectornormalize(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectororthobasis(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector-Scalar_Multiplication|vectorscale(str, float)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Subtraction|vectorsub(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| worldx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| worldy(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| wraptext(int, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| wraptext2(int, float, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Objects=&lt;br /&gt;
{{:Creation/Dev/Script/Client}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=GUI Objects=&lt;br /&gt;
GUI Objects are currently well documented starting here [[Creation/Dev/Script/Client/GuiControl]].&lt;br /&gt;
&lt;br /&gt;
=Preference Variables=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::choosenvoicecodec&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivatebyvolume&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivationlevel&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microinputdevice&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microon&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microvolumefactor&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::midivolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::mp3volume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::radiovolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::reversestereo&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::sfxvolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::voicevolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::allowbyscript&lt;br /&gt;
| &lt;br /&gt;
| boolean [R]&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::area&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::audiobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::disabledaynight&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::format&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::fps&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::hideinterface&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::recordaudio&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::showmouse&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::size&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::videobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::allowglobalpms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::automapping&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontname&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontsize&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontconnectlevels&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontloadlistheads&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepasswords&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedport&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedudpport&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::language&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::limitnicknames&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::loadbuddylistfromserver&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nicknamelimit&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nomassmessages&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::notoalls&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::noudp&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::showyourselfonbuddylists&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::input::mousesensitivity&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::interior::lockarrays&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::defaultguistyle&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::detailfactor&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fogdistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fullscreenmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::resolution&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::screenshotformat&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::visibledistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::windowmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectorlen&amp;diff=18799</id>
		<title>Vectorlen</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectorlen&amp;diff=18799"/>
		<updated>2011-09-20T01:30:51Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Vectors#Vector_Length_.28Magnitude.2FModulus.29]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectornormalize&amp;diff=18798</id>
		<title>Vectornormalize</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectornormalize&amp;diff=18798"/>
		<updated>2011-09-20T01:30:10Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Vectors#Unit_Length]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectorscale&amp;diff=18797</id>
		<title>Vectorscale</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectorscale&amp;diff=18797"/>
		<updated>2011-09-20T01:28:40Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT[[Vectors#Vector-Scalar_Multiplication]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectordist&amp;diff=18796</id>
		<title>Vectordist</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectordist&amp;diff=18796"/>
		<updated>2011-09-20T01:26:48Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Vectors#Distance_Between_Terminal_Points]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectorsub&amp;diff=18795</id>
		<title>Vectorsub</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectorsub&amp;diff=18795"/>
		<updated>2011-09-20T01:25:48Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Vectors#Vector_Subtraction]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectoradd&amp;diff=18794</id>
		<title>Vectoradd</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectoradd&amp;diff=18794"/>
		<updated>2011-09-20T01:24:51Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Vectors#Vector_Addition]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectorcross&amp;diff=18793</id>
		<title>Vectorcross</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectorcross&amp;diff=18793"/>
		<updated>2011-09-20T01:22:14Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Cross_Product]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectordot&amp;diff=18792</id>
		<title>Vectordot</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectordot&amp;diff=18792"/>
		<updated>2011-09-20T01:21:33Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Dot_Product]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18791</id>
		<title>Creation/Dev/Script/Clientside Functions</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18791"/>
		<updated>2011-09-20T01:18:31Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Functions */ missing ]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;50%&amp;quot;&lt;br /&gt;
|[R]&lt;br /&gt;
| denotes it is read-only.&lt;br /&gt;
|-&lt;br /&gt;
|[3D]&lt;br /&gt;
| denotes it is a Graal3D function.&lt;br /&gt;
|-&lt;br /&gt;
|[opengl]&lt;br /&gt;
| denotes it is functional only in opengl mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| allfeatures&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allplayerscount&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the count of all players on your playerlist, including IRC bots.&lt;br /&gt;
|-&lt;br /&gt;
| allrenderobjecttypes&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allstats &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Used with showstats() in order to show all stats.&lt;br /&gt;
|-&lt;br /&gt;
| canspin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player has spin attack.&lt;br /&gt;
|-&lt;br /&gt;
| carriesblackstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a black stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesbush&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a bush.&lt;br /&gt;
|-&lt;br /&gt;
| carriesnpc&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying an NPC&lt;br /&gt;
|-&lt;br /&gt;
| carriessign&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a sign.&lt;br /&gt;
|-&lt;br /&gt;
| carriesstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesvase&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a vase.&lt;br /&gt;
|-&lt;br /&gt;
| downloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Returns the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the position of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadsize&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the size of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| editingmission&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| emoticonchar&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| focusx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| focusy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| ghostsnear&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If a ghost(observer) is in the same level as the player.&lt;br /&gt;
|-&lt;br /&gt;
| graalplugincookie&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| graalversion&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Version of Graal the player is using.&lt;br /&gt;
|-&lt;br /&gt;
| gravity&lt;br /&gt;
| ''float''&lt;br /&gt;
| The gravity value that effects how fast projectiles fall. It universally effects all projectiles.&lt;br /&gt;
|-&lt;br /&gt;
| installedlanguages&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isapplicationactive&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Is Graal window active?&lt;br /&gt;
|-&lt;br /&gt;
| iscarrying&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player is carrying something.&lt;br /&gt;
|-&lt;br /&gt;
| isfocused&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraal3d&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isleader&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player was the first to enter the level.&lt;br /&gt;
|-&lt;br /&gt;
| isonmap&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is on a map.&lt;br /&gt;
|-&lt;br /&gt;
| isopengl&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Graal is in opengl mode.&lt;br /&gt;
|-&lt;br /&gt;
| isrecordingvideo&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is currently recording(alt+6) Graal.&lt;br /&gt;
|-&lt;br /&gt;
| jpegquality&lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lastdownloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| The last file downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| levelorgx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| levelorgy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lighteffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| Whether the player has their lights enabled via options.&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttons &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttonsglobal&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousepitch&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousescreenx &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousescreeny &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousewheeldelta&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| How much the mouse wheel has been scrolled.&lt;br /&gt;
|-&lt;br /&gt;
| mousex&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousey&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the y-axis&lt;br /&gt;
|-&lt;br /&gt;
| mouseyaw&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| musiclen &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Length of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| musicpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Position of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| particleeffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If player has particles enabled in their options.&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebutton &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebuttonglobal &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| screenheight&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Height of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| screenwidth&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Width of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| scriptedcontrols &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scriptedplayerlist&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Whether the player has the scripted playerlist enabled.&lt;br /&gt;
|-&lt;br /&gt;
| scriptlogwritetoreadonly&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedlistplayers&lt;br /&gt;
| ''object''&lt;br /&gt;
| An object of all players selected on the playerlist.&lt;br /&gt;
|-&lt;br /&gt;
| selectedsword &lt;br /&gt;
| ''integer''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedweapon &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Index of the currently selected weapon.&lt;br /&gt;
|-&lt;br /&gt;
| servername&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Name of the server.&lt;br /&gt;
|-&lt;br /&gt;
| serverstartconnect &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| serverstartparams &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| shotbybaddy&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a baddy(default) arrow.&lt;br /&gt;
|-&lt;br /&gt;
| shotbyplayer&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by another players arrow.&lt;br /&gt;
|-&lt;br /&gt;
| showterraingrid&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| spritesimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set sprite image.&lt;br /&gt;
|-&lt;br /&gt;
| statusimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set state image.&lt;br /&gt;
|-&lt;br /&gt;
| timevar&lt;br /&gt;
| ''integer [R].''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar2&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar3&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
| Synchronized time which works on both server and client-side, precision is milliseconds.&lt;br /&gt;
|-&lt;br /&gt;
| wasshooted&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a default arrow.&lt;br /&gt;
|-&lt;br /&gt;
| waterheight&lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| weapons&lt;br /&gt;
| ''object [R]''&lt;br /&gt;
| all the players weapons, this includes login inherited weapons.&lt;br /&gt;
|-&lt;br /&gt;
| weaponsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If the players weapons are enabled via disableweapons()/enableweapons().&lt;br /&gt;
|-&lt;br /&gt;
| weathereffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If weather is enabled in the players options.&lt;br /&gt;
|-&lt;br /&gt;
| worldclockstopped&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldhour &lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminute &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminutesofday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldrealsecondsperday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Functions=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Function'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| addcontrol(object)&lt;br /&gt;
|&lt;br /&gt;
| adds 'object' to the parent control.&lt;br /&gt;
|-&lt;br /&gt;
| addmaterialmapping(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef(string image, string prefix, int format)&lt;br /&gt;
| &lt;br /&gt;
| Adds a tileset definition with the supplied tileset image, level prefix and tileset format (0=pics1, 1=new world, 5=terrain).&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef2(string image, string prefix, int x, int y)&lt;br /&gt;
| &lt;br /&gt;
| Overlays an image on the tileset with the supplied tileset image and level prefix. Parameters 'x' and 'y' represent the x and y position on the tileset of where to place the new image.&lt;br /&gt;
|-&lt;br /&gt;
| aindexof(float, array)&lt;br /&gt;
| &lt;br /&gt;
| Returns integer - the position of 'float' in the array.&lt;br /&gt;
|-&lt;br /&gt;
| arccos(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc cosine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| arcsin(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc sine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| attachplayertoobj(integer1, integer2)&lt;br /&gt;
| &lt;br /&gt;
| Attaches the player to the object with the matching ID where integer1 is the object type (currently only NPCs - 0) and integer2 is the ID of the desired object.&lt;br /&gt;
|-&lt;br /&gt;
| base64decode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Decodes a base64 string.&lt;br /&gt;
|-&lt;br /&gt;
| base64encode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Encodes string in to several characters of a 64 printable character set (A-Z, a-z, 0-9, + and /, while &amp;quot;=&amp;quot; is a special suffix code)&lt;br /&gt;
|-&lt;br /&gt;
| boxcontains(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| boxcontainsvector(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxintersect(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| boxoverlaps(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxscale(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| callnpc(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from an NPC where 'index' is the NPC's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| callweapon(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from a weapon where 'index' is the weapon's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| castray({x,y,x}, {x,y,z}, string type)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object - specify the start and end of the ray, and the object types (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| checksum(string)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| contains(string2, string1)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - True if string1 is contained within string2.&lt;br /&gt;
|-&lt;br /&gt;
| copystrings(string, string)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| cursoroff()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Disables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| cursoron()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Enables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| degtorad(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float - Converts angle measurements of degrees to radians&lt;br /&gt;
|-&lt;br /&gt;
| detachplayer()&lt;br /&gt;
| &lt;br /&gt;
| Detaches a player from an attached object.&lt;br /&gt;
|-&lt;br /&gt;
| disabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default movement system and controls(including weapons, sword, grab. Does not include Q-menu, pause, map...).&lt;br /&gt;
|-&lt;br /&gt;
| disablemap()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default map (M).&lt;br /&gt;
|-&lt;br /&gt;
| disablepause()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default pause (P).&lt;br /&gt;
|-&lt;br /&gt;
| disableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default Q-menu (Q).&lt;br /&gt;
|-&lt;br /&gt;
| disableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default sword (S) and weapons (D).&lt;br /&gt;
|-&lt;br /&gt;
| echo(string)&lt;br /&gt;
| &lt;br /&gt;
| echos 'string' to the debug window(F2).&lt;br /&gt;
|-&lt;br /&gt;
| enabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default movement system.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Script/Functions/enablefeatures(int)|enablefeatures(int)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| enablemap()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default map system(M).&lt;br /&gt;
|-&lt;br /&gt;
| enablepause()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default pause system(P).&lt;br /&gt;
|-&lt;br /&gt;
| enableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default Q-menu(Q).&lt;br /&gt;
|-&lt;br /&gt;
| enableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default sword(S) and weapons(D).&lt;br /&gt;
|-&lt;br /&gt;
| escapestring(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string - adds \\ in front of &amp;quot;, ' and \\, and removes non-printable characters&lt;br /&gt;
|-&lt;br /&gt;
| explodebomb(integer)&lt;br /&gt;
| &lt;br /&gt;
| explodes the bomb with the id of 'integer'.&lt;br /&gt;
|-&lt;br /&gt;
| extractfilebase(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| extractfileext(string)&lt;br /&gt;
| &lt;br /&gt;
| Takes in a file name, and returns its extension. &lt;br /&gt;
|-&lt;br /&gt;
| extractfilepath(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string &lt;br /&gt;
|-&lt;br /&gt;
| fileexists(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean of whether the file 'str' exists in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| filesize(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns the size(int) of the file 'string' in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| fileupdate(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| findani(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findfiles(string, integer)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findlevel(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayer(float1, float2)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest player's object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayers(float, float)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest players' object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnpcbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the NPC object with the ID of 'int'.&lt;br /&gt;
|-&lt;br /&gt;
| findpathinarray(obj1, obj2, obj3, obj4, obj5, int, int, int)&lt;br /&gt;
|&lt;br /&gt;
| Returns object - Simple path-finding: Obj1 being tiles that allow walking, Obj2 being tiles that don't allow walking, Obj3; tiles that shouldn't be allowed to walked on, Obj4; tiles that are able to be walked on, Obj5; tiles where we may stop. Integers are relevant to the startx, starty and maximum path length. - Arrays for allowed/non-allowed tiles are only checked if they aren't null.&lt;br /&gt;
|-&lt;br /&gt;
| findplayer(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the account equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbycommunityname(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the community name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the ID equal to integer.&lt;br /&gt;
|-&lt;br /&gt;
| findweapon(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the weapon object with the name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#format.28.29_function|format(string, string, ...)]]&lt;br /&gt;
|&lt;br /&gt;
| See [[Creation/Dev/Output_Methods#format.28.29_function|format()]]. &lt;br /&gt;
|- &lt;br /&gt;
| [[Creation/Dev/Output_Methods#format2.28.29_function|format2(string, array)]]&lt;br /&gt;
| &lt;br /&gt;
| Like format(), except that this expects the format string and an array of variables instead of passing the variables as separate parameters.&lt;br /&gt;
|-&lt;br /&gt;
| freefileresources(string)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| freezeplayer(float)&lt;br /&gt;
|&lt;br /&gt;
| Freezes the player for the number of seconds specified by float.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectat(float, float, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the specified screen position, third parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectatmouse(boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the mouse.  Parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectbyray(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectsbybox(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| 1st parameter defines the box {minx,miny,minz, maxx,maxy,maxz}.  Second parameter specifies the type of object to find (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| get3dscreenposition(string, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getanglesfromvector({x, y, z})&lt;br /&gt;
|&lt;br /&gt;
| Returns an array that contains the angles the 3D vector {x, y, z} makes with the X-Y and X-Z axes.&lt;br /&gt;
|-&lt;br /&gt;
| getascii(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the [http://www.asciitable.com/ ascii] code for string.&lt;br /&gt;
|-&lt;br /&gt;
| getbasepackage()&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getboxcenter(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array containing the center of a 3D box specified by string ({x0,y0,z0,x1,y1,z1,...}).&lt;br /&gt;
|-&lt;br /&gt;
| getdesktopresolution()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdisplaydevicelist()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadedupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| Returns the size of the downloaded update package.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackage()&lt;br /&gt;
|&lt;br /&gt;
| Returns a reference to current update package being downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackagescount()&lt;br /&gt;
|&lt;br /&gt;
| Returns a count of the number of update packages to download.&lt;br /&gt;
|-&lt;br /&gt;
| getdropz(string)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| getExtension(string)&lt;br /&gt;
|&lt;br /&gt;
| This function is the same as extractFileExt().  Takes in a file name, and returns its extension.&lt;br /&gt;
|-&lt;br /&gt;
| getfilemodtime(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns a timestamp of when the file was last modified (in unix time compatible to timevar2). This function accepts both exact file path and plain file name.&lt;br /&gt;
|-&lt;br /&gt;
| gethttprequest(string, integer, string)&lt;br /&gt;
| &lt;br /&gt;
| returns object (This function is the same as requestHttp())&lt;br /&gt;
|-&lt;br /&gt;
| getimgheight(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the height (in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getimgpixel(string, integer, integer)&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getimgwidth(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the width(in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getkeycode(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the keycode of the key indicated by string.  The keycode returned can be used in keydown2().&lt;br /&gt;
|-&lt;br /&gt;
| getloginaccountname()&lt;br /&gt;
|&lt;br /&gt;
| Presumably used for the login server.  Use player.account instead.&lt;br /&gt;
|-&lt;br /&gt;
| getmapx(string)&lt;br /&gt;
| &lt;br /&gt;
| Gets the x coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmapy(string)&lt;br /&gt;
|&lt;br /&gt;
| Gets the y coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmusicfilename()&lt;br /&gt;
|&lt;br /&gt;
| Returns the filename of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusicstatus()&lt;br /&gt;
|&lt;br /&gt;
| Returns the status of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusictags()&lt;br /&gt;
|&lt;br /&gt;
| Returns the tags of the music currently playing.  This function can be used to retrieve the title and artist info of the music.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayer(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayer() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayers(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayers() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloadcomplete()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the package downloads are complete.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloaded()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the most recent packages are already downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getplatform()&lt;br /&gt;
|&lt;br /&gt;
| Returns the platform that the player is using.  (i.e. windows, mac, or linux)&lt;br /&gt;
|-&lt;br /&gt;
| getresolutionlist(string)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getservername()&lt;br /&gt;
|&lt;br /&gt;
| Returns the name of the server the player is currently connected to.&lt;br /&gt;
|-&lt;br /&gt;
| getstringkeys(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array of the variables that begins with the supplied string.&lt;br /&gt;
|-&lt;br /&gt;
| getterraintexture(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getterraintextureindex(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| gettextheight(float zoom, string style, string font)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The height in pixels of the text with the given zoom, style and font.&lt;br /&gt;
|-&lt;br /&gt;
| gettextwidth(float zoom, string style, string font, string text)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The width of the text with the given zoom, style, font and text.&lt;br /&gt;
|-&lt;br /&gt;
| gettileset()&lt;br /&gt;
|&lt;br /&gt;
| returns string - the current main tileset (pics1.png, picso.png etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettilesettype()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - the current tileset type (pics1.png:0, picso.png:5 etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettotalupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The total size of the update packages.&lt;br /&gt;
|-&lt;br /&gt;
| getupdatepackage(string name)&lt;br /&gt;
|&lt;br /&gt;
| returns object - A reference to the update package with the given name.&lt;br /&gt;
|-&lt;br /&gt;
| getvectorfromangles(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|- &lt;br /&gt;
| getz(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| graalcontrolhasfocus(bool)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - Whether or not the graal control has focus.  Parameter says if it should also check if the chat bar has the focus&lt;br /&gt;
|-&lt;br /&gt;
| hideplayer(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides player for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hidesword(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player's sword for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hitnpc(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's npc with specified index causing the specified amount of halfhearts in damage. It also knocks back the npc based on the from X and Y coordinate passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitobjects(float power, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
| Hurts all the npcs with the specified power on the position passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitplayer(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's player with specified index causing the specified amount of halfhearts in damage. It also knocks back the player based on the from X and Y coordinate passed to it. Use 0 as the index to hit your own player.&lt;br /&gt;
|-&lt;br /&gt;
| isadminguild(str guildname)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - If the passed guildname is an admin guild or not.&lt;br /&gt;
|-&lt;br /&gt;
| isclassloaded(str classname)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the passed classname is loaded for the client.&lt;br /&gt;
|-&lt;br /&gt;
| iscursoron()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the cursor is on or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdevicefullscreenonly(str device)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the device is full screen only or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloading(str filename)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If a file is currently downloaded or requested from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloadingfiles()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently downloading or requesting files from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isfullscreenmode()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently in fullscreen mode.&lt;br /&gt;
|-&lt;br /&gt;
| isimgrectangletransparent(str, int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| ismusicplaying()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| isobject(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| issoundplaying(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2global(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydownglobal(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keyname(int)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| lay2(str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lightscene()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| loadclass(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadmap(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadtranslation(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lowercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| ltmfs(bool)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmax(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmin(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| makescreenshot2(str, int, float, float, float, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| matrixcreate(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixcreatefromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulpoint(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmultiply(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulvector(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| md5(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| noplayerkilling()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| onwall(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwall2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| opengraalurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl2(str, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play3d(str, bool, str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| popdialog()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pushdialog(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| putleaps(int, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| radtodeg(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| randomstring(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| removetiledefs(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| replaceani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfiledeletion(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilerename(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilesmove(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesthttp(str, int, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| requesttext(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesturl(str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| resetfocus()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| rotationadd(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationaddeuler(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationfromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationsub(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationtoeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rungarbagecollector()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| savelog(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| screenx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| screeny(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| selectfilefordownload(str)&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| selectfileforupload()&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| sendrpgmessage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtext(str, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtorc(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| serverwarp(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setbeltcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcoatcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcontentcontrol(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcursor2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| seteffect(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfocus(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfogcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setgender(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sethead(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setinteriorrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setletters(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setmap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| sets a text map (you can see the tiles of other levels but not the npcs), parameters are text file with level names, the map image (not used anymore), default x and y for the head icons; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setminimap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| parameters are a text file with level names, the image, default x and y; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setmusicvolume(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setplayerdir(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshield(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshoecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshootparams(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskincolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandsizes(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsleevecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setspritesimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setstatusimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsuncolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsword(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setterrainrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| showstats(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| spyfire(int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| startrecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopmidi()&lt;br /&gt;
| &lt;br /&gt;
| same as stopmusic(), kept for compatibility&lt;br /&gt;
|-&lt;br /&gt;
| stopmusic()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| stoprecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopsound(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| strcmp(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| strequals(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| switchtoopengl()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| synctimeofday(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayercarry()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayerhorse()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| testplayer(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| trace(str)&lt;br /&gt;
| &lt;br /&gt;
| same as echo()&lt;br /&gt;
|-&lt;br /&gt;
| triggeraction(float, float, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| triggerserver(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| update3dterrain(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateboard(int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateterrain()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updatevisibledistance()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| uploadfile(str)&lt;br /&gt;
| &lt;br /&gt;
| uploads a file, you must provide the full path provided by a onDropFiles() event, also this will only work if the scripted RC has currently a file browser window open; once the file is uploaded an onFilesUploaded event will be invoked&lt;br /&gt;
|-&lt;br /&gt;
| uppercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Addition|vectoradd(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Cross Product|vectorcross(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Distance_Between_Terminal_Points|vectordist(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Dot Product|vectordot(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Length_.28Magnitude.2FModulus.29|vectorlen(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Unit_Length|vectornormalize(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectororthobasis(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector-Scalar_Multiplication|vectorscale(str, float)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Subtraction|vectorsub(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| worldx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| worldy(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| wraptext(int, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| wraptext2(int, float, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Objects=&lt;br /&gt;
{{:Creation/Dev/Script/Client}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=GUI Objects=&lt;br /&gt;
GUI Objects are currently well documented starting here [[Creation/Dev/Script/Client/GuiControl]].&lt;br /&gt;
&lt;br /&gt;
=Preference Variables=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::choosenvoicecodec&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivatebyvolume&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivationlevel&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microinputdevice&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microon&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microvolumefactor&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::midivolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::mp3volume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::radiovolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::reversestereo&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::sfxvolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::voicevolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::allowbyscript&lt;br /&gt;
| &lt;br /&gt;
| boolean [R]&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::area&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::audiobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::disabledaynight&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::format&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::fps&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::hideinterface&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::recordaudio&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::showmouse&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::size&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::videobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::allowglobalpms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::automapping&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontname&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontsize&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontconnectlevels&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontloadlistheads&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepasswords&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedport&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedudpport&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::language&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::limitnicknames&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::loadbuddylistfromserver&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nicknamelimit&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nomassmessages&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::notoalls&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::noudp&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::showyourselfonbuddylists&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::input::mousesensitivity&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::interior::lockarrays&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::defaultguistyle&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::detailfactor&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fogdistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fullscreenmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::resolution&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::screenshotformat&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::visibledistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::windowmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18790</id>
		<title>Creation/Dev/Script/Clientside Functions</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18790"/>
		<updated>2011-09-20T01:17:59Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Functions */ links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;50%&amp;quot;&lt;br /&gt;
|[R]&lt;br /&gt;
| denotes it is read-only.&lt;br /&gt;
|-&lt;br /&gt;
|[3D]&lt;br /&gt;
| denotes it is a Graal3D function.&lt;br /&gt;
|-&lt;br /&gt;
|[opengl]&lt;br /&gt;
| denotes it is functional only in opengl mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| allfeatures&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allplayerscount&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the count of all players on your playerlist, including IRC bots.&lt;br /&gt;
|-&lt;br /&gt;
| allrenderobjecttypes&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allstats &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Used with showstats() in order to show all stats.&lt;br /&gt;
|-&lt;br /&gt;
| canspin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player has spin attack.&lt;br /&gt;
|-&lt;br /&gt;
| carriesblackstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a black stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesbush&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a bush.&lt;br /&gt;
|-&lt;br /&gt;
| carriesnpc&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying an NPC&lt;br /&gt;
|-&lt;br /&gt;
| carriessign&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a sign.&lt;br /&gt;
|-&lt;br /&gt;
| carriesstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesvase&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a vase.&lt;br /&gt;
|-&lt;br /&gt;
| downloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Returns the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the position of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadsize&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the size of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| editingmission&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| emoticonchar&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| focusx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| focusy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| ghostsnear&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If a ghost(observer) is in the same level as the player.&lt;br /&gt;
|-&lt;br /&gt;
| graalplugincookie&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| graalversion&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Version of Graal the player is using.&lt;br /&gt;
|-&lt;br /&gt;
| gravity&lt;br /&gt;
| ''float''&lt;br /&gt;
| The gravity value that effects how fast projectiles fall. It universally effects all projectiles.&lt;br /&gt;
|-&lt;br /&gt;
| installedlanguages&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isapplicationactive&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Is Graal window active?&lt;br /&gt;
|-&lt;br /&gt;
| iscarrying&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player is carrying something.&lt;br /&gt;
|-&lt;br /&gt;
| isfocused&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraal3d&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isleader&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player was the first to enter the level.&lt;br /&gt;
|-&lt;br /&gt;
| isonmap&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is on a map.&lt;br /&gt;
|-&lt;br /&gt;
| isopengl&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Graal is in opengl mode.&lt;br /&gt;
|-&lt;br /&gt;
| isrecordingvideo&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is currently recording(alt+6) Graal.&lt;br /&gt;
|-&lt;br /&gt;
| jpegquality&lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lastdownloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| The last file downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| levelorgx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| levelorgy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lighteffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| Whether the player has their lights enabled via options.&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttons &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttonsglobal&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousepitch&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousescreenx &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousescreeny &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousewheeldelta&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| How much the mouse wheel has been scrolled.&lt;br /&gt;
|-&lt;br /&gt;
| mousex&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousey&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the y-axis&lt;br /&gt;
|-&lt;br /&gt;
| mouseyaw&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| musiclen &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Length of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| musicpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Position of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| particleeffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If player has particles enabled in their options.&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebutton &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebuttonglobal &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| screenheight&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Height of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| screenwidth&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Width of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| scriptedcontrols &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scriptedplayerlist&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Whether the player has the scripted playerlist enabled.&lt;br /&gt;
|-&lt;br /&gt;
| scriptlogwritetoreadonly&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedlistplayers&lt;br /&gt;
| ''object''&lt;br /&gt;
| An object of all players selected on the playerlist.&lt;br /&gt;
|-&lt;br /&gt;
| selectedsword &lt;br /&gt;
| ''integer''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedweapon &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Index of the currently selected weapon.&lt;br /&gt;
|-&lt;br /&gt;
| servername&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Name of the server.&lt;br /&gt;
|-&lt;br /&gt;
| serverstartconnect &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| serverstartparams &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| shotbybaddy&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a baddy(default) arrow.&lt;br /&gt;
|-&lt;br /&gt;
| shotbyplayer&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by another players arrow.&lt;br /&gt;
|-&lt;br /&gt;
| showterraingrid&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| spritesimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set sprite image.&lt;br /&gt;
|-&lt;br /&gt;
| statusimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set state image.&lt;br /&gt;
|-&lt;br /&gt;
| timevar&lt;br /&gt;
| ''integer [R].''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar2&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar3&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
| Synchronized time which works on both server and client-side, precision is milliseconds.&lt;br /&gt;
|-&lt;br /&gt;
| wasshooted&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a default arrow.&lt;br /&gt;
|-&lt;br /&gt;
| waterheight&lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| weapons&lt;br /&gt;
| ''object [R]''&lt;br /&gt;
| all the players weapons, this includes login inherited weapons.&lt;br /&gt;
|-&lt;br /&gt;
| weaponsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If the players weapons are enabled via disableweapons()/enableweapons().&lt;br /&gt;
|-&lt;br /&gt;
| weathereffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If weather is enabled in the players options.&lt;br /&gt;
|-&lt;br /&gt;
| worldclockstopped&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldhour &lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminute &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminutesofday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldrealsecondsperday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Functions=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Function'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| addcontrol(object)&lt;br /&gt;
|&lt;br /&gt;
| adds 'object' to the parent control.&lt;br /&gt;
|-&lt;br /&gt;
| addmaterialmapping(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef(string image, string prefix, int format)&lt;br /&gt;
| &lt;br /&gt;
| Adds a tileset definition with the supplied tileset image, level prefix and tileset format (0=pics1, 1=new world, 5=terrain).&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef2(string image, string prefix, int x, int y)&lt;br /&gt;
| &lt;br /&gt;
| Overlays an image on the tileset with the supplied tileset image and level prefix. Parameters 'x' and 'y' represent the x and y position on the tileset of where to place the new image.&lt;br /&gt;
|-&lt;br /&gt;
| aindexof(float, array)&lt;br /&gt;
| &lt;br /&gt;
| Returns integer - the position of 'float' in the array.&lt;br /&gt;
|-&lt;br /&gt;
| arccos(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc cosine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| arcsin(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc sine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| attachplayertoobj(integer1, integer2)&lt;br /&gt;
| &lt;br /&gt;
| Attaches the player to the object with the matching ID where integer1 is the object type (currently only NPCs - 0) and integer2 is the ID of the desired object.&lt;br /&gt;
|-&lt;br /&gt;
| base64decode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Decodes a base64 string.&lt;br /&gt;
|-&lt;br /&gt;
| base64encode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Encodes string in to several characters of a 64 printable character set (A-Z, a-z, 0-9, + and /, while &amp;quot;=&amp;quot; is a special suffix code)&lt;br /&gt;
|-&lt;br /&gt;
| boxcontains(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| boxcontainsvector(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxintersect(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| boxoverlaps(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxscale(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| callnpc(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from an NPC where 'index' is the NPC's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| callweapon(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from a weapon where 'index' is the weapon's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| castray({x,y,x}, {x,y,z}, string type)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object - specify the start and end of the ray, and the object types (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| checksum(string)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| contains(string2, string1)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - True if string1 is contained within string2.&lt;br /&gt;
|-&lt;br /&gt;
| copystrings(string, string)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| cursoroff()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Disables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| cursoron()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Enables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| degtorad(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float - Converts angle measurements of degrees to radians&lt;br /&gt;
|-&lt;br /&gt;
| detachplayer()&lt;br /&gt;
| &lt;br /&gt;
| Detaches a player from an attached object.&lt;br /&gt;
|-&lt;br /&gt;
| disabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default movement system and controls(including weapons, sword, grab. Does not include Q-menu, pause, map...).&lt;br /&gt;
|-&lt;br /&gt;
| disablemap()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default map (M).&lt;br /&gt;
|-&lt;br /&gt;
| disablepause()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default pause (P).&lt;br /&gt;
|-&lt;br /&gt;
| disableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default Q-menu (Q).&lt;br /&gt;
|-&lt;br /&gt;
| disableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default sword (S) and weapons (D).&lt;br /&gt;
|-&lt;br /&gt;
| echo(string)&lt;br /&gt;
| &lt;br /&gt;
| echos 'string' to the debug window(F2).&lt;br /&gt;
|-&lt;br /&gt;
| enabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default movement system.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Script/Functions/enablefeatures(int)|enablefeatures(int)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| enablemap()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default map system(M).&lt;br /&gt;
|-&lt;br /&gt;
| enablepause()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default pause system(P).&lt;br /&gt;
|-&lt;br /&gt;
| enableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default Q-menu(Q).&lt;br /&gt;
|-&lt;br /&gt;
| enableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default sword(S) and weapons(D).&lt;br /&gt;
|-&lt;br /&gt;
| escapestring(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string - adds \\ in front of &amp;quot;, ' and \\, and removes non-printable characters&lt;br /&gt;
|-&lt;br /&gt;
| explodebomb(integer)&lt;br /&gt;
| &lt;br /&gt;
| explodes the bomb with the id of 'integer'.&lt;br /&gt;
|-&lt;br /&gt;
| extractfilebase(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| extractfileext(string)&lt;br /&gt;
| &lt;br /&gt;
| Takes in a file name, and returns its extension. &lt;br /&gt;
|-&lt;br /&gt;
| extractfilepath(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string &lt;br /&gt;
|-&lt;br /&gt;
| fileexists(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean of whether the file 'str' exists in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| filesize(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns the size(int) of the file 'string' in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| fileupdate(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| findani(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findfiles(string, integer)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findlevel(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayer(float1, float2)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest player's object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayers(float, float)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest players' object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnpcbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the NPC object with the ID of 'int'.&lt;br /&gt;
|-&lt;br /&gt;
| findpathinarray(obj1, obj2, obj3, obj4, obj5, int, int, int)&lt;br /&gt;
|&lt;br /&gt;
| Returns object - Simple path-finding: Obj1 being tiles that allow walking, Obj2 being tiles that don't allow walking, Obj3; tiles that shouldn't be allowed to walked on, Obj4; tiles that are able to be walked on, Obj5; tiles where we may stop. Integers are relevant to the startx, starty and maximum path length. - Arrays for allowed/non-allowed tiles are only checked if they aren't null.&lt;br /&gt;
|-&lt;br /&gt;
| findplayer(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the account equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbycommunityname(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the community name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the ID equal to integer.&lt;br /&gt;
|-&lt;br /&gt;
| findweapon(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the weapon object with the name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#format.28.29_function|format(string, string, ...)]]&lt;br /&gt;
|&lt;br /&gt;
| See [[Creation/Dev/Output_Methods#format.28.29_function|format()]]. &lt;br /&gt;
|- &lt;br /&gt;
| [[Creation/Dev/Output_Methods#format2.28.29_function|format2(string, array)]]&lt;br /&gt;
| &lt;br /&gt;
| Like format(), except that this expects the format string and an array of variables instead of passing the variables as separate parameters.&lt;br /&gt;
|-&lt;br /&gt;
| freefileresources(string)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| freezeplayer(float)&lt;br /&gt;
|&lt;br /&gt;
| Freezes the player for the number of seconds specified by float.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectat(float, float, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the specified screen position, third parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectatmouse(boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the mouse.  Parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectbyray(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectsbybox(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| 1st parameter defines the box {minx,miny,minz, maxx,maxy,maxz}.  Second parameter specifies the type of object to find (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| get3dscreenposition(string, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getanglesfromvector({x, y, z})&lt;br /&gt;
|&lt;br /&gt;
| Returns an array that contains the angles the 3D vector {x, y, z} makes with the X-Y and X-Z axes.&lt;br /&gt;
|-&lt;br /&gt;
| getascii(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the [http://www.asciitable.com/ ascii] code for string.&lt;br /&gt;
|-&lt;br /&gt;
| getbasepackage()&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getboxcenter(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array containing the center of a 3D box specified by string ({x0,y0,z0,x1,y1,z1,...}).&lt;br /&gt;
|-&lt;br /&gt;
| getdesktopresolution()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdisplaydevicelist()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadedupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| Returns the size of the downloaded update package.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackage()&lt;br /&gt;
|&lt;br /&gt;
| Returns a reference to current update package being downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackagescount()&lt;br /&gt;
|&lt;br /&gt;
| Returns a count of the number of update packages to download.&lt;br /&gt;
|-&lt;br /&gt;
| getdropz(string)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| getExtension(string)&lt;br /&gt;
|&lt;br /&gt;
| This function is the same as extractFileExt().  Takes in a file name, and returns its extension.&lt;br /&gt;
|-&lt;br /&gt;
| getfilemodtime(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns a timestamp of when the file was last modified (in unix time compatible to timevar2). This function accepts both exact file path and plain file name.&lt;br /&gt;
|-&lt;br /&gt;
| gethttprequest(string, integer, string)&lt;br /&gt;
| &lt;br /&gt;
| returns object (This function is the same as requestHttp())&lt;br /&gt;
|-&lt;br /&gt;
| getimgheight(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the height (in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getimgpixel(string, integer, integer)&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getimgwidth(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the width(in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getkeycode(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the keycode of the key indicated by string.  The keycode returned can be used in keydown2().&lt;br /&gt;
|-&lt;br /&gt;
| getloginaccountname()&lt;br /&gt;
|&lt;br /&gt;
| Presumably used for the login server.  Use player.account instead.&lt;br /&gt;
|-&lt;br /&gt;
| getmapx(string)&lt;br /&gt;
| &lt;br /&gt;
| Gets the x coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmapy(string)&lt;br /&gt;
|&lt;br /&gt;
| Gets the y coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmusicfilename()&lt;br /&gt;
|&lt;br /&gt;
| Returns the filename of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusicstatus()&lt;br /&gt;
|&lt;br /&gt;
| Returns the status of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusictags()&lt;br /&gt;
|&lt;br /&gt;
| Returns the tags of the music currently playing.  This function can be used to retrieve the title and artist info of the music.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayer(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayer() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayers(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayers() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloadcomplete()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the package downloads are complete.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloaded()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the most recent packages are already downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getplatform()&lt;br /&gt;
|&lt;br /&gt;
| Returns the platform that the player is using.  (i.e. windows, mac, or linux)&lt;br /&gt;
|-&lt;br /&gt;
| getresolutionlist(string)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getservername()&lt;br /&gt;
|&lt;br /&gt;
| Returns the name of the server the player is currently connected to.&lt;br /&gt;
|-&lt;br /&gt;
| getstringkeys(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array of the variables that begins with the supplied string.&lt;br /&gt;
|-&lt;br /&gt;
| getterraintexture(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getterraintextureindex(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| gettextheight(float zoom, string style, string font)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The height in pixels of the text with the given zoom, style and font.&lt;br /&gt;
|-&lt;br /&gt;
| gettextwidth(float zoom, string style, string font, string text)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The width of the text with the given zoom, style, font and text.&lt;br /&gt;
|-&lt;br /&gt;
| gettileset()&lt;br /&gt;
|&lt;br /&gt;
| returns string - the current main tileset (pics1.png, picso.png etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettilesettype()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - the current tileset type (pics1.png:0, picso.png:5 etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettotalupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The total size of the update packages.&lt;br /&gt;
|-&lt;br /&gt;
| getupdatepackage(string name)&lt;br /&gt;
|&lt;br /&gt;
| returns object - A reference to the update package with the given name.&lt;br /&gt;
|-&lt;br /&gt;
| getvectorfromangles(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|- &lt;br /&gt;
| getz(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| graalcontrolhasfocus(bool)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - Whether or not the graal control has focus.  Parameter says if it should also check if the chat bar has the focus&lt;br /&gt;
|-&lt;br /&gt;
| hideplayer(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides player for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hidesword(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player's sword for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hitnpc(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's npc with specified index causing the specified amount of halfhearts in damage. It also knocks back the npc based on the from X and Y coordinate passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitobjects(float power, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
| Hurts all the npcs with the specified power on the position passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitplayer(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's player with specified index causing the specified amount of halfhearts in damage. It also knocks back the player based on the from X and Y coordinate passed to it. Use 0 as the index to hit your own player.&lt;br /&gt;
|-&lt;br /&gt;
| isadminguild(str guildname)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - If the passed guildname is an admin guild or not.&lt;br /&gt;
|-&lt;br /&gt;
| isclassloaded(str classname)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the passed classname is loaded for the client.&lt;br /&gt;
|-&lt;br /&gt;
| iscursoron()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the cursor is on or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdevicefullscreenonly(str device)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the device is full screen only or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloading(str filename)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If a file is currently downloaded or requested from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloadingfiles()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently downloading or requesting files from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isfullscreenmode()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently in fullscreen mode.&lt;br /&gt;
|-&lt;br /&gt;
| isimgrectangletransparent(str, int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| ismusicplaying()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| isobject(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| issoundplaying(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2global(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydownglobal(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keyname(int)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| lay2(str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lightscene()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| loadclass(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadmap(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadtranslation(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lowercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| ltmfs(bool)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmax(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmin(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| makescreenshot2(str, int, float, float, float, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| matrixcreate(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixcreatefromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulpoint(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmultiply(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulvector(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| md5(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| noplayerkilling()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| onwall(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwall2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| opengraalurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl2(str, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play3d(str, bool, str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| popdialog()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pushdialog(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| putleaps(int, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| radtodeg(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| randomstring(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| removetiledefs(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| replaceani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfiledeletion(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilerename(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilesmove(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesthttp(str, int, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| requesttext(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesturl(str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| resetfocus()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| rotationadd(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationaddeuler(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationfromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationsub(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationtoeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rungarbagecollector()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| savelog(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| screenx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| screeny(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| selectfilefordownload(str)&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| selectfileforupload()&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| sendrpgmessage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtext(str, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtorc(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| serverwarp(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setbeltcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcoatcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcontentcontrol(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcursor2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| seteffect(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfocus(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfogcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setgender(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sethead(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setinteriorrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setletters(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setmap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| sets a text map (you can see the tiles of other levels but not the npcs), parameters are text file with level names, the map image (not used anymore), default x and y for the head icons; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setminimap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| parameters are a text file with level names, the image, default x and y; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setmusicvolume(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setplayerdir(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshield(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshoecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshootparams(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskincolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandsizes(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsleevecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setspritesimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setstatusimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsuncolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsword(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setterrainrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| showstats(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| spyfire(int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| startrecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopmidi()&lt;br /&gt;
| &lt;br /&gt;
| same as stopmusic(), kept for compatibility&lt;br /&gt;
|-&lt;br /&gt;
| stopmusic()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| stoprecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopsound(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| strcmp(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| strequals(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| switchtoopengl()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| synctimeofday(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayercarry()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayerhorse()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| testplayer(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| trace(str)&lt;br /&gt;
| &lt;br /&gt;
| same as echo()&lt;br /&gt;
|-&lt;br /&gt;
| triggeraction(float, float, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| triggerserver(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| update3dterrain(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateboard(int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateterrain()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updatevisibledistance()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| uploadfile(str)&lt;br /&gt;
| &lt;br /&gt;
| uploads a file, you must provide the full path provided by a onDropFiles() event, also this will only work if the scripted RC has currently a file browser window open; once the file is uploaded an onFilesUploaded event will be invoked&lt;br /&gt;
|-&lt;br /&gt;
| uppercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Addition|vectoradd(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Cross Product|vectorcross(str, str)]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Distance_Between_Terminal_Points|vectordist(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Dot Product|vectordot(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Length_.28Magnitude.2FModulus.29|vectorlen(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Unit_Length|vectornormalize(str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectororthobasis(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector-Scalar_Multiplication|vectorscale(str, float)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| [[Vectors#Vector_Subtraction|vectorsub(str, str)]]&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| worldx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| worldy(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| wraptext(int, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| wraptext2(int, float, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Objects=&lt;br /&gt;
{{:Creation/Dev/Script/Client}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=GUI Objects=&lt;br /&gt;
GUI Objects are currently well documented starting here [[Creation/Dev/Script/Client/GuiControl]].&lt;br /&gt;
&lt;br /&gt;
=Preference Variables=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::choosenvoicecodec&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivatebyvolume&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivationlevel&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microinputdevice&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microon&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microvolumefactor&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::midivolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::mp3volume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::radiovolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::reversestereo&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::sfxvolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::voicevolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::allowbyscript&lt;br /&gt;
| &lt;br /&gt;
| boolean [R]&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::area&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::audiobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::disabledaynight&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::format&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::fps&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::hideinterface&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::recordaudio&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::showmouse&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::size&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::videobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::allowglobalpms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::automapping&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontname&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontsize&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontconnectlevels&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontloadlistheads&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepasswords&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedport&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedudpport&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::language&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::limitnicknames&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::loadbuddylistfromserver&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nicknamelimit&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nomassmessages&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::notoalls&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::noudp&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::showyourselfonbuddylists&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::input::mousesensitivity&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::interior::lockarrays&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::defaultguistyle&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::detailfactor&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fogdistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fullscreenmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::resolution&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::screenshotformat&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::visibledistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::windowmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18789</id>
		<title>Creation/Dev/Script/Clientside Functions</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Clientside_Functions&amp;diff=18789"/>
		<updated>2011-09-20T01:13:57Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;50%&amp;quot;&lt;br /&gt;
|[R]&lt;br /&gt;
| denotes it is read-only.&lt;br /&gt;
|-&lt;br /&gt;
|[3D]&lt;br /&gt;
| denotes it is a Graal3D function.&lt;br /&gt;
|-&lt;br /&gt;
|[opengl]&lt;br /&gt;
| denotes it is functional only in opengl mode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| allfeatures&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allplayerscount&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the count of all players on your playerlist, including IRC bots.&lt;br /&gt;
|-&lt;br /&gt;
| allrenderobjecttypes&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allstats &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Used with showstats() in order to show all stats.&lt;br /&gt;
|-&lt;br /&gt;
| canspin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player has spin attack.&lt;br /&gt;
|-&lt;br /&gt;
| carriesblackstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a black stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesbush&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a bush.&lt;br /&gt;
|-&lt;br /&gt;
| carriesnpc&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying an NPC&lt;br /&gt;
|-&lt;br /&gt;
| carriessign&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a sign.&lt;br /&gt;
|-&lt;br /&gt;
| carriesstone&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesvase&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns whether the player is carrying a vase.&lt;br /&gt;
|-&lt;br /&gt;
| downloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Returns the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the position of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| downloadsize&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Returns the size of the currently downloaded file.&lt;br /&gt;
|-&lt;br /&gt;
| editingmission&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| emoticonchar&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| focusx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| focusy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Position of the camera in tile units.&lt;br /&gt;
|-&lt;br /&gt;
| ghostsnear&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If a ghost(observer) is in the same level as the player.&lt;br /&gt;
|-&lt;br /&gt;
| graalplugincookie&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| graalversion&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
| Version of Graal the player is using.&lt;br /&gt;
|-&lt;br /&gt;
| gravity&lt;br /&gt;
| ''float''&lt;br /&gt;
| The gravity value that effects how fast projectiles fall. It universally effects all projectiles.&lt;br /&gt;
|-&lt;br /&gt;
| installedlanguages&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isapplicationactive&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Is Graal window active?&lt;br /&gt;
|-&lt;br /&gt;
| iscarrying&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Returns true of false if the player is carrying something.&lt;br /&gt;
|-&lt;br /&gt;
| isfocused&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraal3d&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isleader&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player was the first to enter the level.&lt;br /&gt;
|-&lt;br /&gt;
| isonmap&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is on a map.&lt;br /&gt;
|-&lt;br /&gt;
| isopengl&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Graal is in opengl mode.&lt;br /&gt;
|-&lt;br /&gt;
| isrecordingvideo&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Player is currently recording(alt+6) Graal.&lt;br /&gt;
|-&lt;br /&gt;
| jpegquality&lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| isgraalplugin&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lastdownloadfile&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| The last file downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the left mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| levelorgx&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| levelorgy&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lighteffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| Whether the player has their lights enabled via options.&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebutton&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebuttonglobal&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the middle mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttons &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttonsglobal&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousepitch&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| mousescreenx &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousescreeny &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Position of the mouse in the Graal screen, in pixel units on the y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousewheeldelta&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| How much the mouse wheel has been scrolled.&lt;br /&gt;
|-&lt;br /&gt;
| mousex&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the x-axis.&lt;br /&gt;
|-&lt;br /&gt;
| mousey&lt;br /&gt;
| ''float''&lt;br /&gt;
| Position of the mouse in the level, in tile units, on the y-axis&lt;br /&gt;
|-&lt;br /&gt;
| mouseyaw&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| musiclen &lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Length of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| musicpos&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Position of current playing '''MP3'''&lt;br /&gt;
|-&lt;br /&gt;
| particleeffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If player has particles enabled in their options.&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebutton &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebuttonglobal &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the right mouse button is pressed. Returns whether mouse is in focus of GUIs or not.&lt;br /&gt;
|-&lt;br /&gt;
| screenheight&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Height of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| screenwidth&lt;br /&gt;
| ''integer [R]''&lt;br /&gt;
| Width of the Graal screen in pixel units.&lt;br /&gt;
|-&lt;br /&gt;
| scriptedcontrols &lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scriptedplayerlist&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| Whether the player has the scripted playerlist enabled.&lt;br /&gt;
|-&lt;br /&gt;
| scriptlogwritetoreadonly&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedlistplayers&lt;br /&gt;
| ''object''&lt;br /&gt;
| An object of all players selected on the playerlist.&lt;br /&gt;
|-&lt;br /&gt;
| selectedsword &lt;br /&gt;
| ''integer''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedweapon &lt;br /&gt;
| ''integer''&lt;br /&gt;
| Index of the currently selected weapon.&lt;br /&gt;
|-&lt;br /&gt;
| servername&lt;br /&gt;
| ''string [R]''&lt;br /&gt;
| Name of the server.&lt;br /&gt;
|-&lt;br /&gt;
| serverstartconnect &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| serverstartparams &lt;br /&gt;
| ''string''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| shotbybaddy&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a baddy(default) arrow.&lt;br /&gt;
|-&lt;br /&gt;
| shotbyplayer&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by another players arrow.&lt;br /&gt;
|-&lt;br /&gt;
| showterraingrid&lt;br /&gt;
| ''boolean''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| spritesimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set sprite image.&lt;br /&gt;
|-&lt;br /&gt;
| statusimage&lt;br /&gt;
| ''string''&lt;br /&gt;
| Filename of the currently set state image.&lt;br /&gt;
|-&lt;br /&gt;
| timevar&lt;br /&gt;
| ''integer [R].''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar2&lt;br /&gt;
| ''float [R]''&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar3&lt;br /&gt;
| ''float [R] [3D]''&lt;br /&gt;
| Synchronized time which works on both server and client-side, precision is milliseconds.&lt;br /&gt;
|-&lt;br /&gt;
| wasshooted&lt;br /&gt;
| ''boolean [R]''&lt;br /&gt;
| If the player is shot by a default arrow.&lt;br /&gt;
|-&lt;br /&gt;
| waterheight&lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| weapons&lt;br /&gt;
| ''object [R]''&lt;br /&gt;
| all the players weapons, this includes login inherited weapons.&lt;br /&gt;
|-&lt;br /&gt;
| weaponsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If the players weapons are enabled via disableweapons()/enableweapons().&lt;br /&gt;
|-&lt;br /&gt;
| weathereffectsenabled&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| If weather is enabled in the players options.&lt;br /&gt;
|-&lt;br /&gt;
| worldclockstopped&lt;br /&gt;
| ''boolean''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldhour &lt;br /&gt;
| ''integer''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminute &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldminutesofday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| worldrealsecondsperday &lt;br /&gt;
| ''float''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Functions=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Function'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| addcontrol(object)&lt;br /&gt;
|&lt;br /&gt;
| adds 'object' to the parent control.&lt;br /&gt;
|-&lt;br /&gt;
| addmaterialmapping(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef(string image, string prefix, int format)&lt;br /&gt;
| &lt;br /&gt;
| Adds a tileset definition with the supplied tileset image, level prefix and tileset format (0=pics1, 1=new world, 5=terrain).&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef2(string image, string prefix, int x, int y)&lt;br /&gt;
| &lt;br /&gt;
| Overlays an image on the tileset with the supplied tileset image and level prefix. Parameters 'x' and 'y' represent the x and y position on the tileset of where to place the new image.&lt;br /&gt;
|-&lt;br /&gt;
| aindexof(float, array)&lt;br /&gt;
| &lt;br /&gt;
| Returns integer - the position of 'float' in the array.&lt;br /&gt;
|-&lt;br /&gt;
| arccos(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc cosine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| arcsin(float)&lt;br /&gt;
| &lt;br /&gt;
| Returns float - the arc sine of 'float'.&lt;br /&gt;
|-&lt;br /&gt;
| attachplayertoobj(integer1, integer2)&lt;br /&gt;
| &lt;br /&gt;
| Attaches the player to the object with the matching ID where integer1 is the object type (currently only NPCs - 0) and integer2 is the ID of the desired object.&lt;br /&gt;
|-&lt;br /&gt;
| base64decode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Decodes a base64 string.&lt;br /&gt;
|-&lt;br /&gt;
| base64encode(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns string - Encodes string in to several characters of a 64 printable character set (A-Z, a-z, 0-9, + and /, while &amp;quot;=&amp;quot; is a special suffix code)&lt;br /&gt;
|-&lt;br /&gt;
| boxcontains(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean.&lt;br /&gt;
|-&lt;br /&gt;
| boxcontainsvector(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxintersect(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| boxoverlaps(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| boxscale(string, string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| callnpc(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from an NPC where 'index' is the NPC's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| callweapon(int index, string function)&lt;br /&gt;
| &lt;br /&gt;
| Calls a function from a weapon where 'index' is the weapon's index and 'function' is the function name.&lt;br /&gt;
|-&lt;br /&gt;
| castray({x,y,x}, {x,y,z}, string type)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object - specify the start and end of the ray, and the object types (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| checksum(string)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| contains(string2, string1)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - True if string1 is contained within string2.&lt;br /&gt;
|-&lt;br /&gt;
| copystrings(string, string)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| cursoroff()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Disables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| cursoron()&lt;br /&gt;
| [opengl]&lt;br /&gt;
| Enables the visible mouse cursor.&lt;br /&gt;
|-&lt;br /&gt;
| degtorad(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float - Converts angle measurements of degrees to radians&lt;br /&gt;
|-&lt;br /&gt;
| detachplayer()&lt;br /&gt;
| &lt;br /&gt;
| Detaches a player from an attached object.&lt;br /&gt;
|-&lt;br /&gt;
| disabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default movement system and controls(including weapons, sword, grab. Does not include Q-menu, pause, map...).&lt;br /&gt;
|-&lt;br /&gt;
| disablemap()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default map (M).&lt;br /&gt;
|-&lt;br /&gt;
| disablepause()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default pause (P).&lt;br /&gt;
|-&lt;br /&gt;
| disableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default Q-menu (Q).&lt;br /&gt;
|-&lt;br /&gt;
| disableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Disables the default sword (S) and weapons (D).&lt;br /&gt;
|-&lt;br /&gt;
| echo(string)&lt;br /&gt;
| &lt;br /&gt;
| echos 'string' to the debug window(F2).&lt;br /&gt;
|-&lt;br /&gt;
| enabledefmovement()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default movement system.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Script/Functions/enablefeatures(int)|enablefeatures(int)]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| enablemap()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default map system(M).&lt;br /&gt;
|-&lt;br /&gt;
| enablepause()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default pause system(P).&lt;br /&gt;
|-&lt;br /&gt;
| enableselectweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default Q-menu(Q).&lt;br /&gt;
|-&lt;br /&gt;
| enableweapons()&lt;br /&gt;
| &lt;br /&gt;
| Enables the default sword(S) and weapons(D).&lt;br /&gt;
|-&lt;br /&gt;
| escapestring(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string - adds \\ in front of &amp;quot;, ' and \\, and removes non-printable characters&lt;br /&gt;
|-&lt;br /&gt;
| explodebomb(integer)&lt;br /&gt;
| &lt;br /&gt;
| explodes the bomb with the id of 'integer'.&lt;br /&gt;
|-&lt;br /&gt;
| extractfilebase(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| extractfileext(string)&lt;br /&gt;
| &lt;br /&gt;
| Takes in a file name, and returns its extension. &lt;br /&gt;
|-&lt;br /&gt;
| extractfilepath(string)&lt;br /&gt;
| &lt;br /&gt;
| returns string &lt;br /&gt;
|-&lt;br /&gt;
| fileexists(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean of whether the file 'str' exists in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| filesize(string)&lt;br /&gt;
| &lt;br /&gt;
| Returns the size(int) of the file 'string' in the players Graal/ directory(does not search subfolders).&lt;br /&gt;
|-&lt;br /&gt;
| fileupdate(string)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| findani(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findfiles(string, integer)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findlevel(string)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayer(float1, float2)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest player's object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnearestplayers(float, float)&lt;br /&gt;
| &lt;br /&gt;
| Returns the closest players' object relevant to float1 and float2.&lt;br /&gt;
|-&lt;br /&gt;
| findnpcbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the NPC object with the ID of 'int'.&lt;br /&gt;
|-&lt;br /&gt;
| findpathinarray(obj1, obj2, obj3, obj4, obj5, int, int, int)&lt;br /&gt;
|&lt;br /&gt;
| Returns object - Simple path-finding: Obj1 being tiles that allow walking, Obj2 being tiles that don't allow walking, Obj3; tiles that shouldn't be allowed to walked on, Obj4; tiles that are able to be walked on, Obj5; tiles where we may stop. Integers are relevant to the startx, starty and maximum path length. - Arrays for allowed/non-allowed tiles are only checked if they aren't null.&lt;br /&gt;
|-&lt;br /&gt;
| findplayer(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the account equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbycommunityname(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the community name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbyid(integer)&lt;br /&gt;
|&lt;br /&gt;
| Returns the player object with the ID equal to integer.&lt;br /&gt;
|-&lt;br /&gt;
| findweapon(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the weapon object with the name equal to string.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creation/Dev/Output_Methods#format.28.29_function|format(string, string, ...)]]&lt;br /&gt;
|&lt;br /&gt;
| See [[Creation/Dev/Output_Methods#format.28.29_function|format()]]. &lt;br /&gt;
|- &lt;br /&gt;
| [[Creation/Dev/Output_Methods#format2.28.29_function|format2(string, array)]]&lt;br /&gt;
| &lt;br /&gt;
| Like format(), except that this expects the format string and an array of variables instead of passing the variables as separate parameters.&lt;br /&gt;
|-&lt;br /&gt;
| freefileresources(string)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| freezeplayer(float)&lt;br /&gt;
|&lt;br /&gt;
| Freezes the player for the number of seconds specified by float.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectat(float, float, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the specified screen position, third parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectatmouse(boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| Gets the 3d object at the mouse.  Parameter true if it should do box collision.&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectbyray(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| get3dobjectsbybox(string, string)&lt;br /&gt;
| [3D]&lt;br /&gt;
| 1st parameter defines the box {minx,miny,minz, maxx,maxy,maxz}.  Second parameter specifies the type of object to find (e.g. &amp;quot;staticts,terrain,interior&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| get3dscreenposition(string, boolean)&lt;br /&gt;
| [3D]&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getanglesfromvector({x, y, z})&lt;br /&gt;
|&lt;br /&gt;
| Returns an array that contains the angles the 3D vector {x, y, z} makes with the X-Y and X-Z axes.&lt;br /&gt;
|-&lt;br /&gt;
| getascii(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the [http://www.asciitable.com/ ascii] code for string.&lt;br /&gt;
|-&lt;br /&gt;
| getbasepackage()&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getboxcenter(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array containing the center of a 3D box specified by string ({x0,y0,z0,x1,y1,z1,...}).&lt;br /&gt;
|-&lt;br /&gt;
| getdesktopresolution()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdisplaydevicelist()&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadedupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| Returns the size of the downloaded update package.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackage()&lt;br /&gt;
|&lt;br /&gt;
| Returns a reference to current update package being downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getdownloadingpackagescount()&lt;br /&gt;
|&lt;br /&gt;
| Returns a count of the number of update packages to download.&lt;br /&gt;
|-&lt;br /&gt;
| getdropz(string)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| getExtension(string)&lt;br /&gt;
|&lt;br /&gt;
| This function is the same as extractFileExt().  Takes in a file name, and returns its extension.&lt;br /&gt;
|-&lt;br /&gt;
| getfilemodtime(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns a timestamp of when the file was last modified (in unix time compatible to timevar2). This function accepts both exact file path and plain file name.&lt;br /&gt;
|-&lt;br /&gt;
| gethttprequest(string, integer, string)&lt;br /&gt;
| &lt;br /&gt;
| returns object (This function is the same as requestHttp())&lt;br /&gt;
|-&lt;br /&gt;
| getimgheight(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the height (in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getimgpixel(string, integer, integer)&lt;br /&gt;
|&lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| getimgwidth(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the width(in pixels) of the filename indicated by string.&lt;br /&gt;
|-&lt;br /&gt;
| getkeycode(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns the keycode of the key indicated by string.  The keycode returned can be used in keydown2().&lt;br /&gt;
|-&lt;br /&gt;
| getloginaccountname()&lt;br /&gt;
|&lt;br /&gt;
| Presumably used for the login server.  Use player.account instead.&lt;br /&gt;
|-&lt;br /&gt;
| getmapx(string)&lt;br /&gt;
| &lt;br /&gt;
| Gets the x coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmapy(string)&lt;br /&gt;
|&lt;br /&gt;
| Gets the y coordinate location in the gmap of the level indicated by string.  The top-left level starts at (0, 0).&lt;br /&gt;
|-&lt;br /&gt;
| getmusicfilename()&lt;br /&gt;
|&lt;br /&gt;
| Returns the filename of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusicstatus()&lt;br /&gt;
|&lt;br /&gt;
| Returns the status of the music currently playing.&lt;br /&gt;
|-&lt;br /&gt;
| getmusictags()&lt;br /&gt;
|&lt;br /&gt;
| Returns the tags of the music currently playing.  This function can be used to retrieve the title and artist info of the music.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayer(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayer() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getnearestplayers(float, float)&lt;br /&gt;
|&lt;br /&gt;
| Deprecated.  Use findnearestplayers() instead.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloadcomplete()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the package downloads are complete.&lt;br /&gt;
|-&lt;br /&gt;
| getpackagesdownloaded()&lt;br /&gt;
|&lt;br /&gt;
| Returns 'true' if the most recent packages are already downloaded.&lt;br /&gt;
|-&lt;br /&gt;
| getplatform()&lt;br /&gt;
|&lt;br /&gt;
| Returns the platform that the player is using.  (i.e. windows, mac, or linux)&lt;br /&gt;
|-&lt;br /&gt;
| getresolutionlist(string)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getservername()&lt;br /&gt;
|&lt;br /&gt;
| Returns the name of the server the player is currently connected to.&lt;br /&gt;
|-&lt;br /&gt;
| getstringkeys(string)&lt;br /&gt;
|&lt;br /&gt;
| Returns an array of the variables that begins with the supplied string.&lt;br /&gt;
|-&lt;br /&gt;
| getterraintexture(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| getterraintextureindex(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| gettextheight(float zoom, string style, string font)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The height in pixels of the text with the given zoom, style and font.&lt;br /&gt;
|-&lt;br /&gt;
| gettextwidth(float zoom, string style, string font, string text)&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The width of the text with the given zoom, style, font and text.&lt;br /&gt;
|-&lt;br /&gt;
| gettileset()&lt;br /&gt;
|&lt;br /&gt;
| returns string - the current main tileset (pics1.png, picso.png etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettilesettype()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - the current tileset type (pics1.png:0, picso.png:5 etc.)&lt;br /&gt;
|-&lt;br /&gt;
| gettotalupdatepackagesize()&lt;br /&gt;
|&lt;br /&gt;
| returns integer - The total size of the update packages.&lt;br /&gt;
|-&lt;br /&gt;
| getupdatepackage(string name)&lt;br /&gt;
|&lt;br /&gt;
| returns object - A reference to the update package with the given name.&lt;br /&gt;
|-&lt;br /&gt;
| getvectorfromangles(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns string&lt;br /&gt;
|- &lt;br /&gt;
| getz(float, float)&lt;br /&gt;
|&lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| graalcontrolhasfocus(bool)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - Whether or not the graal control has focus.  Parameter says if it should also check if the chat bar has the focus&lt;br /&gt;
|-&lt;br /&gt;
| hideplayer(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides player for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hidesword(float time)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player's sword for the specified amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| hitnpc(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's npc with specified index causing the specified amount of halfhearts in damage. It also knocks back the npc based on the from X and Y coordinate passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitobjects(float power, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
| Hurts all the npcs with the specified power on the position passed to it.&lt;br /&gt;
|-&lt;br /&gt;
| hitplayer(int index, float halfhearts, float fromx, float fromy)&lt;br /&gt;
|&lt;br /&gt;
| Hit's player with specified index causing the specified amount of halfhearts in damage. It also knocks back the player based on the from X and Y coordinate passed to it. Use 0 as the index to hit your own player.&lt;br /&gt;
|-&lt;br /&gt;
| isadminguild(str guildname)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean - If the passed guildname is an admin guild or not.&lt;br /&gt;
|-&lt;br /&gt;
| isclassloaded(str classname)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the passed classname is loaded for the client.&lt;br /&gt;
|-&lt;br /&gt;
| iscursoron()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the cursor is on or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdevicefullscreenonly(str device)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If the device is full screen only or not.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloading(str filename)&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - If a file is currently downloaded or requested from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isdownloadingfiles()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently downloading or requesting files from the server.&lt;br /&gt;
|-&lt;br /&gt;
| isfullscreenmode()&lt;br /&gt;
|&lt;br /&gt;
| returns boolean - checks if Graal is currently in fullscreen mode.&lt;br /&gt;
|-&lt;br /&gt;
| isimgrectangletransparent(str, int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| ismusicplaying()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| isobject(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| issoundplaying(str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydown2global(int, bool)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keydownglobal(int)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| keyname(int)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| lay2(str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lightscene()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| loadclass(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadmap(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| loadtranslation(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lowercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| ltmfs(bool)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmax(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ltmmin(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| makescreenshot2(str, int, float, float, float, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| matrixcreate(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixcreatefromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulpoint(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmultiply(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| matrixmulvector(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| md5(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| noplayerkilling()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| onwall(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwall2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| onwater2(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| opengraalurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| openurl2(str, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| play3d(str, bool, str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| playlooped2(str, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| popdialog()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| pushdialog(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| putleaps(int, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| radtodeg(float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| randomstring(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| removetiledefs(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| replaceani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfiledeletion(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilerename(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requestfilesmove(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesthttp(str, int, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| requesttext(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| requesturl(str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| resetfocus()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| rotationadd(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationaddeuler(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationfromeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationsub(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rotationtoeuler(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| rungarbagecollector()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| savelog(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| say2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| screenx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| screeny(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| selectfilefordownload(str)&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| selectfileforupload()&lt;br /&gt;
| &lt;br /&gt;
| opens the select&lt;br /&gt;
|-&lt;br /&gt;
| sendrpgmessage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtext(str, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sendtorc(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| serverwarp(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setani(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setbeltcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcoatcolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcontentcontrol(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setcursor2(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| seteffect(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfocus(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setfogcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setgender(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| sethead(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setinteriorrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setletters(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setmap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| sets a text map (you can see the tiles of other levels but not the npcs), parameters are text file with level names, the map image (not used anymore), default x and y for the head icons; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setminimap(str, str, float, float)&lt;br /&gt;
| &lt;br /&gt;
| parameters are a text file with level names, the image, default x and y; use gmaps if possible instead of this&lt;br /&gt;
|-&lt;br /&gt;
| setmusicvolume(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setplayerdir(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshield(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshoecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setshootparams(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskincolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandcolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setskybandsizes(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsleevecolor(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setspritesimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setstatusimage(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsuncolors(obj)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setsword(str, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| setterrainrendermode(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| showstats(int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| spyfire(int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| startrecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopmidi()&lt;br /&gt;
| &lt;br /&gt;
| same as stopmusic(), kept for compatibility&lt;br /&gt;
|-&lt;br /&gt;
| stopmusic()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| stoprecordvideo()&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| stopsound(str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| strcmp(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| strequals(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns boolean&lt;br /&gt;
|-&lt;br /&gt;
| switchtoopengl()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| synctimeofday(float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayercarry()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| takeplayerhorse()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| testplayer(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns integer&lt;br /&gt;
|-&lt;br /&gt;
| trace(str)&lt;br /&gt;
| &lt;br /&gt;
| same as echo()&lt;br /&gt;
|-&lt;br /&gt;
| triggeraction(float, float, str, params...)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| triggerserver(str, str)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| update3dterrain(float, float, float, float)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateboard(int, int, int, int)&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updateterrain()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| updatevisibledistance()&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| uploadfile(str)&lt;br /&gt;
| &lt;br /&gt;
| uploads a file, you must provide the full path provided by a onDropFiles() event, also this will only work if the scripted RC has currently a file browser window open; once the file is uploaded an onFilesUploaded event will be invoked&lt;br /&gt;
|-&lt;br /&gt;
| uppercase(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectoradd(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectorcross(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectordist(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| vectordot(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| vectorlen(str)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| vectornormalize(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectororthobasis(str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectorscale(str, float)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| vectorsub(str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns string&lt;br /&gt;
|-&lt;br /&gt;
| worldx(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| worldy(float, float)&lt;br /&gt;
| &lt;br /&gt;
| returns float&lt;br /&gt;
|-&lt;br /&gt;
| wraptext(int, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|-&lt;br /&gt;
| wraptext2(int, float, str, str)&lt;br /&gt;
| &lt;br /&gt;
| returns object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Objects=&lt;br /&gt;
{{:Creation/Dev/Script/Client}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=GUI Objects=&lt;br /&gt;
GUI Objects are currently well documented starting here [[Creation/Dev/Script/Client/GuiControl]].&lt;br /&gt;
&lt;br /&gt;
=Preference Variables=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Variable'''&lt;br /&gt;
|width=&amp;quot;100px&amp;quot;|'''Type'''&lt;br /&gt;
| '''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::choosenvoicecodec&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivatebyvolume&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivationlevel&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microinputdevice&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microon&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microvolumefactor&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::midivolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::mp3volume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::radiovolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::reversestereo&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::sfxvolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::voicevolume&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::allowbyscript&lt;br /&gt;
| &lt;br /&gt;
| boolean [R]&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::area&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::audiobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::disabledaynight&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::format&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::fps&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::hideinterface&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::recordaudio&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::showmouse&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::size&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::capture::videobitrate&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::allowglobalpms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::automapping&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontname&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontsize&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontconnectlevels&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontloadlistheads&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepasswords&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepms&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedport&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedudpport&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::language&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::limitnicknames&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::loadbuddylistfromserver&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nicknamelimit&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nomassmessages&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::notoalls&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::noudp&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::showyourselfonbuddylists&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::input::mousesensitivity&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::interior::lockarrays&lt;br /&gt;
| &lt;br /&gt;
| boolean&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::defaultguistyle&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::detailfactor&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fogdistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fullscreenmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::resolution&lt;br /&gt;
| &lt;br /&gt;
| integer&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::screenshotformat&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::visibledistance&lt;br /&gt;
| &lt;br /&gt;
| float&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::windowmode&lt;br /&gt;
| &lt;br /&gt;
| string&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Output_Methods&amp;diff=18788</id>
		<title>Creation/Dev/Output Methods</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Output_Methods&amp;diff=18788"/>
		<updated>2011-09-20T01:10:57Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* format2 function */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
== Introduction ==&lt;br /&gt;
With the addition of the [[GScript|new scripting engine]], there are a number of new methods in which you can create output from an NPC. In this article, I will discuss a couple of ways.&lt;br /&gt;
&lt;br /&gt;
== Useful Things To Know ==&lt;br /&gt;
If you've played with the new engine for a while, you're probably aware of the string concationation operators. If not, here they are.&lt;br /&gt;
&amp;lt;pre&amp;gt;String Concatenation     a @ b&lt;br /&gt;
    with space            a SPC b&lt;br /&gt;
    with newline          a NL b&lt;br /&gt;
    with tabulator        a TAB b&amp;lt;/pre&amp;gt;&lt;br /&gt;
What these operators do is join values together to form one value.&lt;br /&gt;
&lt;br /&gt;
An example of using @ would be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello, &amp;quot; @ player.account&amp;lt;/pre&amp;gt;&lt;br /&gt;
... which would produce &amp;quot;Hello, accountnamehere&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The SPC, NL and TAB operators work using the same principal - except that they insert a Space, New Line or Tab Space respectively.&lt;br /&gt;
&lt;br /&gt;
If you don't put a space at the end of the first value or at the beginning of the second value when using @, you don't get a visible space, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello&amp;quot; @ &amp;quot;World&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... will produce &amp;quot;HelloWorld&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
However! If you use SPC, you'll get a space in place of the operator:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello&amp;quot; SPC &amp;quot;World&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... producing &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can use these operators just about anywhere that a variable is requested, i.e. setting a variable, or sending to a function.&lt;br /&gt;
&lt;br /&gt;
== format() function ==&lt;br /&gt;
Or, if you aren't so interested in using the concationation operators, you can use the ''format()'' function.&lt;br /&gt;
&lt;br /&gt;
What this function does, is that it takes a sort of template from the first parameter you give it, and replaces % codes with other parameters you give it.&lt;br /&gt;
&lt;br /&gt;
Now, the template format primarily uses the following % characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;%d %i - Integer&lt;br /&gt;
%f - Float (number with decimal)&lt;br /&gt;
%s - String&lt;br /&gt;
%c - Single character&lt;br /&gt;
%% - Literal &amp;quot;%&amp;quot; character&lt;br /&gt;
%x %X - Print an integer as a hexadecimal&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are more, since the function is made to be compatible with C's ''printf()'' function.&lt;br /&gt;
&lt;br /&gt;
In the template, every % code will be replaced with the respective parameter.&lt;br /&gt;
&lt;br /&gt;
Say you want to produce &amp;quot;Hello, '''Mr. Skyld'''. You ate '''4''' apples today!&amp;quot; using format(). First, your format would be this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello, %s. You ate %i apples today!&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... and you must not forget to give the parameters containing the values:&lt;br /&gt;
&amp;lt;pre&amp;gt;format(&amp;quot;Hello, %s. You ate %i apples today!&amp;quot;, &amp;quot;Mr. Skyld&amp;quot;, 4);&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can give the format() functions as many parameters as necessary to build up your value. If you use a % code and a value isn't present for it, a 0 (zero) will appear in it's place.&lt;br /&gt;
&lt;br /&gt;
== format2() function==&lt;br /&gt;
You can also use ''format2()'', which acts just like format() with the exception that instead of passing variables as separate parameters, they are sent as an array to the 2nd parameter.&lt;br /&gt;
The example above would become&lt;br /&gt;
&amp;lt;pre&amp;gt;format2(&amp;quot;Hello, %s. You ate %i apples today!&amp;quot;, {&amp;quot;Mr. Skyld&amp;quot;, 4});&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Along with format2() came the indexing of the parameters. This method will work with both format() and format2() functions. It allows us to choose which parameter to place in which position in the format string. The problem of parameters being placed in the wrong order will not exist if each parameter has a different data type, however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;format2(&amp;quot;Hello, %2$s. You ate %1$s apples today!&amp;quot;, {&amp;quot;four&amp;quot;,&amp;quot;Mr. Skyld&amp;quot;});&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the example, both parameters are strings, so it would be necessary to give them an index when trying to insert them in a different order than they were passed. ''%1$s'' refers to the 1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; object in the array inserted as a string. ''%n$T'' is general; the n&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; parameter inserted with datatype of ''T''.&lt;br /&gt;
&lt;br /&gt;
Now, let's continue on various ways of outputting data.&lt;br /&gt;
&lt;br /&gt;
== Outputs ==&lt;br /&gt;
=== Direct Output ===&lt;br /&gt;
Direct Output is sending an output directly to the game client, or to RC/NC. There are a number of functions for these tasks.&lt;br /&gt;
&lt;br /&gt;
==== echo() ====&lt;br /&gt;
The echo() function will, on the serverside, send data to NC (by default), so RC users who have the NPC-Control right will see the message in RC chat, and on the clientside, sends the message to the F2 window. It expects one parameter, and that's the message you're sending. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo(&amp;quot;This is a message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
The message &amp;quot;This is a message!&amp;quot; will appear either in RC or the F2 window using this example.&lt;br /&gt;
&lt;br /&gt;
Servers can change the [[Server_options#Send_NPC_output_to_RCs|sendechotorc]] server option to allow echo() messages to be sent to everyone on RC.&lt;br /&gt;
&lt;br /&gt;
==== sendtorc() ====&lt;br /&gt;
The sendtorc() function works in the same way that the echo() function does, however, it only usually works on the serverside. It will appear to all RC users. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendtorc(&amp;quot;This is a message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... will send &amp;quot;NPC-Server (Server): This is a message!&amp;quot; to RC.&lt;br /&gt;
&lt;br /&gt;
'''Note''' that this function can only be used on the clientside when Client-RC is active.&lt;br /&gt;
&lt;br /&gt;
==== sendtonc() ====&lt;br /&gt;
The sendtonc() function works in exactly the same way as echo() does serverside, except the message will display '''only''' to NC users.&lt;br /&gt;
&lt;br /&gt;
==== sendrpgmessage() ====&lt;br /&gt;
The sendrpgmessage() will send a message appearing in the player's F2 log window and can be used on both client- and server-side. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendrpgmessage(&amp;quot;This is a message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... will send &amp;quot;This is a message!&amp;quot; to the player's F2 window.&lt;br /&gt;
&lt;br /&gt;
=== Working with Files ===&lt;br /&gt;
==== loadstring() ====&lt;br /&gt;
loadstring() is an object function which loads the contents of a given file.&lt;br /&gt;
&lt;br /&gt;
Say that the file &amp;quot;levels/file.txt&amp;quot; contains the message &amp;quot;HELLO WORLD&amp;quot;. If you want to load that value into a variable called &amp;quot;myVar&amp;quot;, you should use this function:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVar.loadstring(&amp;quot;levels/file.txt&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can easily check the contents of the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo(myVar);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Use myVar.escape() if you want to print a string that might contain special characters like new-line which would not appear on RC-chat.&lt;br /&gt;
&lt;br /&gt;
==== savestring() ====&lt;br /&gt;
savestring() is another object function, however, instead of loading the contents of a file, it writes the contents instead.&lt;br /&gt;
&lt;br /&gt;
Consider this with the previous example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVar = &amp;quot;HELLO PLANET&amp;quot;;&lt;br /&gt;
myVar.savestring(&amp;quot;levels/file.txt&amp;quot;, 0);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... would write &amp;quot;HELLO PLANET&amp;quot; to &amp;quot;levels/file.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The second operator, which is 0 (zero) in that example, is the '''Append''' function, and decides whether the file should be overwritten with the new value, or whether the new value should be added onto the end of the file. If you specify '''1''', then the value will be appended, if not, it will overwrite the file.&lt;br /&gt;
&lt;br /&gt;
==== savevars() ====&lt;br /&gt;
savevars() is an object function which saves the variables of an object into a file. Consider this example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVar = new TStaticVar(); // Create a TStaticVar&lt;br /&gt;
myVar.variable = &amp;quot;Hello&amp;quot;;&lt;br /&gt;
myVar.secondvariable = &amp;quot;World&amp;quot;;&lt;br /&gt;
myVar.saveVars(&amp;quot;levels/test.txt&amp;quot;, 0);&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will save the variables inside the &amp;quot;myVar&amp;quot; object into &amp;quot;levels/test.txt&amp;quot;. You can then recall these variables using loadvars();&lt;br /&gt;
&lt;br /&gt;
Like savelines(), the second parameter controls whether the variables are to be appended to the file. '''0''' will overwrite the file, and '''1''' will append to the file.&lt;br /&gt;
&lt;br /&gt;
==== loadvars() ====&lt;br /&gt;
loadvars() is another object function which loads savevars()-style variables from a file into an object. Let's say you used the previous example from savevars(), then you could restore these values using the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;myNewVar.loadvars(&amp;quot;levels/test.txt&amp;quot;);&lt;br /&gt;
echo(myNewVar.secondvariable);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... which will output &amp;quot;World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Private Messages (PMs) ===&lt;br /&gt;
From the serverside, you can send PMs to players. They appear from the NPC-Server.&lt;br /&gt;
&lt;br /&gt;
If you wanted to send a PM to the player &amp;quot;Skyld&amp;quot; (if the player is online), the you would use the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;findPlayer(&amp;quot;Skyld&amp;quot;).sendPM(&amp;quot;This is a PM&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... and then the specified player, in this case Skyld, would receive the PM &amp;quot;This is a PM&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If you want to send a PM to the current player, you would simply use:&lt;br /&gt;
&amp;lt;pre&amp;gt;player.sendPM(&amp;quot;This is a PM&amp;quot;);&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Output_Methods&amp;diff=18787</id>
		<title>Creation/Dev/Output Methods</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Output_Methods&amp;diff=18787"/>
		<updated>2011-09-20T01:10:36Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* format2() function */ separate from format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
== Introduction ==&lt;br /&gt;
With the addition of the [[GScript|new scripting engine]], there are a number of new methods in which you can create output from an NPC. In this article, I will discuss a couple of ways.&lt;br /&gt;
&lt;br /&gt;
== Useful Things To Know ==&lt;br /&gt;
If you've played with the new engine for a while, you're probably aware of the string concationation operators. If not, here they are.&lt;br /&gt;
&amp;lt;pre&amp;gt;String Concatenation     a @ b&lt;br /&gt;
    with space            a SPC b&lt;br /&gt;
    with newline          a NL b&lt;br /&gt;
    with tabulator        a TAB b&amp;lt;/pre&amp;gt;&lt;br /&gt;
What these operators do is join values together to form one value.&lt;br /&gt;
&lt;br /&gt;
An example of using @ would be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello, &amp;quot; @ player.account&amp;lt;/pre&amp;gt;&lt;br /&gt;
... which would produce &amp;quot;Hello, accountnamehere&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The SPC, NL and TAB operators work using the same principal - except that they insert a Space, New Line or Tab Space respectively.&lt;br /&gt;
&lt;br /&gt;
If you don't put a space at the end of the first value or at the beginning of the second value when using @, you don't get a visible space, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello&amp;quot; @ &amp;quot;World&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... will produce &amp;quot;HelloWorld&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
However! If you use SPC, you'll get a space in place of the operator:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello&amp;quot; SPC &amp;quot;World&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... producing &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can use these operators just about anywhere that a variable is requested, i.e. setting a variable, or sending to a function.&lt;br /&gt;
&lt;br /&gt;
== format() function ==&lt;br /&gt;
Or, if you aren't so interested in using the concationation operators, you can use the ''format()'' function.&lt;br /&gt;
&lt;br /&gt;
What this function does, is that it takes a sort of template from the first parameter you give it, and replaces % codes with other parameters you give it.&lt;br /&gt;
&lt;br /&gt;
Now, the template format primarily uses the following % characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;%d %i - Integer&lt;br /&gt;
%f - Float (number with decimal)&lt;br /&gt;
%s - String&lt;br /&gt;
%c - Single character&lt;br /&gt;
%% - Literal &amp;quot;%&amp;quot; character&lt;br /&gt;
%x %X - Print an integer as a hexadecimal&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are more, since the function is made to be compatible with C's ''printf()'' function.&lt;br /&gt;
&lt;br /&gt;
In the template, every % code will be replaced with the respective parameter.&lt;br /&gt;
&lt;br /&gt;
Say you want to produce &amp;quot;Hello, '''Mr. Skyld'''. You ate '''4''' apples today!&amp;quot; using format(). First, your format would be this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello, %s. You ate %i apples today!&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... and you must not forget to give the parameters containing the values:&lt;br /&gt;
&amp;lt;pre&amp;gt;format(&amp;quot;Hello, %s. You ate %i apples today!&amp;quot;, &amp;quot;Mr. Skyld&amp;quot;, 4);&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can give the format() functions as many parameters as necessary to build up your value. If you use a % code and a value isn't present for it, a 0 (zero) will appear in it's place.&lt;br /&gt;
&lt;br /&gt;
== format2 function==&lt;br /&gt;
You can also use ''format2()'', which acts just like format() with the exception that instead of passing variables as separate parameters, they are sent as an array to the 2nd parameter.&lt;br /&gt;
The example above would become&lt;br /&gt;
&amp;lt;pre&amp;gt;format2(&amp;quot;Hello, %s. You ate %i apples today!&amp;quot;, {&amp;quot;Mr. Skyld&amp;quot;, 4});&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Along with format2() came the indexing of the parameters. This method will work with both format() and format2() functions. It allows us to choose which parameter to place in which position in the format string. The problem of parameters being placed in the wrong order will not exist if each parameter has a different data type, however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;format2(&amp;quot;Hello, %2$s. You ate %1$s apples today!&amp;quot;, {&amp;quot;four&amp;quot;,&amp;quot;Mr. Skyld&amp;quot;});&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the example, both parameters are strings, so it would be necessary to give them an index when trying to insert them in a different order than they were passed. ''%1$s'' refers to the 1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; object in the array inserted as a string. ''%n$T'' is general; the n&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; parameter inserted with datatype of ''T''.&lt;br /&gt;
&lt;br /&gt;
Now, let's continue on various ways of outputting data.&lt;br /&gt;
&lt;br /&gt;
== Outputs ==&lt;br /&gt;
=== Direct Output ===&lt;br /&gt;
Direct Output is sending an output directly to the game client, or to RC/NC. There are a number of functions for these tasks.&lt;br /&gt;
&lt;br /&gt;
==== echo() ====&lt;br /&gt;
The echo() function will, on the serverside, send data to NC (by default), so RC users who have the NPC-Control right will see the message in RC chat, and on the clientside, sends the message to the F2 window. It expects one parameter, and that's the message you're sending. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo(&amp;quot;This is a message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
The message &amp;quot;This is a message!&amp;quot; will appear either in RC or the F2 window using this example.&lt;br /&gt;
&lt;br /&gt;
Servers can change the [[Server_options#Send_NPC_output_to_RCs|sendechotorc]] server option to allow echo() messages to be sent to everyone on RC.&lt;br /&gt;
&lt;br /&gt;
==== sendtorc() ====&lt;br /&gt;
The sendtorc() function works in the same way that the echo() function does, however, it only usually works on the serverside. It will appear to all RC users. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendtorc(&amp;quot;This is a message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... will send &amp;quot;NPC-Server (Server): This is a message!&amp;quot; to RC.&lt;br /&gt;
&lt;br /&gt;
'''Note''' that this function can only be used on the clientside when Client-RC is active.&lt;br /&gt;
&lt;br /&gt;
==== sendtonc() ====&lt;br /&gt;
The sendtonc() function works in exactly the same way as echo() does serverside, except the message will display '''only''' to NC users.&lt;br /&gt;
&lt;br /&gt;
==== sendrpgmessage() ====&lt;br /&gt;
The sendrpgmessage() will send a message appearing in the player's F2 log window and can be used on both client- and server-side. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendrpgmessage(&amp;quot;This is a message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... will send &amp;quot;This is a message!&amp;quot; to the player's F2 window.&lt;br /&gt;
&lt;br /&gt;
=== Working with Files ===&lt;br /&gt;
==== loadstring() ====&lt;br /&gt;
loadstring() is an object function which loads the contents of a given file.&lt;br /&gt;
&lt;br /&gt;
Say that the file &amp;quot;levels/file.txt&amp;quot; contains the message &amp;quot;HELLO WORLD&amp;quot;. If you want to load that value into a variable called &amp;quot;myVar&amp;quot;, you should use this function:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVar.loadstring(&amp;quot;levels/file.txt&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can easily check the contents of the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo(myVar);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Use myVar.escape() if you want to print a string that might contain special characters like new-line which would not appear on RC-chat.&lt;br /&gt;
&lt;br /&gt;
==== savestring() ====&lt;br /&gt;
savestring() is another object function, however, instead of loading the contents of a file, it writes the contents instead.&lt;br /&gt;
&lt;br /&gt;
Consider this with the previous example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVar = &amp;quot;HELLO PLANET&amp;quot;;&lt;br /&gt;
myVar.savestring(&amp;quot;levels/file.txt&amp;quot;, 0);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... would write &amp;quot;HELLO PLANET&amp;quot; to &amp;quot;levels/file.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The second operator, which is 0 (zero) in that example, is the '''Append''' function, and decides whether the file should be overwritten with the new value, or whether the new value should be added onto the end of the file. If you specify '''1''', then the value will be appended, if not, it will overwrite the file.&lt;br /&gt;
&lt;br /&gt;
==== savevars() ====&lt;br /&gt;
savevars() is an object function which saves the variables of an object into a file. Consider this example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVar = new TStaticVar(); // Create a TStaticVar&lt;br /&gt;
myVar.variable = &amp;quot;Hello&amp;quot;;&lt;br /&gt;
myVar.secondvariable = &amp;quot;World&amp;quot;;&lt;br /&gt;
myVar.saveVars(&amp;quot;levels/test.txt&amp;quot;, 0);&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will save the variables inside the &amp;quot;myVar&amp;quot; object into &amp;quot;levels/test.txt&amp;quot;. You can then recall these variables using loadvars();&lt;br /&gt;
&lt;br /&gt;
Like savelines(), the second parameter controls whether the variables are to be appended to the file. '''0''' will overwrite the file, and '''1''' will append to the file.&lt;br /&gt;
&lt;br /&gt;
==== loadvars() ====&lt;br /&gt;
loadvars() is another object function which loads savevars()-style variables from a file into an object. Let's say you used the previous example from savevars(), then you could restore these values using the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;myNewVar.loadvars(&amp;quot;levels/test.txt&amp;quot;);&lt;br /&gt;
echo(myNewVar.secondvariable);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... which will output &amp;quot;World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Private Messages (PMs) ===&lt;br /&gt;
From the serverside, you can send PMs to players. They appear from the NPC-Server.&lt;br /&gt;
&lt;br /&gt;
If you wanted to send a PM to the player &amp;quot;Skyld&amp;quot; (if the player is online), the you would use the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;findPlayer(&amp;quot;Skyld&amp;quot;).sendPM(&amp;quot;This is a PM&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... and then the specified player, in this case Skyld, would receive the PM &amp;quot;This is a PM&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If you want to send a PM to the current player, you would simply use:&lt;br /&gt;
&amp;lt;pre&amp;gt;player.sendPM(&amp;quot;This is a PM&amp;quot;);&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Functions/enablefeatures&amp;diff=18783</id>
		<title>Creation/Dev/Script/Functions/enablefeatures</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Functions/enablefeatures&amp;diff=18783"/>
		<updated>2011-09-18T08:13:25Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
''Clientside''&lt;br /&gt;
&lt;br /&gt;
example: &lt;br /&gt;
&amp;lt;pre&amp;gt;function onCreated()&lt;br /&gt;
{&lt;br /&gt;
  enablefeatures(allfeatures - 0x100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Disables hearts over the player's head.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Features are encoded as bits as listed below:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|'''Value'''&lt;br /&gt;
|'''Description'''&lt;br /&gt;
|- &lt;br /&gt;
|1&lt;br /&gt;
|M key (map) &lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|P key (pause) &lt;br /&gt;
|-&lt;br /&gt;
|4     &lt;br /&gt;
|Q key (weapon select) &lt;br /&gt;
|-&lt;br /&gt;
|8     &lt;br /&gt;
|R key (show ratings) &lt;br /&gt;
|-&lt;br /&gt;
|0x10     &lt;br /&gt;
|S+A key combination for dropping items &lt;br /&gt;
|-&lt;br /&gt;
|0x20     &lt;br /&gt;
|S+D key combination for switching weapons &lt;br /&gt;
|-&lt;br /&gt;
|0x40     &lt;br /&gt;
|TAB key (if disabled then you cannot switch to the chat field with TAB) &lt;br /&gt;
|-&lt;br /&gt;
|0x80     &lt;br /&gt;
|Display of chat text &lt;br /&gt;
|-&lt;br /&gt;
|0x100     &lt;br /&gt;
|Display of the hearts over player heads &lt;br /&gt;
|-&lt;br /&gt;
|0x200     &lt;br /&gt;
|Display of nicknames &lt;br /&gt;
|-&lt;br /&gt;
|0x400     &lt;br /&gt;
|Toall/PM-icons on the minimap &lt;br /&gt;
|-&lt;br /&gt;
|0x800     &lt;br /&gt;
|Right-click on players opens their profile &lt;br /&gt;
|-&lt;br /&gt;
|0x1000     &lt;br /&gt;
|Emoticons (disable it if you want to do other stuff with control+keys) &lt;br /&gt;
|-&lt;br /&gt;
|0x2000     &lt;br /&gt;
|Alt+5 for making snapshots (deprecated) &lt;br /&gt;
|-&lt;br /&gt;
|0x4000     &lt;br /&gt;
|Alt+8/9 for zooming (deprecated) &lt;br /&gt;
|-&lt;br /&gt;
|0x8000     &lt;br /&gt;
|Allows F2 output (savelog()/echo()) &lt;br /&gt;
|-&lt;br /&gt;
|allfeatures     &lt;br /&gt;
|All of the previously stated feature flags enabled&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Note:''' 0x#### is simply hexadecimal notation, so these codes hold no special meaning other than being numbers written in radix-16. E.g., 0x10 = 16 is the 4th bit (starting with the 0th bit).&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/Constants&amp;diff=18762</id>
		<title>Creation/Dev/GScript/Constants</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/Constants&amp;diff=18762"/>
		<updated>2011-09-05T19:42:49Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Reference]]&lt;br /&gt;
As one might be able to deduce, a '''constant''' has a single value and will retain that value as long as that constant exists. A constant is ''not'' a variable for one very important reason: its value is not variable!&lt;br /&gt;
&lt;br /&gt;
A constant is only accessible in the script where you have defined it, they&lt;br /&gt;
are not shared between the server-side and client-side parts either.&lt;br /&gt;
&lt;br /&gt;
The const keyword is more of a directive than a declaration; within a script the identifier (or in C-parlance, lvalue) in the const directive is replaced throughout the script with the value (or rvalue). This leads to limitations on what the value can be, e.g., only a string or number literal can be used as the replacement value.&lt;br /&gt;
&lt;br /&gt;
== Constants defined by keyword 'const' ==&lt;br /&gt;
&lt;br /&gt;
 const intVar = temp.val; // will not work, temp.val is not constant&lt;br /&gt;
 const intVar = 3;&lt;br /&gt;
 intVar = 4; // will not work&lt;br /&gt;
 player.chat = intVar; // displays 3&lt;br /&gt;
&lt;br /&gt;
The value of the constant cannot change even in conjunction with the use of the &amp;quot;=&amp;quot; operator. This is the power of a constant. However, player.variables cannot be defined as a constant (client(r).variables, too, possibly). Const only allows literals when assigning values.&lt;br /&gt;
&lt;br /&gt;
A constant may be used most likely to keep a variable that is available to any script from changing its value due to any foreign script interfering. It can also be used to give some cryptic value an easy to understand name, and by putting the const definition at the beginning of the script it can easily be configured.&lt;br /&gt;
&lt;br /&gt;
== Enumeration ==&lt;br /&gt;
&lt;br /&gt;
A special type of constants are enumerators:&lt;br /&gt;
&lt;br /&gt;
 enum {&lt;br /&gt;
   enum0,&lt;br /&gt;
   enum1,&lt;br /&gt;
   enum2&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
When you put names in an enumerator list, then it is automatically generating constants by enumarating the names - enum0 will be zero, enum1 will be 1, enum2 will be 2.&lt;br /&gt;
&lt;br /&gt;
 enum modes {&lt;br /&gt;
   IDLE,&lt;br /&gt;
   WALK&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
By giving a name to the enumerator list you can group enumerations - you can access the constants by modes.IDLE and modes.WALK. &lt;br /&gt;
&lt;br /&gt;
 enum {&lt;br /&gt;
   enum10 = 10,&lt;br /&gt;
   enum11,&lt;br /&gt;
   enumstr = &amp;quot;string&amp;quot;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
You can assign values to the constants like you do for normal constants. It will automatically enumerate the following entries by adding one to the last value, so enum11 will be 11. You can also assign a string value.&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Zenkou&amp;diff=18761</id>
		<title>Worlds/Zenkou</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Zenkou&amp;diff=18761"/>
		<updated>2011-09-05T19:34:55Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: updating...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Worlds]][[Category:Zenkou]]&lt;br /&gt;
{{playerworld}}&lt;br /&gt;
{| align=&amp;quot;left&amp;quot;&lt;br /&gt;
 |[[Image:Login_server_zenkou.png]]&lt;br /&gt;
|}&lt;br /&gt;
== Background Information ==&lt;br /&gt;
A tropical paradise server with battle somewhat similar to the Final Fantasies, in that it is turn-based. It is loose-RPG, which simply means RPG is not enforced, though it is an RPG server. The server is grossly understaffed, so if interested in applying for a position on the server, contact Zeon, the manager, or Haro 41, the co-manager.&lt;br /&gt;
&lt;br /&gt;
'''Zenkou''' is a well-anticipated server with much promise. Though styled with the beautiful graphics by Graal's own Haro 41, intriguing scripts, and detailed levels '''Zenkou''' doesn't take it over the top, and overall is unique in its aspects.&lt;br /&gt;
&lt;br /&gt;
== Current Staff ==&lt;br /&gt;
=== Management ===&lt;br /&gt;
Current Owner and Manager: Zeon &amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: MASTERCOLA &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Current Co-Manager: Haro &amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: haro41&lt;br /&gt;
=== Administration ===&lt;br /&gt;
&lt;br /&gt;
Name: pfa &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: Tolnaftate2004 &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Name: KillaBe&amp;lt;br /&amp;gt;&lt;br /&gt;
Account: racycle &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
One cannot apply for this position, rather, they must be promoted from a lower development or player-relations position.&lt;br /&gt;
&lt;br /&gt;
=== Scripting Team ===&lt;br /&gt;
Current Scripter General: pfa &amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: Tolnaftate2004 &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: none &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
*One must have a good knowledge of the following:&lt;br /&gt;
** Scripting, GS2 required&lt;br /&gt;
** RC and NC, though we're not particularly stingy about this&lt;br /&gt;
** Graal's internal workings, or good-enough theories thereof&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
=== LAT / Levels Team ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: *lavaman&amp;lt;br /&amp;gt;&lt;br /&gt;
Account: lavaman&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* One must have a good knowledge of the following:&lt;br /&gt;
** The tileset, particularly, Zenkou's&lt;br /&gt;
** Detailing, good, but not over-the-top&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
&lt;br /&gt;
=== Gani Team ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: none &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* One must have a good knowledge of the following:&lt;br /&gt;
** Graalshop, both movie and standard development&lt;br /&gt;
** .gani text-file syntax&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
=== GAT / Graphics Team ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: none &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* One must have a good knowledge of the following:&lt;br /&gt;
** A graphics program of your choice&lt;br /&gt;
** The zenkou style of graphics&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
&lt;br /&gt;
=== GP / Z-Police ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: none &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* Must not be power-hungry, and must not have the tendency to abuse power&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
&lt;br /&gt;
=== FAQ / Z-FAQ ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: none &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* Must not be power-hungry, and must not have the tendency to abuse power&lt;br /&gt;
* Must have a good knowledge of the following:&lt;br /&gt;
** Geography and location of buildings, and other landmarks&lt;br /&gt;
** Use and effects of weapons&lt;br /&gt;
** Storyline and gameplay&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
&lt;br /&gt;
To apply, contact Haro, Zeon, pfa or the head of the department you wish to join.&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Cross_Product&amp;diff=10366</id>
		<title>Cross Product</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Cross_Product&amp;diff=10366"/>
		<updated>2007-12-13T22:01:54Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* General Application of the Cross Product */ Spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Cross Product is a property of [[Vectors|vectors]]. The cross product takes two vectors and returns a third, which is perpendicular, or orthogonal, to the passed vectors. This vector is referred to as the normal vector, which normally is corrected to have a total magnitude of one in mathematics.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
If vectors u and v are crossed (&amp;quot;u cross v&amp;quot;), the magnitude of the normal vector is equal to |u||v|sin(&amp;amp;theta;). Thus,&lt;br /&gt;
 |u &amp;amp;times; v| = |u||v||sin(&amp;amp;theta;)||'''n'''| &lt;br /&gt;
 |u &amp;amp;times; v| = |u||v||sin(&amp;amp;theta;)|&lt;br /&gt;
In other applications, this magnitude has been found to be equal to the area of the parallelogram whose vertecies are at '''0''', '''u''', '''u'''+'''v''', and '''v'''.&lt;br /&gt;
&lt;br /&gt;
In addition,&lt;br /&gt;
 u &amp;amp;times; '''0''' = '''0'''&lt;br /&gt;
 u &amp;amp;times; v = -(v &amp;amp;times; u)&lt;br /&gt;
 (ru) &amp;amp;times; (sv) = (rs) u &amp;amp;times; v (where r and s are scalars)&lt;br /&gt;
&lt;br /&gt;
== General Application of the Cross Product ==&lt;br /&gt;
It is common practice in mathematics to write vectors as sums of the unit vectors, '''i''', '''j''', and '''k'''. These each have a magnitude of one and, from the origin, move precisely 1 unit on the x, y, and z axes respectively.&lt;br /&gt;
&lt;br /&gt;
Say, then, that we have two vectors, u and v.&lt;br /&gt;
 u = &amp;amp;lt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;&lt;br /&gt;
 v = &amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;&lt;br /&gt;
We can rewrite these vectors in terms of '''i''', '''j''', and '''k'''.&lt;br /&gt;
 u = u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;'''i''' + u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;'''j''' + u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;'''k'''&lt;br /&gt;
 v = v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;'''i''' + v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;'''j''' + v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;'''k'''&lt;br /&gt;
We can then &amp;quot;multiply&amp;quot; them in an algebraic manner.&lt;br /&gt;
 u &amp;amp;times; v = (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''j''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''k''' + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''j''' + &lt;br /&gt;
         (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''k''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''j''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''k'''&lt;br /&gt;
We can remove immediately any terms where the vector is crossing itself. The angle between two parallel vectors, a and b, is 0, thus a &amp;amp;times; b = |a||b|sin(0)|n| = 0 . So, the above statement simplifies to&lt;br /&gt;
&lt;br /&gt;
 u &amp;amp;times; v = (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''j''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''k''' + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''k''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''j'''&lt;br /&gt;
Because the cross product reflects the normal vector, the following hold:&lt;br /&gt;
 i &amp;amp;times; j = -(j &amp;amp;times; i) = k&lt;br /&gt;
 j &amp;amp;times; k = -(k &amp;amp;times; j) = i&lt;br /&gt;
 k &amp;amp;times; i = -(i &amp;amp;times; k) = j&lt;br /&gt;
Then, we can simplify our equation further:&lt;br /&gt;
 u &amp;amp;times; v = (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''k''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)(-'''j''') + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)(-'''k''') + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''i''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''j''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)(-'''i''')&lt;br /&gt;
       = (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''i''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''j''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''k'''&lt;br /&gt;
       = (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''i''' - (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''j''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''k''' (u-components are  in order)&lt;br /&gt;
This describes the direction of the normal vector to the vectors u and v. This sum can be expressed in [[Matrix|matrices]]&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;'''i''' - &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;'''j''' + &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;'''k'''&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot;&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;'''i'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''j'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''k'''&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The Cross Product in GraalScript ==&lt;br /&gt;
The cross product of two vector arrays in Graal can be obtained through the vectorcross({{graycourier|u}},{{graycourier|v}}) function. It's return value is a vector, w&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;'''i''' + w&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;'''j''' + w&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;'''k''', where the vector w is calculated from the determinant of the above [[Matrix|matrix]].&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=News/2007/November&amp;diff=10326</id>
		<title>News/2007/November</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=News/2007/November&amp;diff=10326"/>
		<updated>2007-11-29T05:03:43Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* November */  &amp;quot;Utopian&amp;quot; sounds like &amp;quot;Yutopian&amp;quot;, hence, &amp;quot;a Utopian&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== November ===&lt;br /&gt;
&lt;br /&gt;
* '''November 26th''' - '''Doomsday!''' {{News/Playerworlds}}&lt;br /&gt;
&lt;br /&gt;
Doomsday is back! Yes! Doomsday IS BACK!&lt;br /&gt;
&lt;br /&gt;
For those of you who remember Doomsday, you can relive it, and also those who missed the legendary Doomsday era, you can relive it with the full experince because we have the same EXACT overworld!&lt;br /&gt;
&lt;br /&gt;
Although this is a GREAT moment of Graal, with the return of one of the greatest servers ever, WE NEED STAFF! We are hiring GFX staff, Gani makers and scripters.&lt;br /&gt;
HELP BRING BACK A LEGACY!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''November 25th''' - '''Utopia!''' {{News/Playerworlds}}&lt;br /&gt;
&lt;br /&gt;
Hello all Graalians, Utopia is on its way! Utopia was origionally created a long time ago, but now it is here because of Ork and Chris Zakuto! Come one come all to Utopia! Utopia has alot of Releases, and stuff that is Under construction. so come along to play with friends and become a Utopian!&lt;br /&gt;
&lt;br /&gt;
[[Image:utopialogo.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''November 24th''' - '''Zone Snow Race!''' {{News/Zone}}&lt;br /&gt;
&lt;br /&gt;
We have released the new snow race map and did several events for winning small and big items. You can take either part to have fun beating other players by foot, with hover bike or mech, or get Zone Gold and win an item by being the first in one of the 11 different race tracks. Thanks to Dan for creating this new event.&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot_zonerace.png]] People lining up at the race start&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot_zonerace2.png]] Mech event finish&lt;br /&gt;
&lt;br /&gt;
* '''November 22nd''' - '''Happy Thanksgiving!''' {{News/Zone}}&lt;br /&gt;
&lt;br /&gt;
Happy Thanksgiving to all Graalians! On Zone, for this delicious holiday, we give you delicious cake! Buy them at the traders and throw them at your friends! And come back on Saturday to take part in the new Snowrace event!&lt;br /&gt;
&lt;br /&gt;
* '''November 3rd''' - '''7 New Zone Medals''' {{News/Zone}}&lt;br /&gt;
&lt;br /&gt;
Come online and get 7 more medals! They show up in your profile. Hints: 4 of them don't require you to kill someone, one is only available in Iricia, one in Guild Wars map, and one only requires one hard to get kill.&lt;br /&gt;
&lt;br /&gt;
* '''November 1st''' - '''Ol' West is Getting Some Work Done!''' {{News/Playerworlds}}&lt;br /&gt;
&lt;br /&gt;
[[Image:Olwestcoming.png|Ol' West]]&lt;br /&gt;
&lt;br /&gt;
Yep, Ol' West is getting some work done! Mag has returned and he's been working hard on the factions system and a new bullet-showing system, as shown in the picture. He can't finish the factions, though, mainly due to the lack of LATs. Log on Ol' West for more info, or to just have some fun.&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Releases/Client/5.006&amp;diff=10199</id>
		<title>Creation/Dev/Releases/Client/5.006</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Releases/Client/5.006&amp;diff=10199"/>
		<updated>2007-10-17T04:27:30Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* GUI */ &amp;amp;amp; -&amp;gt; &amp;amp;amp;amp; to show HTML code.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Release date==&lt;br /&gt;
&lt;br /&gt;
July 13th 2007 for Mac, Linux and Windows. This is the first public version of v5.&lt;br /&gt;
&lt;br /&gt;
==New Features==&lt;br /&gt;
&lt;br /&gt;
===General===&lt;br /&gt;
&lt;br /&gt;
* improved external playerlist (Windows):&lt;br /&gt;
** the external playerlist is now working on the login server&lt;br /&gt;
** you can dock it to the left or right side of the desktop&lt;br /&gt;
** you can show/hide it individually from the main Graal Window&lt;br /&gt;
** shows a tray menu icon for displaying incoming PMs&lt;br /&gt;
** fixed problems with the transparency of some head icons&lt;br /&gt;
** displays the head on Kingdoms and Zone&lt;br /&gt;
* PMs are now always using the internal scripted PM window&lt;br /&gt;
** prevents problems with javascript exploits inside PMs&lt;br /&gt;
** allows us to improve and customize the PM window in the future (since it is scripted)&lt;br /&gt;
** prevents problems with missing dlls on some Windows installations&lt;br /&gt;
* new log window:&lt;br /&gt;
** on Windows it is using the internal log window&lt;br /&gt;
** it is using several different tabs which only display log messages for files, scripts, sounds etc. instead of displaying everything in one huge log&lt;br /&gt;
** optimized to not lag when the window is not visible&lt;br /&gt;
* the Graal window is snapping to the desktop border when moved near the border&lt;br /&gt;
* the profile window on Windows is resizable now&lt;br /&gt;
* the in-game option window and profile window on Linux/Mac are resizable now&lt;br /&gt;
* improved the login to servers:&lt;br /&gt;
** it shows a message &amp;quot;Connecting to ...&amp;quot;&lt;br /&gt;
** the login to servers using GS2 is much faster&lt;br /&gt;
** it is directly connecting to the login server instead of displaying the start screen first&lt;br /&gt;
* when a PM from a npcserver is received and the PM history for it is more than 100k bytes then the history for it will be deleted, for preventing too huge files (many servers send a welcome message each time you login)&lt;br /&gt;
* files that contain &amp;quot;bomy&amp;quot; or start with &amp;quot;b_&amp;quot; are no longer saved into levels/bomys (requested by the Graal2001 developers)&lt;br /&gt;
* Linux packaging: &lt;br /&gt;
** it is possible again to start graal by just typing &amp;quot;graal&amp;quot; on the command line (instead of typing &amp;quot;graalexe&amp;quot;)&lt;br /&gt;
** SDL is not used anymore, which fixes some problems with the keyboard input (key repeat)&lt;br /&gt;
* drastically reduced the memory taken by scripts and the scripting engine&lt;br /&gt;
* the setup is not scanning the current folder anymore, so it's starting much faster when being downloaded to the temporary internet folder and started from there&lt;br /&gt;
* improved protection against memory hacking&lt;br /&gt;
* for saving screenshots it is now using the internal file dialog instead of the Windows file dialog which often made problems with messed up Windows installations (missing dlls)&lt;br /&gt;
* the Graal executable is signed, so it's easier to check that it hasn't been modified, and advanced Antivirus-programs don't complain anymore when Graal is updating&lt;br /&gt;
&lt;br /&gt;
===Translation System===&lt;br /&gt;
&lt;br /&gt;
* the client is now multi-language again: it is using the translation file format .po like on Graal Kingdoms&lt;br /&gt;
** you can find the files in translations/*.po (requires you to run the setup to see the files) and you can add new files if you want to translate the Graal interface into other languages (right now only German-de and French-fr are provided beside English)&lt;br /&gt;
** to start a new translations copy gui_en.po to gui_DOMAIN.po and guiwindows_en.po to guiwindows_DOMAIN.po (domain can be en,fr,de,pt,es etc.)&lt;br /&gt;
** po files can be edited either with text editor or a specialized po-editor like poedit.net&lt;br /&gt;
** as encoding use ISO 8859-15 (or ISO 8859-1 or Windows codepage 1252)&lt;br /&gt;
* the new client-side language support can also be used on servers with GS2:&lt;br /&gt;
** create a .po file on the serverside and make it downloadable, the filename must end with &amp;quot;_de.po&amp;quot; if it is a german translation, &amp;quot;_fr.po&amp;quot; if it's a french translation etc.&lt;br /&gt;
** on client-side load the translation with the command loadtranslation(file) - that will download &amp;quot;file_DOMAIN.po&amp;quot; depending on the players language&lt;br /&gt;
** in scripts you can use the translated strings with the script function &amp;quot;_()&amp;quot; (it is very short for easy usage) - that call will return the translation if one is existing, otherwise the original text&lt;br /&gt;
** it is planned in the future that an RC command is added which let's you easily generate a blank po file based on the occurances of _() in the scripts, for that also use the function N_() which is not changing the text, but is marking the text for being included in the scan (for text that you don't want to translate immediately)&lt;br /&gt;
** if the player is connecting for the first time then the translation might not be downloaded yet, thats why there is an event onTranslationUpdated(file)&lt;br /&gt;
** when the player changes the language in the options then an event onPlayerLanguageChanges(playerobject) is invoked, the same like on server-side&lt;br /&gt;
*** on clientside the playerobject is always the local player (there is no event yet when other people change their language)&lt;br /&gt;
*** it is recommended to update the text on GUI controls when the language changes&lt;br /&gt;
&lt;br /&gt;
===GUI===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* GuiControl:&lt;br /&gt;
** added function clearControls() for removing all controls[] at once&lt;br /&gt;
** you can make controls easily alpha-transparent or color them by accessing the following attributes:&lt;br /&gt;
*** red (0..1)&lt;br /&gt;
*** green (0..1)&lt;br /&gt;
*** blue (0..1)&lt;br /&gt;
*** alpha (0..1)&lt;br /&gt;
*** color (for changing all color attributes at once, format is {0..255,0..255,0..255,0..255})&lt;br /&gt;
*** mode (0 - add, 1 - alpha transparent, 2 - subtract, 3 - daynight effect)&lt;br /&gt;
*** this will also colorize the sub-controls or make the sub-controls alpha-transparent&lt;br /&gt;
*** if sub-controls don't want to be made transparent then use an alpha value greater than 1 (e.g. 10)&lt;br /&gt;
** the attribute &amp;quot;clipmove&amp;quot; is now also taken into account when resizing the control - by default the engine is making sure that you don't move a control out of the parents bounds, by setting clipmove = false that check is disabled&lt;br /&gt;
** fixed problems with the onShow/onHide events, they are now invoked when a control is becoming actually visible or invisible on the screen (corresponding to control.isActuallyVisible())&lt;br /&gt;
** you can let controls &amp;quot;flicker&amp;quot; by setting flickering = true;&lt;br /&gt;
*** you can change the flicker interval by setting &amp;quot;flickertime&amp;quot;&lt;br /&gt;
*** let controls flicker non-synchronized by setting &amp;quot;flickerbasetime&amp;quot; to a random value&lt;br /&gt;
** added attribute &amp;quot;hinttime&amp;quot; (by default 0.5 seconds) which says after how much time of the mouse not moving the hint will be shown&lt;br /&gt;
** fixed problems with centered GUI-controls (horizSizing = &amp;quot;center&amp;quot;, vertSizing = &amp;quot;center&amp;quot;) which are now correctly centered when added, not only when the parent control is resized&lt;br /&gt;
** fixed odd resizing of the parent control when a child control uses horizSizing = &amp;quot;left&amp;quot; and x is below 0, or vertSizing = &amp;quot;top&amp;quot; and y is below 0&lt;br /&gt;
** new script event: onFirstResponderChanges(newfirstresponder) is invoked when the input focus switched to another control&lt;br /&gt;
** fixed some problems with added controls receiving the input focus even if they shouldn't&lt;br /&gt;
** onKeyDown() and onKeyUp() now give an exact keycode as first parameter which includes modifier keys&lt;br /&gt;
*** modifier values are 0x100 for shift, 0x200 for control key, 0x400 for alt key&lt;br /&gt;
*** you can check e.g. for control key by if ((keycode &amp;amp; 0x200)!=0)&lt;br /&gt;
** added support for dragging files from files explorer to Graal GUI controls to expand the functionality of scripted RC and level editors:&lt;br /&gt;
*** set control.acceptdropfiles = true&lt;br /&gt;
*** once the user drops a file on the control an event controlname.onDropFiles(mousexpos,mouseypos,files) will be invoked, parameters are the mouse x and y positions and an array of filenames (with at least one file in it, but can be more than that)&lt;br /&gt;
*** to let the scripted RC upload the file call uploadFile(filename)&lt;br /&gt;
*** if you script editors, then you can use this to let the user place graphics or gani files in the level or editor space&lt;br /&gt;
*** this is currently working on Windows and Linux (where it only shows the drop-icon when the control under the mouse is actually accepting the files)&lt;br /&gt;
&lt;br /&gt;
* GuiFlash:&lt;br /&gt;
** accepts urls (on Windows) for displaying videos and similar&lt;br /&gt;
** if you want the file downloaded instead of streamed, set downloadWebfiles=true;&lt;br /&gt;
** the position of the flash control is correctly updated when the parent control is moving&lt;br /&gt;
** flash controls can be partially clipped (e.g. be inside a scroll control)&lt;br /&gt;
** flash controls work on Linux&lt;br /&gt;
*** it is automatically checking for libflashplayer.so in the firefox or mozilla plugin folder&lt;br /&gt;
*** web videos are currently not working&lt;br /&gt;
** some attributes have been renamed, but the old variant is still work: use &amp;quot;tryplugin&amp;quot; instead of &amp;quot;tryactivex&amp;quot; and &amp;quot;requiresplugin&amp;quot; instead of &amp;quot;requiresactivex&amp;quot;&lt;br /&gt;
** when the parent control is hidden then the flash control will be hidden too&lt;br /&gt;
&lt;br /&gt;
* GuiContextMenuCtrl:&lt;br /&gt;
** correctly draws the icon even if an entry has no text&lt;br /&gt;
** updates the icons when an image drawn on the icon has been downloaded&lt;br /&gt;
** readded attribute &amp;quot;maxpopupheight&amp;quot; which limits the height of the menu for preventing the menu from covering the whole screen (also works for GuiPopUpCtrl and GuiPopUpEditCtrl since they are using a GuiContextMenuCtrl for displaying the menu)&lt;br /&gt;
** new function openAtMouse() which opens the menu at the mouse position, use this if possible instead of open(x,y)&lt;br /&gt;
&lt;br /&gt;
* GuiPopUpCtrl: &lt;br /&gt;
** when closing a combo box (GuiPopUpCtrl) or similar then it is not wrongly switching the focus to the next control anymore&lt;br /&gt;
&lt;br /&gt;
* GuiScrollCtrl:&lt;br /&gt;
** added functions scrollToTop() and scrollToBottom() which simply call scrollto(0, 0) and scrollto(0, 0x7fffffff)&lt;br /&gt;
** added checks for HOME and END key for scrolling to the top or to the bottom&lt;br /&gt;
** when profile.bitmap is updated (or the file is updated) then the size of the up/down button and scroll bar are updated&lt;br /&gt;
&lt;br /&gt;
* GuiMLTextCtrl: &lt;br /&gt;
** added html-tag &amp;lt;blink&amp;gt;blinking text&amp;lt;/blink&amp;gt;&lt;br /&gt;
** added support for ampersand character codes like &amp;amp;amp;amp; which displays a &amp;quot;&amp;amp;&amp;quot;&lt;br /&gt;
** fixed a problem with two new lines adding a space in front of the line (when they should be ignored)&lt;br /&gt;
** fixed a problem with lists (ul-tag) not being correctly indented&lt;br /&gt;
** fixed a problem with scrolling back to the last click position when resizing the control when it's inside a scroll control (only supposed to happen for GuiMLTextEditCtrl)&lt;br /&gt;
** set &amp;quot;htmllinks = true&amp;quot; if you want Graal to automatically open a webbrowser when clicking on a link &lt;br /&gt;
** scrollToTag(tagname) accepts tagnames starting with &amp;quot;#&amp;quot; (it will automatically remove the &amp;quot;#&amp;quot; to match the tag names)&lt;br /&gt;
** better compatibility for the &amp;quot;size&amp;quot; attribute inside &amp;quot;font&amp;quot; tags:&lt;br /&gt;
*** when the size is between 1 and 7 then it will use HTML-compatible font sizing (1 - small, 3 - default size, 7 - large text)&lt;br /&gt;
*** when size is above 7 then it will still use it for the exact font size for compatibility with existing Graal scripts&lt;br /&gt;
** fixed problems with breaking words at the end of the line&lt;br /&gt;
** html comments &amp;lt;!-- comments --&amp;gt; are ignored now, as well as several non-supported tags (form, head, label, object, select)&lt;br /&gt;
&lt;br /&gt;
* GuiTextListEntry:&lt;br /&gt;
** added &amp;quot;flickertime&amp;quot; (by default 1 second) which specifies the flicker interval of the icon of the list entry&lt;br /&gt;
** easier selection of multiple entries via keyboard: you can now use the Home and End keys and select several entries by pressing Shift and moving the cursor keys&lt;br /&gt;
&lt;br /&gt;
* GuiTextEditSliderCtrl:&lt;br /&gt;
** support for floating point ranges (e.g. range = {0.1,1}), to display floating point values set format = &amp;quot;%.1f&amp;quot; or similar&lt;br /&gt;
&lt;br /&gt;
* GuiTextEditCtrl:&lt;br /&gt;
** fixed resizing problems when horizSizing is &amp;quot;width&amp;quot;, it is not allowing anymore that the parent control is made smaller and messing up the size of the text edit field&lt;br /&gt;
&lt;br /&gt;
* GuiWindowCtrl:&lt;br /&gt;
** new attribute &amp;quot;clientrelative&amp;quot; - if enabled then sub-controls are positioned automatically to not overlap the header or the borders; &lt;br /&gt;
*** use clientwidth and clientheight to get the available space for sub-controls&lt;br /&gt;
*** this allows to use different GUI styles/profiles without manually updating the position of sub-controls&lt;br /&gt;
*** clipping is only done for left, right and bottom side to allow placing of custom buttons on the title bar&lt;br /&gt;
** new function isActiveWindow() to know if this is the currently selected window (top window in the list of its parents children) and is drawn highlighted&lt;br /&gt;
** a window is activated / put on top of the other windows when you click with the mouse on a sub-control (previously you needed to click on the window title for that)&lt;br /&gt;
&lt;br /&gt;
* GuiSliderCtrl:&lt;br /&gt;
** the slider can be moved by keyboard (Up/Left for reducing the value, Right/Down for increasing the value, Home and End for jumping to the minimum or maximum value)&lt;br /&gt;
** the position of the thumb is automatically updated when the control is resized&lt;br /&gt;
&lt;br /&gt;
* GuiCheckBoxCtrl:&lt;br /&gt;
** draws the graphics for the pressed-state also when the mouse is over the control, for improving the look&lt;br /&gt;
&lt;br /&gt;
* GuiButtonCtrl (also GuiCheckBoxCtrl, GuiRadioCtrl): &lt;br /&gt;
** added support for hot-keys: if the button text contains a &amp;quot;&amp;amp;&amp;quot; then the following character will be underlined and the button will be activated when that key is pressed, e.g. you can activate a button that has the text &amp;quot;&amp;amp;Close&amp;quot; by pressing 'C'&lt;br /&gt;
*** use &amp;quot;&amp;amp;&amp;amp;&amp;quot; if you just want to display a &amp;quot;&amp;amp;&amp;quot; without the hot-key function&lt;br /&gt;
** improved the support to navigate the GUI via keyboard:&lt;br /&gt;
*** buttons, tabulator buttons, check boxes, radio buttons, combo boxes (GuiPopUpCtrl) and sliders are now by default tabable which means that you can move the focus to them by pressing the Tab key (if the window has the input focus)&lt;br /&gt;
*** when a button, check box or radio button has the focus then you can move the focus to the next or previous control by pressing up/left/down/right (e.g. scrolling through a list of buttons)&lt;br /&gt;
&lt;br /&gt;
* GuiShowImgCtrl:&lt;br /&gt;
** fixed clipping of GuiShowImgCtrls which use &amp;quot;text&amp;quot; - you need to specify width, height, offsetx and offsety if you don't want to have the text clipped (especially needed when you use style &amp;quot;c&amp;quot; for centered text or &amp;quot;r&amp;quot; for right-aligned text)&lt;br /&gt;
&lt;br /&gt;
* GuiInputCtrl:&lt;br /&gt;
** Linux/Mac: fixed a problem with GuiInputCtrl capturing the focus on creation even if it's not visible&lt;br /&gt;
&lt;br /&gt;
===Graphics===&lt;br /&gt;
&lt;br /&gt;
* Video capture:&lt;br /&gt;
** press Alt+6 for recording videos, configure it in the options&lt;br /&gt;
** the video is saved in the Graal folder under videos/ (*.avi format)&lt;br /&gt;
** it is currently saving uncompressed and without sound&lt;br /&gt;
* Easy skinning of GUI controls:&lt;br /&gt;
** set GuiControl.style to &amp;quot;mytheme.wba&amp;quot; or &amp;quot;mytheme.zip&amp;quot; for skinning controls&lt;br /&gt;
** it will replace the graphics and colors for most controls, except the font size/style&lt;br /&gt;
** use the new attribute &amp;quot;clientrelative&amp;quot; for GuiWindowCtrl for making them compatible with different styles without needing to reposition the sub controls&lt;br /&gt;
** known problems:&lt;br /&gt;
*** not all styles look perfectly yet&lt;br /&gt;
*** when switching between styles that use the same name for graphics then it might still show the graphics from the old style; restart the game to fix that&lt;br /&gt;
*** some controls still use the font type and size defined in the regular GUI profiles (control.profile)&lt;br /&gt;
** there are new GUI controls for using taskbar skins:&lt;br /&gt;
*** GuiTaskBar - displays a bar with space for a start button on the left side, 'task'-buttons in the middle, and a tray or time display on the right side; if the control is not using any 'style' then it will look like a normal GuiControl&lt;br /&gt;
*** GuiStartMenuCtrl - similar to a GuiContextMenuCtrl, but displays a bigger menu like the Windows start menu&lt;br /&gt;
*** GuiButtonCtrl.stylesection - buttons can be skinned, by changing 'stylesection' you can specify what look the button should use, e.g. &amp;quot;Taskbar.StartButton&amp;quot;, &amp;quot;Taskbar.ButtonHorz&amp;quot;&lt;br /&gt;
* players and npcs can be made transparent - you can now use the same attributes like for showimgs/findimgs for setting red,green,blue,alpha and mode&lt;br /&gt;
* fixed a bug with reading pngs that had a bad palette size&lt;br /&gt;
* added support for 1-bit pngs&lt;br /&gt;
* when an image is downloaded from the web and doesn't have a known file extension then the engine is trying to guess the file type by reading the content and displaying it correctly in most cases&lt;br /&gt;
* when a web image is not existing then it is printing an error in F2 now and is not saving the data returned by the webserver anymore&lt;br /&gt;
* Windows version graphics:&lt;br /&gt;
** printing an error in the F2 window when the graphics card is out of video RAM (some images will not appear then)&lt;br /&gt;
** trying to free all possible resources when the graphics card is out of video RAM to reduce that error&lt;br /&gt;
** when loading images the engine is cutting out all fully transparent parts to minimize the use of video memory&lt;br /&gt;
** fixed some problems with icons and classic bodies not refreshing or not displaying&lt;br /&gt;
* Linux/Mac version graphics:&lt;br /&gt;
** optimized the usage of graphics - it is using directly 8-bit palettized images with OpenGL and for tile drawing (before: always converting to 24 bit or 32 bit)&lt;br /&gt;
** smoother drawing of stretched images (like in windows version)&lt;br /&gt;
** improved font system which is more compatible, better looking and taking less ressources&lt;br /&gt;
* Text drawing: right-aligned italic text is shifted 2 pixels to the left to prevent clipping problems&lt;br /&gt;
* Improved support for bmp:&lt;br /&gt;
** fixed a bug in the bmp reader so that bmps with odd width or height are correctly displayed&lt;br /&gt;
** support for 32 bit bmps&lt;br /&gt;
** not crashing on unsupported formats&lt;br /&gt;
* particles support text shadow (emitter.particle.textshadow, shadowcolor, shadowoffset)&lt;br /&gt;
* Linux/Mac: the scripted effects can be turned off directly in the options now (that only works when servers support those options)&lt;br /&gt;
&lt;br /&gt;
===Sounds===&lt;br /&gt;
&lt;br /&gt;
* playlooped() is updating the volume each time it is called depending on the distance to the player&lt;br /&gt;
* music files are now played non-looped by default when using the play() command, use playlooped() if you want to play a looped music or stream&lt;br /&gt;
* when the volume is zero then wavs and mp3s are not downloaded anymore&lt;br /&gt;
* downloaded wav files are automatically played (with the right volume and looping if requested)&lt;br /&gt;
* when a music file (mp3, midi etc.) is played but is not existing yet then it is automatically played once it is downloaded&lt;br /&gt;
* on Windows XP/Vista 64 bit it is by default not trying to use sounds because it freezes Graal, you can turn off this behaviour by setting &amp;quot;tryloadsoundson64bit=true&amp;quot; in the Graal options file - open game_config.txt with Wordpad&lt;br /&gt;
&lt;br /&gt;
===Scripting===&lt;br /&gt;
&lt;br /&gt;
* correct class loading on clientside - onCreated() will be called on the joining object once the class has been downloaded from the server&lt;br /&gt;
* Full support for client-side classes:&lt;br /&gt;
** caching of classes&lt;br /&gt;
** when a class is downloaded then the script is suspended while downloading&lt;br /&gt;
** when calling a function of an object which is waiting for classes then the calling script will be suspended until it is loaded (to avoid errors with missing functions)&lt;br /&gt;
** you can pre-load classes by calling loadclass(classname)&lt;br /&gt;
** you can check if a class is loaded with isClassLoaded(classname)&lt;br /&gt;
** when a class is downloaded from the server then an event onClassLoaded(classname) will be invoked&lt;br /&gt;
* class-scripts are deleted from memory when switching servers&lt;br /&gt;
* script function: obj.addArrayMember(name) adds an array member with a name, returns the added object so that you can easily add sub variables &lt;br /&gt;
** use obj.getArrayMember(name) to find a named array member (the first occurance in the array)&lt;br /&gt;
* the script function isObject(objectname) is working better - checks if the variable exists, and if it's a static variable (GUI, TStaticVar etc.), is an array, or is linking to some other variable - before it was only checking if a global variable with that name exists;&lt;br /&gt;
** if you want to check if that variable is actually a static object, then check var.objecttype()!=2 &lt;br /&gt;
* added function obj.clearVars() which removes all dynamic sub variables, it doesn't send deletion of client. vars and similar yet though&lt;br /&gt;
* added script variable obj.scripterrors which gives the list of errors reported for the object, e.g. &amp;quot;Function func not found&amp;quot;&lt;br /&gt;
* New script function getFileModTime(filename)&lt;br /&gt;
** gets the time of the last modificatin of a file&lt;br /&gt;
** it's using unix time which is compatible to timevar2 (seconds since 1970-01-01)&lt;br /&gt;
** accepts both exact file path and plain file name&lt;br /&gt;
* When a script function is requiring more parameters than provided then the error message is also displaying the object type (not just the function name)&lt;br /&gt;
* obj.getfunctions() also lists functions contained in joined classes&lt;br /&gt;
* new script function object.hasfunction(functionname) - tells if the object has the specified function and can be called&lt;br /&gt;
* Added support for function objects:&lt;br /&gt;
** this will print &amp;quot;param: 123&amp;quot;&lt;br /&gt;
    function onCreated() {&lt;br /&gt;
      this.func = this.func1;&lt;br /&gt;
      this.func(123);&lt;br /&gt;
    }&lt;br /&gt;
    function func1(param) {&lt;br /&gt;
      echo(&amp;quot;param: &amp;quot; @ param);&lt;br /&gt;
    }&lt;br /&gt;
** You can also do this, but keep care to add a semicolon behind the function declaration:&lt;br /&gt;
    this.func = function() {&lt;br /&gt;
      echo(&amp;quot;nameless function&amp;quot;);&lt;br /&gt;
    };&lt;br /&gt;
** There is a protection against unsetting functions, since often scripts  use the same name for functions and variables. If the variable is not linking to a function but the script contains a function with that name, then it will use the function defined in the script instead. You can however link to another function.&lt;br /&gt;
* You can now create empty arrays simplier by doing &amp;quot;var = {};&amp;quot; (it was displaying a syntax error before)&lt;br /&gt;
* when array members are updated then printing the array will correctly show the updated state (in most cases)&lt;br /&gt;
* New script command object.loadini(inifilename) for loading an ini file into a variable; you can access the variables by object.inisection.varname&lt;br /&gt;
* added script functions findnearestplayer(x,y) and findnearestplayers(x,y) on clientside, also getnearestplayer(x, y) and getnearestplayers(x, y) (which return indices instead of objects)&lt;br /&gt;
* keydownglobal(0..10) has been fixed - with this function you can check the status of the default keys (which also use joystick input) even when some GUI control has the input&lt;br /&gt;
* added a way to increase the loop limit for scripts: obj.maxlooplimit = 100000; will increase the number of maxmimum allowed loop iterations for the object to 100000 (default 10000)&lt;br /&gt;
** if you have some script that is sometimes requiring  more than 10000 loop iterations then this helps to prevent problems&lt;br /&gt;
** the allowed range for maxlooplimit might be restricted on some servers though&lt;br /&gt;
* scripts can access image files; currently supported file extensions:&lt;br /&gt;
    .txt,.rtf,.htm,.html,.xml,.nw,.gani,.gmap,.gupd,.hfl,&lt;br /&gt;
    .cs,.gs,.arc,.dat,.css,.ini,.uis,.png,.mng,.gif,.jpeg,&lt;br /&gt;
    .jpg,.jp2,.bmp,.bm8,.tga,.dds&lt;br /&gt;
* scripts can read files from the updatepackages/ folder and tileobjects/ folder (tileobjects contain files required for the scripted editor)&lt;br /&gt;
* it is finally possible to replace sprites.png and state.png by script:&lt;br /&gt;
** GS1: setspritesimage filename; setstatusimage filename;&lt;br /&gt;
** GS2: setspritesimage(&amp;quot;filename&amp;quot;); setstatusimage(&amp;quot;filename&amp;quot;); or use the global variables spritesimage or statusimage&lt;br /&gt;
** those images will then be used to draw the default classic GUI (state.png) and default sprite effects like when carrying a bush or swimming (sprites.png)&lt;br /&gt;
** the images will be reset to the default value when switching a server&lt;br /&gt;
* fixed some problems with weapons when switching from GS1 to GS2: because weapons are basicly npcs, some built-in variables like 'hp' were protected, but since the weapons are not really requiring those they have been removed now, so you can use them as normal variables again (e.g. this.hp = 50.2; );&lt;br /&gt;
** the built-in variables that were removed are:&lt;br /&gt;
  alpha, ani, aniparams, &lt;br /&gt;
  anistep, blue, green, mode, gmap, height, hp, maxhp, red, rotation, stretchx, &lt;br /&gt;
  stretchy, width, zoom&lt;br /&gt;
* new function for detecting if the game is currently in fullscreen mode: isfullscreenmode() returns true or false; it is also possible to switch to fullscreen mode or window mode, but only for authorized scripts&lt;br /&gt;
* it is now possible to trigger npcs from clientside using the triggerserver() function:&lt;br /&gt;
** triggerserver(&amp;quot;npc&amp;quot;,npcname,params) is invoking an onActionServerSide(params) event on the server-side&lt;br /&gt;
** it works even if the player is not near the npc (so you need to check that if required)&lt;br /&gt;
** to use this in GS1 you need to do triggeraction 0,0,servernpc,npcname,params; and check for &amp;quot;if (actionserverside)&amp;quot; in the triggered npc&lt;br /&gt;
* improved support for displaying flash resources in Graal:&lt;br /&gt;
** in showimgs/findimgs and GuiShowImgCtrl you can set flashfile = &amp;quot;name.swf&amp;quot; and then access the attributes by the variable &amp;quot;flash&amp;quot;&lt;br /&gt;
** fixed some major compatibility problems&lt;br /&gt;
** gradient brushes are correctly handled and displayed&lt;br /&gt;
** it is possible now to list all available flash resources of a file by displaying flash.objectnames&lt;br /&gt;
** display the number of frames: flash.framecount&lt;br /&gt;
** you can also set the frame number of sub objects: do flash.objectname = &amp;quot;clipname&amp;quot;, flash.object.frame = subframenumber you can change the color of the flash resource (by setting red,green,blue,alpha of the showimg)&lt;br /&gt;
** correct scaling when the GuiShowImgCtrl is inside a GuiStretchCtrl (or the showimg is displayed in the gani script of a scaled player/npc)&lt;br /&gt;
** you can access the layers (depths) of the flash movie with flash.getLayer(&amp;quot;name&amp;quot; or index), and then change red,green,blue,alpha (or 'color' for changing all at once) and frame or even access sub-layers, use flash.layernames to get the available names&lt;br /&gt;
** resources (meshes, gradient textures) are removed from memory after a few seconds of non-usage&lt;br /&gt;
* improved the support for moving and resizing the GraalControl so that other controls can be placed in the game window without hiding parts of the game&lt;br /&gt;
* when using string.tokenize(delimiters) and the delimiter is new line ('\n') then it is also skiping line feeds ('\r') which are in front of new line, which makes it easier to read DOS/Windows formated texts&lt;br /&gt;
* new player attribute player.communityname which displays the name the player is using for the forums etc.&lt;br /&gt;
** by default players have now an account name which is basicly just a number (Graal12345) and can later register a communityname which is then used for the fourms, wiki etc.&lt;br /&gt;
** on the playerlist and PMs it will display the community name instead of the account name, scripts are supposed to do the same&lt;br /&gt;
* for improving the playerlist and similar things it is now possible to force the gserver to send player attributes (#P/player.attr[]) to all players on the server instead to only people that see you&lt;br /&gt;
** set the server options sendtoallattr=1,2,3 for sending attributes 1, 2 and 3 to all players&lt;br /&gt;
** when #P1/attr[1] is changing then it is also invoking the event onPlayerChanges(player,id) like when the head is changing&lt;br /&gt;
* getstringkeys(variablenamestart) is now also returning the names of sub variables which are empty but have themself sub-variables&lt;br /&gt;
* added player.mapicon which is used for drawing the head on the map and mini-map, this is usually updated by the playerlist script&lt;br /&gt;
* TDrawingPanels (icons) have a new attribute: icon.isclear says if the icon is empty (no drawing operation done yet or everything cleared with clearall())&lt;br /&gt;
&lt;br /&gt;
==Bug Fixes==&lt;br /&gt;
&lt;br /&gt;
* General bugs&lt;br /&gt;
** fixed a problem that crashed the client on serverswitch when still having PMs on the player list from players that already logged out&lt;br /&gt;
** when downloading files with the scripted RC into the Graal folder then it is using the correct path and is not moving the file to the level/images/download folder anymore&lt;br /&gt;
** fixed a problem with defaultmovement where the player was not moved on the map when the player was moved by script&lt;br /&gt;
** on vista it doesn't display a runtime error when you close the program anymore&lt;br /&gt;
&lt;br /&gt;
* Script engine bugs&lt;br /&gt;
** fixed the script garbage collector (deleting unused/unlinked TStaticVar)&lt;br /&gt;
** showimgs/findimgs that are attached to the player via attachtoowner=true are correctly synchronized to the player position (and don't lag behind)&lt;br /&gt;
** hideimg() is not crashing the engine anymore if it contains gani scripts&lt;br /&gt;
** the destroy() function for GuiControls and TStaticVar are not causing crashes anymore, but the objects are disappearing from scripting so you can correctly recreate them&lt;br /&gt;
** fixed a problem with the random function - int(random(0,upperlimit)) was sometimes returning 'upperlimit' due to rounding if a floating point value is very close to an integer value - the random() function is now preventing that the result is identical to the upper limit&lt;br /&gt;
** fixed a script problem where &amp;quot;-&amp;quot; was seen as number (-1)&lt;br /&gt;
** fixed a crash when returning a temp. array from a suspended function (sleep/waitfor in a public function)&lt;br /&gt;
** fixed the modulus operator 'a % b' for the case that a is negative and b is high number (&amp;gt;10000), previously it was giving a negative number which should not happen (-3 % 100000 should give 99997)&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectors&amp;diff=10183</id>
		<title>Vectors</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectors&amp;diff=10183"/>
		<updated>2007-10-11T02:45:06Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Vector Length (Magnitude) */ Magnitude == Modulus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Vectors''' are mathematical representations of any thing that has a length, or magnitude, and direction. Positions are also described using vectors which start at the origin of the coordinate system (0,0,0).&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In GraalScript, a vector is limited to three dimensions, however, mathematics allows for analyses of vectors in n-dimensions. Vectors do not have positions. Two vectors are said to be parallel if they have the same direction (u || v), and are said to be equal if they are parallel and have the same magnitude (u = v). Vectors are generally described by their terminal points with respect to the origin (0,0,0).&lt;br /&gt;
&lt;br /&gt;
The basic format of a vector in GraalScript is {x,y,z} where x, y, and z are all floating points in reference to the axis to which they correspond. Built into GraalScript are several functions which can be used to analyze these vectors.&lt;br /&gt;
&lt;br /&gt;
In mathematics, vectors are often written&lt;br /&gt;
 v = &amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;&lt;br /&gt;
for a vector in three dimensions. They can also be written as the sum of unit vectors, &amp;lt;b&amp;gt;i&amp;lt;/b&amp;gt; = &amp;amp;lt;1,0,0&amp;amp;gt;, &amp;lt;b&amp;gt;j&amp;lt;/b&amp;gt; = &amp;amp;lt;0,1,0&amp;amp;gt;, and &amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt; = &amp;amp;lt;0,0,1&amp;amp;gt; on the x, y, and z axes, respectively. In this case, the vector would be written as&lt;br /&gt;
 v = v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;i&amp;lt;/b&amp;gt; + v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;j&amp;lt;/b&amp;gt; + v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt;&lt;br /&gt;
where the values of v are treated as scalars (numerical multipliers) of the unit vectors.&lt;br /&gt;
&lt;br /&gt;
To denote the difference between a scalar and a vector, vectors are often written with a directional arrow above them, which looks like the top half of an arrow pointing right. In GraalScript, a scalar and a vector are impossible to confuse: a scalar is a floating point whereas a vector is a string.&lt;br /&gt;
&lt;br /&gt;
=== Vector Length (Magnitude/Modulus) ===&lt;br /&gt;
Being as vectors are merely written by terminal point coordinates, there is no immediate way to determine the magnitude of the vector. Mathematically, the terminal point lies on a sphere that has the same radius as the vector's magnitude. Thus, we can use the equation of a sphere to calculate the magnitude.&amp;lt;br /&amp;gt;&lt;br /&gt;
 r&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 r = &amp;amp;radic;(x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
where r is the magnitude. Generally, the magnitude is denoted as |v| or ||v||. This was chosen, because absolute value refers to distance from the origin, thus  the marks were suitable. In GraalScript, however, the magnitude of any vector can be calculated simply by plugging a vector string into the '''vectorlen({{graycourier|v}})''' function.&lt;br /&gt;
&lt;br /&gt;
=== Unit Length ===&lt;br /&gt;
A vector is said to have &amp;quot;unit length&amp;quot; when it's magnitude is one. '''i''', '''j''', and '''k''' are each unit vectors because their magnitudes are each one. To make a vector of unit length, the vector must merely be divided by it's magnitude.&lt;br /&gt;
Let v be a vector and u be the direction (unit vector) of v.&lt;br /&gt;
 v = &amp;lt;1,7,1&amp;gt;&lt;br /&gt;
 |v| = &amp;amp;radic;(1&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 7&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) = &amp;amp;radic;51&lt;br /&gt;
 u = v/|v| = &amp;lt;1/&amp;amp;radic;51,7/&amp;amp;radic;51,1/&amp;amp;radic;51&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graalscript has a built-in function, '''vectornormalize({{graycourier|1=v}})''',to perform such a calculation.&lt;br /&gt;
&lt;br /&gt;
== Vector Modification ==&lt;br /&gt;
Along with vectorlen are a plethora of functions built into GraalScript all for the purpose of modifying vectors.&lt;br /&gt;
&lt;br /&gt;
=== Vector Addition ===&lt;br /&gt;
[[Image:Vectors-addition.png|thumb|right|Vector addition]]&lt;br /&gt;
Given the vectors u and v, we could create a third vector that has the magnitude of u and v, were the two vectors to be placed tip-to-end. This is called vector addition and can be done with the function '''vectoradd({{graycourier|u}},{{graycourier|v}})'''. This takes the terminal coordinates and adds them together. to make a new vector: &amp;lt;br /&amp;gt;&lt;br /&gt;
 w = &amp;amp;lt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;. &lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector-Scalar Multiplication ===&lt;br /&gt;
[[Image:Vectors-scalar-multiplication.png|thumb|left|Vector-scalar multiplication]]&lt;br /&gt;
With a vector, v, and a scalar, s, we could make a new vector that is s times larger than v. This can be accomplished in GraalScript with the function '''vectorscale({{graycourier|v}},{{graycourier|s}})'''. The vector is thus extended in the following manner: &amp;lt;br /&amp;gt;&lt;br /&gt;
 s&amp;amp;#183;v = s&amp;amp;#183;&amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt; = &amp;amp;lt;s&amp;amp;#183;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,s&amp;amp;#183;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,s&amp;amp;#183;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector Subtraction ===&lt;br /&gt;
[[Image:Vectors-subtraction.png|thumb|right|Vector subtraction]]&lt;br /&gt;
With these two properties, we find that vector subtraction is possible, and no longer a new idea. This is done in GraalScript with the use of the '''vectorsub({{graycourier|u}},{{graycourier|v}})''' function. &amp;lt;br /&amp;gt;&lt;br /&gt;
 u-v = u + (-v) = u + (-1)&amp;amp;#183;v&lt;br /&gt;
You can imagine this as the two vectors placed tip-to-end, but the second is facing the opposite direction.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Distance Between Terminal Points ===&lt;br /&gt;
Without creating a third vector, it is simple in GraalScript to find the distance between the two points at which two vectors end. This function is '''vectordist({{graycourier|u}},{{graycourier|v}})'''. &amp;lt;br /&amp;gt;&lt;br /&gt;
The return value would be&lt;br /&gt;
 &amp;amp;radic;((u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;+(u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;+(u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
The mathematical operation is the pythagorean theorem (or a combination of two). As may be evident, the distance is the magnitude of '''u'''-'''v'''.&lt;br /&gt;
&lt;br /&gt;
== Other functions ==&lt;br /&gt;
vectordot({{graycourier|u}},{{graycourier|v}}): see [[Dot Product]].&amp;lt;br /&amp;gt;&lt;br /&gt;
vectorcross({{graycourier|u}},{{graycourier|v}}): see [[Cross Product]].&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Euler_Rotation&amp;diff=10182</id>
		<title>Euler Rotation</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Euler_Rotation&amp;diff=10182"/>
		<updated>2007-10-09T19:33:15Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definitions ==&lt;br /&gt;
Euler - Pronounced Oiler; discovered that as 1 is continuously compounded, it reaches a number, ''e''. However, Euler rotation is taking a 3-dimensional axes set and rotating them about the z-axis followed by a forward or backward rotation to create a new axes set.&lt;br /&gt;
For objects that inherit the property 'eulerrotation', the format is supposedly &amp;quot;&amp;amp;Delta;''&amp;amp;alpha;'' &amp;amp;Delta;''&amp;amp;beta;'' &amp;amp;Delta;''&amp;amp;gamma;''&amp;quot;. Read further for a better explanation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;amp;theta;'': greek letter ''theta''&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;phi;'': greek letter ''phi''&amp;lt;br /&amp;gt;&lt;br /&gt;
''theta'' and ''phi'' are commonly used in trigonometry for angles (but phi is most commonly used as a constant: 1.618...).&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;alpha;'': 1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; greek letter ''alpha''. For our purposes, it will represent The angle between the original x axis and the normal vector&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;beta;'': 2&amp;lt;sup&amp;gt;nd&amp;lt;/sup&amp;gt; greek letter ''beta''. For our purposes, it will represent the forward or backward &amp;quot;tilt&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;gamma;'': 3&amp;lt;sup&amp;gt;rd&amp;lt;/sup&amp;gt; greek letter ''gamma''. For our purposes, it will represent the angle between the normal vector&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; and the new x axis.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Therefore, images and text could be rotated, something that could not be done before, so that said image or text would have a three-dimensional effect. If all said is true, eulerrotation = &amp;quot;0 -pi/3 0&amp;quot;; for text would project it in a Star Wars-like fashion.&lt;br /&gt;
&lt;br /&gt;
 sin(''&amp;amp;theta;'') = y / ''r'' (&amp;amp;Delta;y of a point from the center on a circle with radius ''r'')&lt;br /&gt;
 cos(''&amp;amp;theta;'') = x / ''r'' (&amp;amp;Delta;x of a point from the center on a circle with radius ''r'')&lt;br /&gt;
 sin(''&amp;amp;theta;'' &amp;amp;plusmn; ''&amp;amp;phi;'') = sin(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') &amp;amp;plusmn; cos(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
 -cos(''&amp;amp;theta;'' &amp;amp;plusmn; ''&amp;amp;phi;'') = -cos(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') &amp;amp;plusmn; sin(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
&lt;br /&gt;
In addition (not really useful):&lt;br /&gt;
 tan(''&amp;amp;theta;'') = sin(''&amp;amp;theta;'') / cos(''&amp;amp;theta;'')&lt;br /&gt;
 cot(''&amp;amp;theta;'') = cos(''&amp;amp;theta;'') / sin(''&amp;amp;theta;'')&lt;br /&gt;
 sec(''&amp;amp;theta;'') = 1 / cos(''&amp;amp;theta;'')&lt;br /&gt;
 csc(''&amp;amp;theta;'') = 1 / sin(''&amp;amp;theta;'')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=&amp;quot;33%&amp;quot; NOSHADE&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; The normal vector is the vector perpendicular to the original z and the new z axes. This can be calculated through [[Cross Product|cross product]].&lt;br /&gt;
&lt;br /&gt;
== Rotation Matrices ==&lt;br /&gt;
'''Note:''' The following example uses MATLAB notation for the matrix transformation.&lt;br /&gt;
 [cos(''&amp;amp;gamma;'') sin(''&amp;amp;gamma;'') 0; -sin(''&amp;amp;gamma;'') cos(''&amp;amp;gamma;'') 0; 0 0 1] * ...&lt;br /&gt;
 [1 0 0; 0 cos(''&amp;amp;alpha;'') sin(''&amp;amp;alpha;''); 0 -sin(''&amp;amp;alpha;'') cos(''&amp;amp;alpha;'')] * ...&lt;br /&gt;
 [cos(''&amp;amp;beta;'') sin(''&amp;amp;beta;'') 0; -sin(''&amp;amp;beta;'') cos(''&amp;amp;beta;'') 0; 0 0 1] * ...&lt;br /&gt;
 ([x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;]') = [x y z]'&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Talk:Creation/New_Player_Development_Guide&amp;diff=10164</id>
		<title>Talk:Creation/New Player Development Guide</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Talk:Creation/New_Player_Development_Guide&amp;diff=10164"/>
		<updated>2007-10-04T07:59:07Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== NAT? LAT? GAT? ==&lt;br /&gt;
&lt;br /&gt;
I don't like that we are promoting these age-old names that are sort of dated...  Do we have to put those on this page?&lt;br /&gt;
&lt;br /&gt;
These titles are still very commonplace. --[[User:Tolnaftate2004|Tolnaftate2004]] 09:59, 4 October 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Worlds/Zenkou&amp;diff=10163</id>
		<title>Worlds/Zenkou</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Worlds/Zenkou&amp;diff=10163"/>
		<updated>2007-10-04T07:55:47Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: Both Kirai and Mystic hold an admin position&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{playerworld}}&lt;br /&gt;
{| align=&amp;quot;left&amp;quot;&lt;br /&gt;
 |[[Image:Login_server_zenkou.png]]&lt;br /&gt;
|}&lt;br /&gt;
== Background Information ==&lt;br /&gt;
A tropical paradise server with battle somewhat similar to the Final Fantasies, in that it is turn-based. It is loose-RPG, which simply means RPG is not enforced, though it is an RPG server. The server is grossly understaffed, so if interested in applying for a position on the server, contact Zeon, the manager, or Haro 41, the co-manager.&lt;br /&gt;
&lt;br /&gt;
'''Zenkou''' is a well-anticipated server with much promise. Though styled with the beautiful graphics by Graal's own Haro 41, intriguing scripts, and detailed levels '''Zenkou''' doesn't take it over the top, and overall is unique in its aspects.&lt;br /&gt;
&lt;br /&gt;
== Beating a New Path ==&lt;br /&gt;
=== GUI ===&lt;br /&gt;
'''Zenkou''' has taken the initiative and gone forth to materialized some of the most interesting ideas on Graal. Currently visible are the Graphical User Interface (GUI), originally scripted in GS1 before the release of Graal 3 and the use of GuiControls. It is unique in that it snaps to objects, is draggable, and acted like windows in a window, before it was so easily done. The soon-to-come GUI v4 will be scripted in it entirety in GS2 and will use the new engine to its full potential in making a complex script, as one might imagine it might be, into something more functional and compact.&lt;br /&gt;
=== Battle System ===&lt;br /&gt;
'''Zenkou''' is proud to present it's up-and-coming attraction, simply referred to as &amp;quot;the battle system.&amp;quot; It is a turn-based system resembling that of Final Fantasy, and employs an algorithm in determining the order on a basis of speed. The system is functional and is in the final development stages before being released into the public.&lt;br /&gt;
=== Outfit (&amp;quot;Taylor&amp;quot;) System ===&lt;br /&gt;
A very interesting aspect of the game is the ability to change one's outfit using the Outfit tool, which allows you to preview, save, and delete any outfit that one might want to use. The server does not use the old characteristic-changing method found in other servers' &amp;quot;Taylor&amp;quot; systems, but rather displays it graphically.&lt;br /&gt;
=== Mouse-Control ===&lt;br /&gt;
'''Zenkou''' is revolutionary in that most of the server can be controlled by mouse click-and-drag. There is not a server out there that can brag the same mouse-control as Zenkou.&lt;br /&gt;
&lt;br /&gt;
== Current Staff ==&lt;br /&gt;
=== Management ===&lt;br /&gt;
Current Owner and Manager: Zeon &amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: MASTERCOLA &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Current Co-Manager: pfa &amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: Tolnaftate2004&lt;br /&gt;
=== Administration ===&lt;br /&gt;
&lt;br /&gt;
Name: Mystic &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: MysticX2X &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Name: Kirai&lt;br /&gt;
Account: -Ching &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
One cannot apply for this position, rather, they must be promoted from a lower development or player-relations position.&lt;br /&gt;
&lt;br /&gt;
=== NAT / Scripting Team ===&lt;br /&gt;
Current Head Scripter: pfa &amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: Tolnaftate2004 &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: none &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
*One must have a good knowledge of the following:&lt;br /&gt;
** Scripting, GS2 required&lt;br /&gt;
** RC and NC, though we're not particularly stingy about this&lt;br /&gt;
** Graal's internal workings, or good-enough theories thereof&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
=== LAT / Levels Team ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: Mystic &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: MysticX2X &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* One must have a good knowledge of the following:&lt;br /&gt;
** The tileset, particularly, Zenkou's&lt;br /&gt;
** Detailing, good, but not over-the-top&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
&lt;br /&gt;
=== Gani Team ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: Hachi &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: Bl0nkt &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* One must have a good knowledge of the following:&lt;br /&gt;
** Graalshop, both movie and standard development&lt;br /&gt;
** .gani text-file syntax&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
=== GAT / Graphics Team ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: - &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: KMashaneyK &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* One must have a good knowledge of the following:&lt;br /&gt;
** A graphics program of your choice&lt;br /&gt;
** The zenkou style of graphics&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
=== GP / Z-Police ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: none &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: none-Ching &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* Must not be power-hungry, and must not have the tendency to abuse power&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
=== FAQ / Z-FAQ ===&lt;br /&gt;
Current Head Designer: none&amp;lt;br /&amp;gt;&lt;br /&gt;
Account name: none &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Others ''' &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
Name: Nythe &amp;lt;br /&amp;gt;&lt;br /&gt;
Account: Akoalin &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
''' Applying ''' &amp;lt;br /&amp;gt;&lt;br /&gt;
* Must not be power-hungry, and must not have the tendency to abuse power&lt;br /&gt;
* Must have a good knowledge of the following:&lt;br /&gt;
** Geography and location of buildings, and other landmarks&lt;br /&gt;
** Use and effects of weapons&lt;br /&gt;
** Storyline and gameplay&lt;br /&gt;
* Must be good-humored and good-natured&lt;br /&gt;
* Must have an interest in the project - please do not apply if your loyalties lie elsewhere&lt;br /&gt;
&lt;br /&gt;
To apply, contact Haro, Zeon or the head of the department you wish to join.&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/Constants&amp;diff=9864</id>
		<title>Creation/Dev/GScript/Constants</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/Constants&amp;diff=9864"/>
		<updated>2007-09-07T07:43:26Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: Sections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As one might be able to deduce, a '''constant''' has a single value and will retain that value as long as that constant exists. A constant is ''not'' a variable for one very important reason: it's value is not variable!&lt;br /&gt;
&lt;br /&gt;
A constant is only accessible in the script where you have defined it, they&lt;br /&gt;
are not shared between the server-side and client-side parts either.&lt;br /&gt;
&lt;br /&gt;
== Constants defined by keyword 'const' ==&lt;br /&gt;
&lt;br /&gt;
 const intVar = temp.val; // will not work, temp.val is not constant&lt;br /&gt;
 const intVar = 3;&lt;br /&gt;
 intVar = 4; // will not work&lt;br /&gt;
 player.chat = intVar; // displays 3&lt;br /&gt;
&lt;br /&gt;
The value of the constant cannot change even in conjunction with the use of the &amp;quot;=&amp;quot; operator. This is the power of a constant. However, player.variables cannot be defined as a constant (client(r).variables, too, possibly). Const only allows literals when assigning values.&lt;br /&gt;
&lt;br /&gt;
A constant may be used most likely to keep a variable that is available to any script from changing its value due to any foreign script interfering. It can also be used to give some cryptic value an easy to understand name, and by putting the const definition at the beginning of the script it can easily be configured.&lt;br /&gt;
&lt;br /&gt;
== Enumeration ==&lt;br /&gt;
&lt;br /&gt;
A special type of constants are enumerators:&lt;br /&gt;
&lt;br /&gt;
 enum {&lt;br /&gt;
   enum0,&lt;br /&gt;
   enum1,&lt;br /&gt;
   enum2&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
When you put names in an enumerator list, then it is automatically generating constants by enumarating the names - enum0 will be zero, enum1 will be 1, enum2 will be 2.&lt;br /&gt;
&lt;br /&gt;
 enum modes {&lt;br /&gt;
   IDLE,&lt;br /&gt;
   WALK&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
By giving a name to the enumerator list you can group enumerations - you can access the constants by modes.IDLE and modes.WALK. &lt;br /&gt;
&lt;br /&gt;
 enum {&lt;br /&gt;
   enum10 = 10,&lt;br /&gt;
   enum11,&lt;br /&gt;
   enumstr = &amp;quot;string&amp;quot;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
You can assign values to the constants like you do for normal constants. It will automatically enumerate the following entries by adding one to the last value, so enum11 will be 11. You can also assign a string value.&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/GScript/Constants&amp;diff=9863</id>
		<title>Creation/Dev/GScript/Constants</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/GScript/Constants&amp;diff=9863"/>
		<updated>2007-09-07T07:38:29Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: Spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As one might be able to deduce, a '''constant''' has a single value and will retain that value as long as that constant exists. A constant is ''not'' a variable for one very important reason: it's value is not variable!&lt;br /&gt;
&lt;br /&gt;
 const intVar = 3;&lt;br /&gt;
 intVar = 4; // will not work&lt;br /&gt;
 player.chat = intVar; // displays 3&lt;br /&gt;
&lt;br /&gt;
The value of the constant cannot change even in conjunction with the use of the &amp;quot;=&amp;quot; operator. This is the power of a constant. However, player.variables cannot be defined as a constant (client(r).variables, too, possibly).&lt;br /&gt;
&lt;br /&gt;
A constant may be used most likely to keep a variable that is available to any script from changing its value due to any foreign script interfering. It can also be used to give some cryptic value an easy to understand name, and by putting the const definition at the beginning of the script it can easily be configured.&lt;br /&gt;
&lt;br /&gt;
A constant is only accessible in the script where you have defined it, they&lt;br /&gt;
are not shared between the server-side and client-side parts either.&lt;br /&gt;
&lt;br /&gt;
A special type of constants are enumerators:&lt;br /&gt;
&lt;br /&gt;
 enum {&lt;br /&gt;
   enum0,&lt;br /&gt;
   enum1,&lt;br /&gt;
   enum2&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
When you put names in an enumerator list, then it is automatically generating constants by enumarating the names - enum0 will be zero, enum1 will be 1, enum2 will be 2.&lt;br /&gt;
&lt;br /&gt;
 enum modes {&lt;br /&gt;
   IDLE,&lt;br /&gt;
   WALK&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
By giving a name to the enumerator list you can group enumerations - you can access the constants by modes.IDLE and modes.WALK. &lt;br /&gt;
&lt;br /&gt;
 enum {&lt;br /&gt;
   enum10 = 10,&lt;br /&gt;
   enum11,&lt;br /&gt;
   enumstr = &amp;quot;string&amp;quot;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
You can assign values to the constants like you do for normal constants. It will automatically enumerate the following entries by adding one to the last value, so enum11 will be 11. You can also assign a string value.&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Template:Code&amp;diff=9862</id>
		<title>Template:Code</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Template:Code&amp;diff=9862"/>
		<updated>2007-09-07T07:34:39Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{| style=&amp;quot;border: 1px dashed #000000; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|&amp;lt;font face=&amp;quot;Courier New,monospace&amp;quot; color=&amp;quot;DimGrey&amp;quot;&amp;gt;{{{1}}}&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;This is for new documentation!&lt;br /&gt;
&lt;br /&gt;
Usage:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{code|1=something}}&amp;lt;/nowiki&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Template:Code&amp;diff=9842</id>
		<title>Template:Code</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Template:Code&amp;diff=9842"/>
		<updated>2007-09-04T16:50:33Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: Hack for linux/mac without courier new font&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{| style=&amp;quot;border: 1px dashed #000000; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|&amp;lt;font face=&amp;quot;Courier New,monospace&amp;quot; color=&amp;quot;DimGrey&amp;quot; size=&amp;quot;10px&amp;quot;&amp;gt;{{{1}}}&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;This is for new documentation!&lt;br /&gt;
&lt;br /&gt;
Usage:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{code|1=something}}&amp;lt;/nowiki&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Template:Code&amp;diff=9841</id>
		<title>Template:Code</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Template:Code&amp;diff=9841"/>
		<updated>2007-09-04T16:46:02Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{| style=&amp;quot;border: 0px solid #000000; border-collapse: collapse; font-family: Courier New,fixed; font-size: 10px; color: DimGrey;&amp;quot;&lt;br /&gt;
|{{{1}}}&lt;br /&gt;
|}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;This is for new documentation!&lt;br /&gt;
&lt;br /&gt;
Usage:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{code|1=something}}&amp;lt;/nowiki&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| font-family:monospace&lt;br /&gt;
| blah&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Matrix&amp;diff=9840</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Matrix&amp;diff=9840"/>
		<updated>2007-09-04T16:43:04Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''matrix''' (''pl.'' matrices) is a list of numbers, generally who have a relationship between them, that are ordered in a type of mathematical array. A matrix, m, may be written as either [m], or (m) in mathematics, where m is a placeholder for the numbers in the matrix.&lt;br /&gt;
&lt;br /&gt;
== Reading a Matrix ==&lt;br /&gt;
Typically in math, a matrix is ordered in rows and columns, which are counted by increasing i and j respectively. One can think of a matrix as a 2-dimensional array where each object in the 1st dimension holds an array of numbers in that row.&lt;br /&gt;
&lt;br /&gt;
An entry at i=2 and j=3 is noted by either M[2,3] or m&amp;lt;sub&amp;gt;2,3&amp;lt;/sub&amp;gt;. These numbers are important for some modifications involving these matrices.&lt;br /&gt;
&lt;br /&gt;
In GraalScript, however, matrices are used to perform calculations involving objects that rotate, move, or are scaled. The first three elements in such an array are for position:&lt;br /&gt;
&lt;br /&gt;
{{code|1=&lt;br /&gt;
x = m[0]; y = m[1]; z = m[2];&lt;br /&gt;
}}&lt;br /&gt;
The following three elements are for rotation:&lt;br /&gt;
{{code|1=&lt;br /&gt;
eulerrotation = m.subarray(3,3);&lt;br /&gt;
}}&lt;br /&gt;
The final element is angle in degrees:&lt;br /&gt;
{{code|1=&lt;br /&gt;
temp.angle = degtorad(m[6]);&lt;br /&gt;
}}&lt;br /&gt;
== Demystifying Matrices in GraalScript ==&lt;br /&gt;
If you have ever tested any of the matrix functions built into GraalScript, you may be lost as to where the return value comes from. Well, luckily there are some adept enough with math to understand these fu {{code|1=nctions. These are their findings.&lt;br /&gt;
&lt;br /&gt;
=== matrixcreate() ===&lt;br /&gt;
Let '''v''' be a vector and '''a''' consisting of a vector and a scalar.&lt;br /&gt;
&lt;br /&gt;
==== Usage ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
strMatrix = matrixcreate(v,a);&lt;br /&gt;
}}&lt;br /&gt;
Where v describes the translation (position) and 'a' describes the rotation (rotation axis and angle).&lt;br /&gt;
&lt;br /&gt;
==== Return Value ====&lt;br /&gt;
Returns a matrix array of length 7 (this will be explained later).&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
temp.matrix = matrixcreate({1,1,1},{1,7,1,1});&lt;br /&gt;
// This will return 1,1,1,0.140028,0.980196058,0.140028,7.14595223&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== The Math Behind the Function ====&lt;br /&gt;
The first three numbers of the return value should be rather familiar. It is the vector you passed to the function. The other four seem to come out of nowhere. However, there is a method to this madness. The first of these three are merely a property of angles. Because of the [[Dot Product]] of vectors, we are able to calculate the cosine of the angle between two vectors. Well, we have actually created a new vector in this code!&lt;br /&gt;
&lt;br /&gt;
As defined in [[Vectors]], we know that there are three unit vectors that lay on the x, y, and z axes. These vectors have been given the letters '''i''', '''j''', and '''k''', respectively. The first value defined in the &amp;quot;rotation&amp;quot; is multiplied to '''i''', the second to '''j''', and so forth, and this makes a new vector. However, this still does not tell us why we have these numbers returned to us.&lt;br /&gt;
&lt;br /&gt;
From the definition of the dot product, we know that&lt;br /&gt;
 cos(&amp;amp;theta;) = u&amp;amp;#0149;v/(|u||v|)&lt;br /&gt;
The first three numbers returned to us are the cosine of the angles between the new vector (in this case, &amp;lt;1,7,1&amp;gt;) and each of our unit vectors. For example:&lt;br /&gt;
 cos(&amp;amp;alpha;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;1,0,0&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;1,0,0&amp;gt;|) = 1/&amp;amp;radic;51 = 0.1400280084&lt;br /&gt;
 cos(&amp;amp;beta;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;0,1,0&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;0,1,0&amp;gt;|) = 7/&amp;amp;radic;51 = 0.9801960588&lt;br /&gt;
 cos(&amp;amp;gamma;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;0,0,1&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;0,0,1&amp;gt;|) = 1/&amp;amp;radic;51 = 0.1400280084&lt;br /&gt;
&lt;br /&gt;
''There is an evident difference between the values given here and the return value. A computer cannot calculate cosine on its own. It merely uses a method of estimation.''&lt;br /&gt;
&lt;br /&gt;
 cos(&amp;amp;alpha;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + cos(&amp;amp;beta;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + cos(&amp;amp;gamma;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = 1 &amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=&amp;quot;33%&amp;quot; noshade=&amp;quot;noshade&amp;quot;&amp;gt;&lt;br /&gt;
(1) The returned values are accurate within &amp;amp;plusmn;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So far, we have 6 of 7 figured out. The last is the simplest of them all. Plugging the new vector into vectorlen() or using &amp;amp;radic;(x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) returns it's magnitude. This, multiplied by the fourth number of the second parameter, is the last of the returned values (and as far as anyone can tell the vector passed to the function has no bearing on the return value).&lt;br /&gt;
&lt;br /&gt;
=== matrixcreatefromeuler() ===&lt;br /&gt;
Let '''r''' be an array describing rotation, {&amp;amp;alpha;,&amp;amp;beta;,&amp;amp;gamma;}.&lt;br /&gt;
&lt;br /&gt;
==== Usage ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
strMatrix = matrixcreatefromeuler(r);&lt;br /&gt;
}}&lt;br /&gt;
Where r describes the rotation (rotation axis and angle).&lt;br /&gt;
&lt;br /&gt;
==== Return Value ====&lt;br /&gt;
Returns a matrix array of length 7.&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
temp.matrix = matrixcreatefromeuler({pi/2,0,pi/2});&lt;br /&gt;
// This will return 0,0,0,-0.577350258,-0.577350258,-0.577350258,119.999976018&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== The Math Behind the Function ====&lt;br /&gt;
'''Coming soon!'''&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=User:Tolnaftate2004&amp;diff=9526</id>
		<title>User:Tolnaftate2004</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=User:Tolnaftate2004&amp;diff=9526"/>
		<updated>2007-07-08T23:18:18Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Contributions===&lt;br /&gt;
====Documentation====&lt;br /&gt;
* [[Creation/Dev/GScript/Constants|Constants]]&lt;br /&gt;
* [[Creation/Dev/GScript/Changeimgpart|Changeimgpart]]&lt;br /&gt;
* [[Creation/Dev/GScript/Requesthttp|Requesthttp]]&lt;br /&gt;
* [[Euler Rotation]]&lt;br /&gt;
* [[Polar Rotation]]&lt;br /&gt;
* [[Vectors]]&lt;br /&gt;
* [[Matrix]]&lt;br /&gt;
* [[Dot Product]]&lt;br /&gt;
* [[Cross Product]]&lt;br /&gt;
&lt;br /&gt;
====Templates====&lt;br /&gt;
*[[Template:Graycourier|Graycourier]]&lt;br /&gt;
*[[Template:Code|Code]]&lt;br /&gt;
*[[Template:Doctitle|Doctitle]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Euler_Rotation&amp;diff=8235</id>
		<title>Euler Rotation</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Euler_Rotation&amp;diff=8235"/>
		<updated>2007-04-21T23:15:24Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: Note: using MATLAB notation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definitions ==&lt;br /&gt;
Euler - Pronounced Oiler; discovered that as 1 is continuously compounded, it reaches a number, ''e''. However, Euler rotation is taking a 3-dimensional axes set and rotating them about the z-axis followed by a forward or backward rotation to create a new axes set.&lt;br /&gt;
For objects that inherit the property 'eulerrotation', the format is supposedly &amp;quot;&amp;amp;Delta;''&amp;amp;alpha;'' &amp;amp;Delta;''&amp;amp;beta;'' &amp;amp;Delta;''&amp;amp;gamma;''&amp;quot;. Read further for a better explanation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;amp;theta;'': greek letter ''theta''&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;phi;'': greek letter ''phi''&amp;lt;br /&amp;gt;&lt;br /&gt;
''theta'' and ''phi'' are commonly used in trigonometry for angles (but phi is most commonly used as a constant: 1.618...).&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;alpha;'': 1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; greek letter ''alpha''. For our purposes, it will represent The angle between the original x axis and the normal vector&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;beta;'': 2&amp;lt;sup&amp;gt;nd&amp;lt;/sup&amp;gt; greek letter ''beta''. For our purposes, it will represent the forward or backward &amp;quot;tilt&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;gamma;'': 3&amp;lt;sup&amp;gt;rd&amp;lt;/sup&amp;gt; greek letter ''gamma''. For our purposes, it will represent the angle between the normal vector&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; and the new x axis.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Therefore, images and text could be rotated, something that could not be done before, so that said image or text would have a three-dimensional effect. If all said is true, eulerrotation = &amp;quot;0 -pi/3 0&amp;quot;; for text would project it in a Star Wars-like fashion.&lt;br /&gt;
&lt;br /&gt;
 sin(''&amp;amp;theta;'') = y / ''r'' (&amp;amp;Delta;y of a point from the center on a circle with radius ''r'')&lt;br /&gt;
 cos(''&amp;amp;theta;'') = x / ''r'' (&amp;amp;Delta;x of a point from the center on a circle with radius ''r'')&lt;br /&gt;
 sin(''&amp;amp;theta;'' &amp;amp;plusmn; ''&amp;amp;phi;'') = sin(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') &amp;amp;plusmn; cos(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
 -cos(''&amp;amp;theta;'' &amp;amp;plusmn; ''&amp;amp;phi;'') = -cos(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') &amp;amp;plusmn; sin(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
&lt;br /&gt;
In addition (not really useful):&lt;br /&gt;
 tan(''&amp;amp;theta;'') = sin(''&amp;amp;theta;'') / cos(''&amp;amp;theta;'')&lt;br /&gt;
 cot(''&amp;amp;theta;'') = cos(''&amp;amp;theta;'') / sin(''&amp;amp;theta;'')&lt;br /&gt;
 sec(''&amp;amp;theta;'') = 1 / cos(''&amp;amp;theta;'')&lt;br /&gt;
 csc(''&amp;amp;theta;'') = 1 / sin(''&amp;amp;theta;'')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=&amp;quot;33%&amp;quot; NOSHADE&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; The normal vector is the vector normal to the original z and the new z axes. This can be calculated through [[Cross Product|cross product]].&lt;br /&gt;
&lt;br /&gt;
== Rotation Matrices ==&lt;br /&gt;
'''Note:''' The following example uses MATLAB notation for the matrix transformation.&lt;br /&gt;
 [cos(''&amp;amp;gamma;'') sin(''&amp;amp;gamma;'') 0; -sin(''&amp;amp;gamma;'') cos(''&amp;amp;gamma;'') 0; 0 0 1] * ...&lt;br /&gt;
 [1 0 0; 0 cos(''&amp;amp;alpha;'') sin(''&amp;amp;alpha;''); 0 -sin(''&amp;amp;alpha;'') cos(''&amp;amp;alpha;'')] * ...&lt;br /&gt;
 [cos(''&amp;amp;alpha;'') sin(''&amp;amp;alpha;'') 0; -sin(''&amp;amp;alpha;'') cos(''&amp;amp;alpha;'') 0; 0 0 1] * ...&lt;br /&gt;
 ([x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;]') = [x y z]'&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Euler_Rotation&amp;diff=8234</id>
		<title>Euler Rotation</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Euler_Rotation&amp;diff=8234"/>
		<updated>2007-04-21T23:14:19Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: True Euler Rotation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definitions ==&lt;br /&gt;
Euler - Pronounced Oiler; discovered that as 1 is continuously compounded, it reaches a number, ''e''. However, Euler rotation is taking a 3-dimensional axes set and rotating them about the z-axis followed by a forward or backward rotation to create a new axes set.&lt;br /&gt;
For objects that inherit the property 'eulerrotation', the format is supposedly &amp;quot;&amp;amp;Delta;''&amp;amp;alpha;'' &amp;amp;Delta;''&amp;amp;beta;'' &amp;amp;Delta;''&amp;amp;gamma;''&amp;quot;. Read further for a better explanation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;amp;theta;'': greek letter ''theta''&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;phi;'': greek letter ''phi''&amp;lt;br /&amp;gt;&lt;br /&gt;
''theta'' and ''phi'' are commonly used in trigonometry for angles (but phi is most commonly used as a constant: 1.618...).&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;alpha;'': 1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; greek letter ''alpha''. For our purposes, it will represent The angle between the original x axis and the normal vector&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;beta;'': 2&amp;lt;sup&amp;gt;nd&amp;lt;/sup&amp;gt; greek letter ''beta''. For our purposes, it will represent the forward or backward &amp;quot;tilt&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;gamma;'': 3&amp;lt;sup&amp;gt;rd&amp;lt;/sup&amp;gt; greek letter ''gamma''. For our purposes, it will represent the angle between the normal vector&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; and the new x axis.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Therefore, images and text could be rotated, something that could not be done before, so that said image or text would have a three-dimensional effect. If all said is true, eulerrotation = &amp;quot;0 -pi/3 0&amp;quot;; for text would project it in a Star Wars-like fashion.&lt;br /&gt;
&lt;br /&gt;
 sin(''&amp;amp;theta;'') = y / ''r'' (&amp;amp;Delta;y of a point from the center on a circle with radius ''r'')&lt;br /&gt;
 cos(''&amp;amp;theta;'') = x / ''r'' (&amp;amp;Delta;x of a point from the center on a circle with radius ''r'')&lt;br /&gt;
 sin(''&amp;amp;theta;'' &amp;amp;plusmn; ''&amp;amp;phi;'') = sin(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') &amp;amp;plusmn; cos(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
 -cos(''&amp;amp;theta;'' &amp;amp;plusmn; ''&amp;amp;phi;'') = -cos(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') &amp;amp;plusmn; sin(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
&lt;br /&gt;
In addition (not really useful):&lt;br /&gt;
 tan(''&amp;amp;theta;'') = sin(''&amp;amp;theta;'') / cos(''&amp;amp;theta;'')&lt;br /&gt;
 cot(''&amp;amp;theta;'') = cos(''&amp;amp;theta;'') / sin(''&amp;amp;theta;'')&lt;br /&gt;
 sec(''&amp;amp;theta;'') = 1 / cos(''&amp;amp;theta;'')&lt;br /&gt;
 csc(''&amp;amp;theta;'') = 1 / sin(''&amp;amp;theta;'')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=&amp;quot;33%&amp;quot; NOSHADE&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; The normal vector is the vector normal to the original z and the new z axes. This can be calculated through [[Cross Product|cross product]].&lt;br /&gt;
&lt;br /&gt;
== Rotation Matrices ==&lt;br /&gt;
 [cos(''&amp;amp;gamma;'') sin(''&amp;amp;gamma;'') 0; -sin(''&amp;amp;gamma;'') cos(''&amp;amp;gamma;'') 0; 0 0 1] * ...&lt;br /&gt;
 [1 0 0; 0 cos(''&amp;amp;alpha;'') sin(''&amp;amp;alpha;''); 0 -sin(''&amp;amp;alpha;'') cos(''&amp;amp;alpha;'')] * ...&lt;br /&gt;
 [cos(''&amp;amp;alpha;'') sin(''&amp;amp;alpha;'') 0; -sin(''&amp;amp;alpha;'') cos(''&amp;amp;alpha;'') 0; 0 0 1] * ...&lt;br /&gt;
 ([x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;]') = [x y z]'&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Polar_Rotation&amp;diff=8233</id>
		<title>Polar Rotation</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Polar_Rotation&amp;diff=8233"/>
		<updated>2007-04-21T22:59:27Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: This is Polar Rotation. Euler Rotation is a bit more basic. My mistake. I will fix it soon.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Definitions ==&lt;br /&gt;
''&amp;amp;theta;'': greek letter ''theta''&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;phi;'': greek letter ''phi''&amp;lt;br /&amp;gt;&lt;br /&gt;
''theta'' and ''phi'' are commonly used in trigonometry for angles (but phi is most commonly used as a constant: 1.618...).&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;alpha;'': 1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; greek letter ''alpha''. For our purposes, it will represent rotation about the y-axis.&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;beta;'': 2&amp;lt;sup&amp;gt;nd&amp;lt;/sup&amp;gt; greek letter ''beta''. For our purposes, it will represent rotation about the x-axis.&amp;lt;br /&amp;gt;&lt;br /&gt;
''&amp;amp;gamma;'': 3&amp;lt;sup&amp;gt;rd&amp;lt;/sup&amp;gt; greek letter ''gamma''. For our purposes, it will represent rotation about the z-axis.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 sin(''&amp;amp;theta;'') = y / ''r'' (&amp;amp;Delta;y of a point from the center on a circle with radius ''r'')&lt;br /&gt;
 cos(''&amp;amp;theta;'') = x / ''r'' (&amp;amp;Delta;x of a point from the center on a circle with radius ''r'')&lt;br /&gt;
 sin(''&amp;amp;theta;'' &amp;amp;plusmn; ''&amp;amp;phi;'') = sin(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') &amp;amp;plusmn; cos(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
 -cos(''&amp;amp;theta;'' &amp;amp;plusmn; ''&amp;amp;phi;'') = -cos(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') &amp;amp;plusmn; sin(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
&lt;br /&gt;
In addition (not really useful):&lt;br /&gt;
 tan(''&amp;amp;theta;'') = sin(''&amp;amp;theta;'') / cos(''&amp;amp;theta;'')&lt;br /&gt;
 cot(''&amp;amp;theta;'') = cos(''&amp;amp;theta;'') / sin(''&amp;amp;theta;'')&lt;br /&gt;
 sec(''&amp;amp;theta;'') = 1 / cos(''&amp;amp;theta;'')&lt;br /&gt;
 csc(''&amp;amp;theta;'') = 1 / sin(''&amp;amp;theta;'')&lt;br /&gt;
&lt;br /&gt;
== Deriving the 2D equations ==&lt;br /&gt;
&lt;br /&gt;
Simply:&amp;lt;br /&amp;gt;&lt;br /&gt;
 x² + y² = ''r''²; the basic equation of a circle with center (0,0)&lt;br /&gt;
 x² + y² + z² = ''r''²; the basic equation of a sphere with center (0,0,0)&lt;br /&gt;
 sin²(''&amp;amp;theta;'') + cos²(''&amp;amp;theta;'') = 1&lt;br /&gt;
&lt;br /&gt;
 arctan(y/x) = ''&amp;amp;theta;''; arctan() being the inverse of tangent&lt;br /&gt;
 tan(arctan(y/x)) = tan(''&amp;amp;theta;'')&lt;br /&gt;
 y/x = tan(''&amp;amp;theta;'')&lt;br /&gt;
 y/x = ''r'' sin(''&amp;amp;theta;'') / ''r'' cos(''&amp;amp;theta;'')&lt;br /&gt;
&lt;br /&gt;
Thus,&amp;lt;br /&amp;gt;&lt;br /&gt;
 ''r'' sin(''&amp;amp;theta;'') = y&lt;br /&gt;
 ''r'' cos(''&amp;amp;theta;'') = x&lt;br /&gt;
&lt;br /&gt;
Likewise,&lt;br /&gt;
 sin(''&amp;amp;theta;'') = y / ''r''&lt;br /&gt;
 cos(''&amp;amp;theta;'') = x / ''r''&lt;br /&gt;
&lt;br /&gt;
Plugging into the circle equation, we get&lt;br /&gt;
 ''r''² = ''r''² cos²(''&amp;amp;theta;'') + ''r''² sin²(''&amp;amp;theta;'')&lt;br /&gt;
&lt;br /&gt;
Compare:&lt;br /&gt;
 &amp;amp;radic;(a² + b²) = c (the distance formula)&lt;br /&gt;
 x² + y² = ''r''² (established as the equation of a circle)&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;radic;(a² + b²) = c&lt;br /&gt;
 ( &amp;amp;radic;(a² + b²) )² = c²&lt;br /&gt;
 a² + b² = c²&lt;br /&gt;
&lt;br /&gt;
== Rotation on a single plane ==&lt;br /&gt;
&lt;br /&gt;
Think of a circle with some radius, ''r'', and a point somewhere on it. This circle is a two-dimensional figure on the xy [or y(x)] plane. The angle between 0º and the point is ''&amp;amp;theta;''. &amp;lt;br /&amp;gt;&lt;br /&gt;
Trigonometric functions sine and cosine are specific to determine x and y values according the the angle passed as its parameter. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To keep things simple, we will rotate about the (invisible) z-axis. In doing so, x and y are changing. Any z values that a point may have remain constant. ''&amp;amp;phi;'' is a second angle, representing the amount of rotation.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 y = ''r'' sin(''&amp;amp;theta;''), so,&lt;br /&gt;
 y = ''r'' sin(''&amp;amp;theta;'' + ''&amp;amp;phi;'')&lt;br /&gt;
 y = ''r'' ( sin(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') + cos(''&amp;amp;theta;'') sin(''&amp;amp;phi;'') )&lt;br /&gt;
 y = ''r'' sin(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') + ''r'' cos(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
Using substitutions form above, we can simplify to&amp;lt;br /&amp;gt;&lt;br /&gt;
 y = y cos(''&amp;amp;phi;'') + x sin(''&amp;amp;phi;'')&lt;br /&gt;
&lt;br /&gt;
Alternatively,&amp;lt;br /&amp;gt;&lt;br /&gt;
 x = ''r'' cos(''&amp;amp;theta;'')&lt;br /&gt;
 x = ''r'' cos(''&amp;amp;theta;'' + ''&amp;amp;phi;'')&lt;br /&gt;
 x = ''r'' ( cos(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') - sin(''&amp;amp;theta;'') sin(''&amp;amp;phi;'') )&lt;br /&gt;
 x = ''r'' cos(''&amp;amp;theta;'') cos(''&amp;amp;phi;'') - ''r'' sin(''&amp;amp;theta;'') sin(''&amp;amp;phi;'')&lt;br /&gt;
 x = x cos(''&amp;amp;phi;'') - y sin(''&amp;amp;phi;'')&lt;br /&gt;
&lt;br /&gt;
== Deriving the 3D equations ==&lt;br /&gt;
[[Image:Pointonsphere.png|thumb|right|This image shows how to determine the cartesian coordinates of a point on a sphere in terms of sine and cosine. The point is at the upper tip of the green triangle.]]&lt;br /&gt;
As above, we can change the sphere's equation into a series of distance formulas&lt;br /&gt;
 x² + y² + z² = ''r''²&lt;br /&gt;
 ( &amp;amp;radic;(x² + y²) )² + z² = ''r''²	 &lt;br /&gt;
 ( &amp;amp;radic;( ( &amp;amp;radic;(x² + y²) )² + z² ) )² = ''r''²&lt;br /&gt;
 &amp;amp;radic;( x² + y² + z² ) = ''r''&lt;br /&gt;
 ''r''&amp;amp;radic;( ( sin²(''&amp;amp;theta;'') + cos²(''&amp;amp;theta;'') ) sin²(''&amp;amp;phi;'') + cos²(''&amp;amp;phi;'') ) = ''r''&lt;br /&gt;
 &amp;amp;radic;( ( &amp;amp;radic;( sin²(''&amp;amp;theta;'') + cos²(''&amp;amp;theta;'') ) )² sin²(''&amp;amp;phi;'') + cos²(''&amp;amp;phi;'') ) = 1&lt;br /&gt;
 ( sin²(''&amp;amp;theta;'') + cos²(''&amp;amp;theta;'') )² sin²(''&amp;amp;phi;'') + cos²(''&amp;amp;phi;'') = 1&lt;br /&gt;
 sin²(''&amp;amp;theta;'') sin²(''&amp;amp;phi;'') + cos²(''&amp;amp;theta;'') sin²(''&amp;amp;phi;'') + cos²(''&amp;amp;phi;'') = 1&lt;br /&gt;
&lt;br /&gt;
Comparing with the original equation we can split it up and get individual equations for x,y, and z.&lt;br /&gt;
 y = sin(''&amp;amp;theta;'') sin(''&amp;amp;phi;'') &amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
 x = cos(''&amp;amp;theta;'') sin(''&amp;amp;phi;'') &amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
 z = cos(''&amp;amp;phi;'')&lt;br /&gt;
&lt;br /&gt;
The equation is&lt;br /&gt;
 ( sin²(''&amp;amp;theta;'') + cos²(''&amp;amp;theta;'') ) ( sin²(''&amp;amp;phi;'') + cos²(''&amp;amp;phi;'') ) = 1&lt;br /&gt;
&lt;br /&gt;
So, why doesn't the ( sin²(''&amp;amp;theta;'') + cos²(''&amp;amp;theta;'') ) distribute to the cos²(''&amp;amp;phi;'')? If you'll recall, ( sin²(''&amp;amp;theta;'') + cos²(''&amp;amp;theta;'') ) = 1, so it ''could be'' that it was. But also, it was left out so that there were only 3 terms as opposed to 4 (We only want three: x, y, and z!).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=&amp;quot;33%&amp;quot; NOSHADE&amp;gt;&lt;br /&gt;
&amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt; The portion used contained the original x or y equation, so was split up to match, but it doesn't matter in the end.&lt;br /&gt;
&lt;br /&gt;
== Rotation on three planes ==&lt;br /&gt;
&lt;br /&gt;
Now in three dimensions:&amp;lt;br /&amp;gt;&lt;br /&gt;
Imagine three planes that intersect: xy [y(x)], yz [z(y)], zx [x(z)] (using these names helps remember the order of calculations if re-writing the script... you'll see). &amp;lt;br /&amp;gt;&lt;br /&gt;
For this, instead of merely one rotation angle, we will need three (''&amp;amp;alpha;'', ''&amp;amp;beta;'', and ''&amp;amp;gamma;''). Also, we will need to replace the simple x and y with their three-dimensional counterparts and add a z (To begin, ''f'' = ''f''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, where ''f'' is a function, x, y, or z).&amp;lt;br /&amp;gt;&lt;br /&gt;
 x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = ''r'' sin(''&amp;amp;alpha;'') cos(''&amp;amp;beta;'')&lt;br /&gt;
 y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = ''r'' sin(''&amp;amp;alpha;'') sin(''&amp;amp;beta;'')&lt;br /&gt;
 z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = ''r'' cos(''&amp;amp;alpha;'')&lt;br /&gt;
&lt;br /&gt;
About the x-axis:&amp;lt;br /&amp;gt;&lt;br /&gt;
Finally, rotate our three planes to replace z with x, y with z, and x with y.&amp;lt;br /&amp;gt;&lt;br /&gt;
 nz = z cos(''&amp;amp;beta;'') + y sin(''&amp;amp;beta;'')&lt;br /&gt;
 ny = y cos(''&amp;amp;beta;'') - z sin(''&amp;amp;beta;'')&lt;br /&gt;
Note how as the axes are switched, the x, y, and z or replaced respectively from the 2D rotation equations!&lt;br /&gt;
&lt;br /&gt;
We then replace y with ny and z with nz. So in a sense,&amp;lt;br /&amp;gt;&lt;br /&gt;
 z = nz&lt;br /&gt;
 y = ny&lt;br /&gt;
&lt;br /&gt;
About the y-axis:&amp;lt;br /&amp;gt;&lt;br /&gt;
Now imagine the 3 planes rotate forward 90º and 90º to the left. The z has taken the place of the x, x in the stead of y, and y in that of z. The idea of this rotation is now just like that above, but y is constant.&amp;lt;br /&amp;gt;&lt;br /&gt;
 nx = x cos(''&amp;amp;alpha;'') + z sin(''&amp;amp;alpha;'')&lt;br /&gt;
 nz = z cos(''&amp;amp;alpha;'') - x sin(''&amp;amp;alpha;'')&lt;br /&gt;
&lt;br /&gt;
 x = nx&lt;br /&gt;
&lt;br /&gt;
The two-dimensions calculations work for rotations about the z-axis.&amp;lt;br /&amp;gt;&lt;br /&gt;
About the z-axis:&amp;lt;br /&amp;gt;&lt;br /&gt;
 ny = y cos(''&amp;amp;gamma;'') + x sin(''&amp;amp;gamma;'')&lt;br /&gt;
 nx = x cos(''&amp;amp;gamma;'') - y sin(''&amp;amp;gamma;'')&lt;br /&gt;
&lt;br /&gt;
We expand to simplify:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 x = x cos(''&amp;amp;gamma;'') - y sin(''&amp;amp;gamma;'')&lt;br /&gt;
 x = ( x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;alpha;'') + ( z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') + y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') ) sin(''&amp;amp;alpha;'') ) cos(''&amp;amp;gamma;'') - ( y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') - z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') ) sin(''&amp;amp;gamma;'')&lt;br /&gt;
 x = x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;alpha;'') cos(''&amp;amp;gamma;'') + z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') sin(''&amp;amp;alpha;'') cos(''&amp;amp;gamma;'') + y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') sin(''&amp;amp;alpha;'') cos(''&amp;amp;gamma;'') - y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') sin(''&amp;amp;gamma;'') + z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') sin(''&amp;amp;gamma;'')&lt;br /&gt;
 x = x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;alpha;'') cos(''&amp;amp;gamma;'') + y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; ( sin(''&amp;amp;beta;'') sin(''&amp;amp;alpha;'') cos(''&amp;amp;gamma;'') - cos(''&amp;amp;beta;'') sin(''&amp;amp;gamma;'') ) + z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; ( cos(''&amp;amp;beta;'') sin(''&amp;amp;alpha;'') cos(''&amp;amp;gamma;'') + sin(''&amp;amp;beta;'') sin(''&amp;amp;gamma;'') )&lt;br /&gt;
&lt;br /&gt;
 y = y cos(''&amp;amp;gamma;'') + x sin(''&amp;amp;gamma;'')&lt;br /&gt;
 y = ( y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') - z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') ) cos(''&amp;amp;gamma;'') +  ( x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;alpha;'') + ( z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') + y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') ) sin(''&amp;amp;alpha;'') ) sin(''&amp;amp;gamma;'')&lt;br /&gt;
 y = y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') cos(''&amp;amp;gamma;'') - z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') cos(''&amp;amp;gamma;'') + x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;alpha;'') sin(''&amp;amp;gamma;'') + z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') sin(''&amp;amp;alpha;'') sin(''&amp;amp;gamma;'') + y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') sin(''&amp;amp;alpha;'') sin(''&amp;amp;gamma;'')&lt;br /&gt;
 y = x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;alpha;'') sin(''&amp;amp;gamma;'') + y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; ( cos(''&amp;amp;beta;'') cos(''&amp;amp;gamma;'') + sin(''&amp;amp;beta;'') sin(''&amp;amp;alpha;'') sin(''&amp;amp;gamma;'') ) + z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; ( -sin(''&amp;amp;beta;'') cos(''&amp;amp;gamma;'') + cos(''&amp;amp;beta;'') sin(''&amp;amp;alpha;'') sin(''&amp;amp;gamma;'') )&lt;br /&gt;
&lt;br /&gt;
 z = z cos(''&amp;amp;alpha;'') - x sin(''&amp;amp;alpha;'')&lt;br /&gt;
 z = ( z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') + y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') ) cos(''&amp;amp;alpha;'') - x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;alpha;'')&lt;br /&gt;
 z = z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; cos(''&amp;amp;beta;'') cos(''&amp;amp;alpha;'') + y&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;beta;'') cos(''&amp;amp;alpha;'') - x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; sin(''&amp;amp;alpha;'')&lt;br /&gt;
&lt;br /&gt;
As is, the object will display in an orthographic projection, which means that z has no bearing on the perspective. To give a perspective projection, the x and y can be distorted by some equation like:&amp;lt;br /&amp;gt;&lt;br /&gt;
 x = centerx + h / (h-z)&lt;br /&gt;
 y = centery - h / (h-z)&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[http://forums.graalonline.com/forums/showthread.php?t=54167 Amon-ra's explanation and models (continues on p. 2)]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Matrix&amp;diff=8232</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Matrix&amp;diff=8232"/>
		<updated>2007-04-21T22:27:48Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''matrix''' (''pl.'' matrices) is a list of numbers, generally who have a relationship between them, that are ordered in a type of mathematical array. A matrix, m, may be written as either [m], or (m) in mathematics, where m is a placeholder for the numbers in the matrix.&lt;br /&gt;
&lt;br /&gt;
== Reading a Matrix ==&lt;br /&gt;
A matrix is ordered in rows and columns, which are counted by increasing i and j respectively. One can think of a matrix as a 2-dimensional array where each object in the 1st dimension holds an array of numbers in that row.&lt;br /&gt;
&lt;br /&gt;
An entry at i=2 and j=3 is noted by either M[2,3] or m&amp;lt;sub&amp;gt;2,3&amp;lt;/sub&amp;gt;. These numbers are important for some modifications involving these matrices.&lt;br /&gt;
&lt;br /&gt;
== Demystifying Matrices in GraalScript ==&lt;br /&gt;
If you have ever tested any of the matrix functions built into GraalScript, you may be lost as to where the return value comes from. Well, luckily there are some adept enough with math to understand these functions. These are their findings.&lt;br /&gt;
&lt;br /&gt;
=== matrixcreate() ===&lt;br /&gt;
Let '''v''' be a vector and '''a''' consisting of a vector and a scalar.&lt;br /&gt;
&lt;br /&gt;
==== Usage ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
strMatrix = matrixcreate(v,a);&lt;br /&gt;
}}&lt;br /&gt;
Where v describes the translation (position) and 'a' describes the rotation (rotation axis and angle).&lt;br /&gt;
&lt;br /&gt;
==== Return Value ====&lt;br /&gt;
Returns a matrix array of length 7 (this will be explained later).&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
temp.matrix = matrixcreate({1,1,1},{1,7,1,1});&lt;br /&gt;
// This will return 1,1,1,0.140028,0.980196058,0.140028,7.14595223&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== The Math Behind the Function ====&lt;br /&gt;
The first three numbers of the return value should be rather familiar. It is the vector you passed to the function. The other four seem to come out of nowhere. However, there is a method to this madness. The first of these three are merely a property of angles. Because of the [[Dot Product]] of vectors, we are able to calculate the cosine of the angle between two vectors. Well, we have actually created a new vector in this code!&lt;br /&gt;
&lt;br /&gt;
As defined in [[Vectors]], we know that there are three unit vectors that lay on the x, y, and z axes. These vectors have been given the letters '''i''', '''j''', and '''k''', respectively. The first value defined in the &amp;quot;rotation&amp;quot; is multiplied to '''i''', the second to '''j''', and so forth, and this makes a new vector. However, this still does not tell us why we have these numbers returned to us.&lt;br /&gt;
&lt;br /&gt;
From the definition of the dot product, we know that&lt;br /&gt;
 cos(&amp;amp;theta;) = u&amp;amp;#0149;v/(|u||v|)&lt;br /&gt;
The first three numbers returned to us are the cosine of the angles between the new vector (in this case, &amp;lt;1,7,1&amp;gt;) and each of our unit vectors. For example:&lt;br /&gt;
 cos(&amp;amp;alpha;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;1,0,0&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;1,0,0&amp;gt;|) = 1/&amp;amp;radic;51 = 0.1400280084&lt;br /&gt;
 cos(&amp;amp;beta;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;0,1,0&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;0,1,0&amp;gt;|) = 7/&amp;amp;radic;51 = 0.9801960588&lt;br /&gt;
 cos(&amp;amp;gamma;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;0,0,1&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;0,0,1&amp;gt;|) = 1/&amp;amp;radic;51 = 0.1400280084&lt;br /&gt;
&lt;br /&gt;
''There is an evident difference between the values given here and the return value. A computer cannot calculate cosine on its own. It merely uses a method of estimation.''&lt;br /&gt;
&lt;br /&gt;
 cos(&amp;amp;alpha;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + cos(&amp;amp;beta;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + cos(&amp;amp;gamma;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = 1 &amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=&amp;quot;33%&amp;quot; noshade=&amp;quot;noshade&amp;quot;&amp;gt;&lt;br /&gt;
(1) The returned values are accurate within &amp;amp;plusmn;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So far, we have 6 of 7 figured out. The last is the simplest of them all. Plugging the new vector into vectorlen() or using &amp;amp;radic;(x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) returns it's magnitude. This, multiplied by the fourth number of the second parameter, is the last of the returned values (and as far as anyone can tell the vector passed to the function has no bearing on the return value).&lt;br /&gt;
&lt;br /&gt;
=== matrixcreatefromeuler() ===&lt;br /&gt;
Let '''r''' be an array describing rotation, {&amp;amp;alpha;,&amp;amp;beta;,&amp;amp;gamma;}.&lt;br /&gt;
&lt;br /&gt;
==== Usage ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
strMatrix = matrixcreatefromeuler(r);&lt;br /&gt;
}}&lt;br /&gt;
Where r describes the rotation (rotation axis and angle).&lt;br /&gt;
&lt;br /&gt;
==== Return Value ====&lt;br /&gt;
Returns a matrix array of length 7.&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
temp.matrix = matrixcreatefromeuler({pi/2,0,pi/2});&lt;br /&gt;
// This will return 0,0,0,-0.577350258,-0.577350258,-0.577350258,119.999976018&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== The Math Behind the Function ====&lt;br /&gt;
'''Coming soon!'''&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Matrix&amp;diff=8231</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Matrix&amp;diff=8231"/>
		<updated>2007-04-21T22:26:40Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: Spelling, removed math portion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''matrix''' (''pl.'' matrices) is a list of numbers, generally who have a relationship between them, that are ordered in a type of mathematical array. A matrix, m, may be written as either |m|, [m], or sometimes even (m) in mathematics, where m is a placeholder for the numbers in the matrix.&lt;br /&gt;
&lt;br /&gt;
''Any matrix examples below will use the |m| notation for simplicity.''&lt;br /&gt;
&lt;br /&gt;
== Reading a Matrix ==&lt;br /&gt;
A matrix is ordered in rows and columns, which are counted by increasing i and j respectively. One can think of a matrix as a 2-dimensional array where each object in the 1st dimension holds an array of numbers in that row.&lt;br /&gt;
&lt;br /&gt;
An entry at i=2 and j=3 is noted by either M[2,3] or m&amp;lt;sub&amp;gt;2,3&amp;lt;/sub&amp;gt;. These numbers are important for some modifications involving these matrices.&lt;br /&gt;
&lt;br /&gt;
== Demystifying Matrices in GraalScript ==&lt;br /&gt;
If you have ever tested any of the matrix functions built into GraalScript, you may be lost as to where the return value comes from. Well, luckily there are some adept enough with math to understand these functions. These are their findings.&lt;br /&gt;
&lt;br /&gt;
=== matrixcreate() ===&lt;br /&gt;
Let '''v''' be a vector and '''a''' consisting of a vector and a scalar.&lt;br /&gt;
&lt;br /&gt;
==== Usage ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
strMatrix = matrixcreate(v,a);&lt;br /&gt;
}}&lt;br /&gt;
Where v describes the translation (position) and 'a' describes the rotation (rotation axis and angle).&lt;br /&gt;
&lt;br /&gt;
==== Return Value ====&lt;br /&gt;
Returns a matrix array of length 7 (this will be explained later).&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
temp.matrix = matrixcreate({1,1,1},{1,7,1,1});&lt;br /&gt;
// This will return 1,1,1,0.140028,0.980196058,0.140028,7.14595223&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== The Math Behind the Function ====&lt;br /&gt;
The first three numbers of the return value should be rather familiar. It is the vector you passed to the function. The other four seem to come out of nowhere. However, there is a method to this madness. The first of these three are merely a property of angles. Because of the [[Dot Product]] of vectors, we are able to calculate the cosine of the angle between two vectors. Well, we have actually created a new vector in this code!&lt;br /&gt;
&lt;br /&gt;
As defined in [[Vectors]], we know that there are three unit vectors that lay on the x, y, and z axes. These vectors have been given the letters '''i''', '''j''', and '''k''', respectively. The first value defined in the &amp;quot;rotation&amp;quot; is multiplied to '''i''', the second to '''j''', and so forth, and this makes a new vector. However, this still does not tell us why we have these numbers returned to us.&lt;br /&gt;
&lt;br /&gt;
From the definition of the dot product, we know that&lt;br /&gt;
 cos(&amp;amp;theta;) = u&amp;amp;#0149;v/(|u||v|)&lt;br /&gt;
The first three numbers returned to us are the cosine of the angles between the new vector (in this case, &amp;lt;1,7,1&amp;gt;) and each of our unit vectors. For example:&lt;br /&gt;
 cos(&amp;amp;alpha;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;1,0,0&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;1,0,0&amp;gt;|) = 1/&amp;amp;radic;51 = 0.1400280084&lt;br /&gt;
 cos(&amp;amp;beta;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;0,1,0&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;0,1,0&amp;gt;|) = 7/&amp;amp;radic;51 = 0.9801960588&lt;br /&gt;
 cos(&amp;amp;gamma;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;0,0,1&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;0,0,1&amp;gt;|) = 1/&amp;amp;radic;51 = 0.1400280084&lt;br /&gt;
&lt;br /&gt;
''There is an evident difference between the values given here and the return value. A computer cannot calculate cosine on its own. It merely uses a method of estimation.''&lt;br /&gt;
&lt;br /&gt;
 cos(&amp;amp;alpha;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + cos(&amp;amp;beta;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + cos(&amp;amp;gamma;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = 1 &amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=&amp;quot;33%&amp;quot; noshade=&amp;quot;noshade&amp;quot;&amp;gt;&lt;br /&gt;
(1) The returned values are accurate within &amp;amp;plusmn;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So far, we have 6 of 7 figured out. The last is the simplest of them all. Plugging the new vector into vectorlen() or using &amp;amp;radic;(x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) returns it's magnitude. This, multiplied by the fourth number of the second parameter, is the last of the returned values (and as far as anyone can tell the vector passed to the function has no bearing on the return value).&lt;br /&gt;
&lt;br /&gt;
=== matrixcreatefromeuler() ===&lt;br /&gt;
Let '''r''' be an array describing rotation, {&amp;amp;alpha;,&amp;amp;beta;,&amp;amp;gamma;}.&lt;br /&gt;
&lt;br /&gt;
==== Usage ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
strMatrix = matrixcreatefromeuler(r);&lt;br /&gt;
}}&lt;br /&gt;
Where r describes the rotation (rotation axis and angle).&lt;br /&gt;
&lt;br /&gt;
==== Return Value ====&lt;br /&gt;
Returns a matrix array of length 7.&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
temp.matrix = matrixcreatefromeuler({pi/2,0,pi/2});&lt;br /&gt;
// This will return 0,0,0,-0.577350258,-0.577350258,-0.577350258,119.999976018&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== The Math Behind the Function ====&lt;br /&gt;
'''Coming soon!'''&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Dot_Product&amp;diff=8056</id>
		<title>Dot Product</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Dot_Product&amp;diff=8056"/>
		<updated>2007-01-23T21:46:14Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Deriving the Dot Product */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Dot Product is a property of vectors. It is defined as the sum of the products of each component of a [[Vectors|vector]]. This is a useful property when trying to determine the angle between two vectors in n-dimensions.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
The dot product of vectors u and v is written u&amp;amp;#149;v and is pronounced &amp;quot;u dot v&amp;quot;. This should not be confused with the multiplication dot (below marked as &amp;amp;#183; as opposed to &amp;amp;#149;)&amp;lt;br /&amp;gt;&lt;br /&gt;
The dot product simply returns a number. This number is the sum of products of each component of the vector. So, if we have vectors u = &amp;amp;lt;3,5,7&amp;amp;gt; and v = &amp;amp;lt;9,4,2&amp;amp;gt;, the dot product would be &lt;br /&gt;
 u&amp;amp;#149;v = &amp;amp;lt;3,5,7&amp;amp;gt;&amp;amp;#149;&amp;amp;lt;9,4,2&amp;amp;gt; = 3&amp;amp;#183;9 + 5&amp;amp;#183;4 + 7&amp;amp;#183;2 = 61&lt;br /&gt;
This value has special meaning with vectors. It can also be calculated by the magnitude of u multiplied by the magnitude of v multiplied by the cosine of the angle between them.&lt;br /&gt;
 |u||v|cos(&amp;amp;theta;)&lt;br /&gt;
&lt;br /&gt;
== Deriving the Dot Product ==&lt;br /&gt;
The dot product was merely derived from the law of cosines:&lt;br /&gt;
 c&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = a&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + b&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - 2 &amp;amp;#183; a &amp;amp;#183; b &amp;amp;#183; cos(&amp;amp;theta;)&lt;br /&gt;
&lt;br /&gt;
Imagine a triangle with three points, A, B, and C and we are trying to find the size of angle &amp;amp;ang;BAC. In this triangle, AB = c, AC = b, and BC = a. Thus, we have&lt;br /&gt;
 (AB)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = (BC)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + (AC)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - 2 &amp;amp;#183; (BC) &amp;amp;#183; (AC) &amp;amp;#183; cos(&amp;amp;theta;)&lt;br /&gt;
 (AB)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - (BC)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - (AC)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = -2 &amp;amp;#183; (BC) &amp;amp;#183; (AC) &amp;amp;#183; cos(&amp;amp;theta;)&lt;br /&gt;
 [(AB)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - (BC)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - (AC)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] / [-2 &amp;amp;#183; (BC) &amp;amp;#183; (AC)] = cos(&amp;amp;theta;)&lt;br /&gt;
 [-(AB)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + (BC)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + (AC)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] / [2 &amp;amp;#183; (BC) &amp;amp;#183; (AC)] = cos(&amp;amp;theta;)&lt;br /&gt;
At this point, we replace all sides with vectors. BC = |u|, AC = |v|, AB = |u-v|.&lt;br /&gt;
 [-|u-v|&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + |u|&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + |v|&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] / [2 &amp;amp;#183; |u| &amp;amp;#183; |v|] = cos(&amp;amp;theta;)&lt;br /&gt;
 [-[(u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - 2&amp;amp;#183;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - 2&amp;amp;#183;u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - 2&amp;amp;#183;u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; + v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;)] + u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] / [2&amp;amp;#183;|u|&amp;amp;#183;|v|] = cos(&amp;amp;theta;)&lt;br /&gt;
This calculation is done by &amp;quot;multiplying&amp;quot; the two vectors together. In reality, |u|&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = u&amp;amp;#149;u, so it is merely following the definition of the dot product above.&lt;br /&gt;
 [-(-2&amp;amp;#183;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 2&amp;amp;#183;u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 2&amp;amp;#183;u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)] / [2&amp;amp;#183;|u|&amp;amp;#183;|v|] = cos(&amp;amp;theta;)&lt;br /&gt;
 [2&amp;amp;#183;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + 2&amp;amp;#183;u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + 2&amp;amp;#183;u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)] / [2&amp;amp;#183;|u|&amp;amp;#183;|v|] = cos(&amp;amp;theta;)&lt;br /&gt;
 [u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)] / [|u|&amp;amp;#183;|v|] = cos(&amp;amp;theta;)&lt;br /&gt;
And since&lt;br /&gt;
 u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; + u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; + u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;#183;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; = u&amp;amp;#149;v&lt;br /&gt;
We have then&lt;br /&gt;
 u&amp;amp;#149;v/[|u||v|] = cos(&amp;amp;theta;)&lt;br /&gt;
 u&amp;amp;#149;v = |u||v|cos(&amp;amp;theta;)&lt;br /&gt;
&lt;br /&gt;
== The Dot Product in GraalScript ==&lt;br /&gt;
The dot product is a function of vectors in format {x,y,z}. It returns a float, as it should. This function in GraalScript is '''vectordot({{graycourier|u}},{{graycourier|v}})'''. It's return value is just simply x&amp;lt;sub&amp;gt;u&amp;lt;/sub&amp;gt;x&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt; + y&amp;lt;sub&amp;gt;u&amp;lt;/sub&amp;gt;y&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt; + z&amp;lt;sub&amp;gt;u&amp;lt;/sub&amp;gt;z&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Output_Methods&amp;diff=8039</id>
		<title>Creation/Dev/Output Methods</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Output_Methods&amp;diff=8039"/>
		<updated>2007-01-12T20:56:00Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* format() function */ %n$T format, usage.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
With the addition of the [[GScript|new scripting engine]], there are a number of new methods in which you can create output from an NPC. In this article, I will discuss a couple of ways.&lt;br /&gt;
&lt;br /&gt;
== Useful Things To Know ==&lt;br /&gt;
If you've played with the new engine for a while, you're probably aware of the string concationation operators. If not, here they are.&lt;br /&gt;
&amp;lt;pre&amp;gt;String Concatenation     a @ b&lt;br /&gt;
    with space            a SPC b&lt;br /&gt;
    with newline          a NL b&lt;br /&gt;
    with tabulator        a TAB b&amp;lt;/pre&amp;gt;&lt;br /&gt;
What these operators do is join values together to form one value.&lt;br /&gt;
&lt;br /&gt;
An example of using @ would be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello, &amp;quot; @ player.account&amp;lt;/pre&amp;gt;&lt;br /&gt;
... which would produce &amp;quot;Hello, accountnamehere&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The SPC, NL and TAB operators work using the same principal - except that they insert a Space, New Line or Tab Space respectively.&lt;br /&gt;
&lt;br /&gt;
If you don't put a space at the end of the first value or at the beginning of the second value when using @, you don't get a visible space, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello&amp;quot; @ &amp;quot;World&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... will produce &amp;quot;HelloWorld&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
However! If you use SPC, you'll get a space in place of the operator:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello&amp;quot; SPC &amp;quot;World&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... producing &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can use these operators just about anywhere that a variable is requested, i.e. setting a variable, or sending to a function.&lt;br /&gt;
&lt;br /&gt;
== format() function ==&lt;br /&gt;
Or, if you aren't so interested in using the concationation operators, you can use the ''format()'' function.&lt;br /&gt;
&lt;br /&gt;
What this function does, is that it takes a sort of template from the first parameter you give it, and replaces % codes with other parameters you give it.&lt;br /&gt;
&lt;br /&gt;
Now, the template format primarily uses the following % characters:&lt;br /&gt;
&amp;lt;pre&amp;gt;%d %i - Integer&lt;br /&gt;
%f - Float (number with decimal)&lt;br /&gt;
%s - String&lt;br /&gt;
%c - Single character&lt;br /&gt;
%% - Literal &amp;quot;%&amp;quot; character&lt;br /&gt;
%x %X - Print an integer as a hexadecimal&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are more, since the function is made to be compatible with C's ''printf()'' function.&lt;br /&gt;
&lt;br /&gt;
In the template, every % code will be replaced with the respective parameter.&lt;br /&gt;
&lt;br /&gt;
Say you want to produce &amp;quot;Hello, '''Mr. Skyld'''. You ate '''4''' apples today!&amp;quot; using format(). First, your format would be this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Hello, %s. You ate %i apples today!&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
... and you must not forget to give the parameters containing the values:&lt;br /&gt;
&amp;lt;pre&amp;gt;format(&amp;quot;Hello, %s. You ate %i apples today!&amp;quot;, &amp;quot;Mr. Skyld&amp;quot;, 4);&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can give the format() functions as many parameters as necessary to build up your value. If you use a % code and a value isn't present for it, a 0 (zero) will appear in it's place.&lt;br /&gt;
&lt;br /&gt;
You can also use ''format2()'', which acts just like format() with the exception that instead of passing variables as separate parameters, they are sent as an array to the 2nd parameter.&lt;br /&gt;
The example above would become&lt;br /&gt;
&amp;lt;pre&amp;gt;format2(&amp;quot;Hello, %s. You ate %i apples today!&amp;quot;, {&amp;quot;Mr. Skyld&amp;quot;, 4});&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Along with format2() came the indexing of the parameters. This method will work with both format() and format2() functions. It allows us to choose which parameter to place in which position in the format string. The problem of parameters being placed in the wrong order will not exist if each parameter has a different data type, however.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;format2(&amp;quot;Hello, %2$s. You ate %1$s apples today!&amp;quot;, {&amp;quot;four&amp;quot;,&amp;quot;Mr. Skyld&amp;quot;});&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the example, both parameters are strings, so it would be necessary to give them an index when trying to insert them in a different order than they were passed. ''%1$s'' refers to the 1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; object in the array inserted as a string. ''%n$T'' is general; the n&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; parameter inserted with datatype of ''T''.&lt;br /&gt;
&lt;br /&gt;
Now, let's continue on various ways of outputting data.&lt;br /&gt;
&lt;br /&gt;
== Outputs ==&lt;br /&gt;
=== Direct Output ===&lt;br /&gt;
Direct Output is sending an output directly to the game client, or to RC/NC. There are a number of functions for these tasks.&lt;br /&gt;
&lt;br /&gt;
==== echo() ====&lt;br /&gt;
The echo() function will, on the serverside, send data to NC, so RC users who have the NPC-Control right will see the message in RC chat, and on the clientside, sends the message to the F2 window. It expects one parameter, and that's the message you're sending. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo(&amp;quot;This is a message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
The message &amp;quot;This is a message!&amp;quot; will appear either in RC or the F2 window using this example.&lt;br /&gt;
&lt;br /&gt;
==== sendtorc() ====&lt;br /&gt;
The sendtorc() function works in the same way that the echo() function does, however, it only usually works on the serverside. It will appear to all RC users. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendtorc(&amp;quot;This is a message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... will send &amp;quot;NPC-Server (Server): This is a message!&amp;quot; to RC.&lt;br /&gt;
&lt;br /&gt;
'''Note''' that this function can only be used on the clientside when Client-RC is active.&lt;br /&gt;
&lt;br /&gt;
==== sendtonc() ====&lt;br /&gt;
The sendtonc() function works in exactly the same way as echo() does serverside.&lt;br /&gt;
&lt;br /&gt;
==== sendrpgmessage() ====&lt;br /&gt;
The sendrpgmessage() works much the same as echo() does clientside. It will result in a message appearing in the player's F2 log window. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;sendrpgmessage(&amp;quot;This is a message!&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... will send &amp;quot;This is a message!&amp;quot; to the player's F2 window.&lt;br /&gt;
&lt;br /&gt;
=== Working with Files ===&lt;br /&gt;
==== loadstring() ====&lt;br /&gt;
loadstring() is an object function which loads the contents of a given file.&lt;br /&gt;
&lt;br /&gt;
Say that the file &amp;quot;levels/file.txt&amp;quot; contains the message &amp;quot;HELLO WORLD&amp;quot;. If you want to load that value into a variable called &amp;quot;myVar&amp;quot;, you should use this function:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVar.loadstring(&amp;quot;levels/file.txt&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can easily check the contents of the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo(myVar);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== savestring() ====&lt;br /&gt;
savestring() is another object function, however, instead of loading the contents of a file, it writes the contents instead.&lt;br /&gt;
&lt;br /&gt;
Consider this with the previous example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVar = &amp;quot;HELLO PLANET&amp;quot;;&lt;br /&gt;
myVar.savestring(&amp;quot;levels/file.txt&amp;quot;, 0);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... would write &amp;quot;HELLO PLANET&amp;quot; to &amp;quot;levels/file.txt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The second operator, which is 0 (zero) in that example, is the '''Append''' function, and decides whether the file should be overwritten with the new value, or whether the new value should be added onto the end of the file. If you specify '''1''', then the value will be appended, if not, it will overwrite the file.&lt;br /&gt;
&lt;br /&gt;
==== savevars() ====&lt;br /&gt;
savevars() is an object function which saves the variables of an object into a file. Consider this example:&lt;br /&gt;
&amp;lt;pre&amp;gt;myVar = new TStaticVar(); // Create a TStaticVar&lt;br /&gt;
myVar.variable = &amp;quot;Hello&amp;quot;;&lt;br /&gt;
myVar.secondvariable = &amp;quot;World&amp;quot;;&lt;br /&gt;
myVar.saveVars(&amp;quot;levels/test.txt&amp;quot;, 0);&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will save the variables inside the &amp;quot;myVar&amp;quot; object into &amp;quot;levels/test.txt&amp;quot;. You can then recall these variables using loadvars();&lt;br /&gt;
&lt;br /&gt;
Like savelines(), the second parameter controls whether the variables are to be appended to the file. '''0''' will overwrite the file, and '''1''' will append to the file.&lt;br /&gt;
&lt;br /&gt;
==== loadvars() ====&lt;br /&gt;
loadvars() is another object function which loads savevars()-style variables from a file into an object. Let's say you used the previous example from savevars(), then you could restore these values using the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;myNewVar.loadvars(&amp;quot;levels/test.txt&amp;quot;);&lt;br /&gt;
echo(myNewVar.secondvariable);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... which will output &amp;quot;World&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Private Messages (PMs) ===&lt;br /&gt;
From the serverside, you can send PMs to players. They appear from the NPC-Server.&lt;br /&gt;
&lt;br /&gt;
If you wanted to send a PM to the player &amp;quot;Skyld&amp;quot; (if the player is online), the you would use the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;findPlayer(&amp;quot;Skyld&amp;quot;).sendPM(&amp;quot;This is a PM&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
... and then the specified player, in this case Skyld, would receive the PM &amp;quot;This is a PM&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If you want to send a PM to the current player, you would simply use:&lt;br /&gt;
&amp;lt;pre&amp;gt;player.sendPM(&amp;quot;This is a PM&amp;quot;);&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Q_menu&amp;diff=8008</id>
		<title>Q menu</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Q_menu&amp;diff=8008"/>
		<updated>2007-01-05T03:46:40Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Q Menu is the standard [[Graal]] weapon selection system.&lt;br /&gt;
Pressing Q brings up weapons, in which the player can select weapons using the arrow keys and D, or clicking the weapon.&lt;br /&gt;
It contains support for bags. By using the Bagname/Weaponname format as the name of the weapon, weapons can be grouped. Normally, collected items are not seen here. (However, the custom [[Worlds/Graal Kingdoms|Graal Kingdoms]] Q Menu ''will'' display collected items.)&lt;br /&gt;
&lt;br /&gt;
It was important to make the distinction between a Q menu and the inventory, because, script-wise, the inventory was separate from the Q menu.&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Client&amp;diff=7816</id>
		<title>Creation/Dev/Script/Client</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Client&amp;diff=7816"/>
		<updated>2006-12-30T18:46:35Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Matrices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Client Supported Script Features=&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| $camera::movementspeed&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::choosenvoicecodec&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivatebyvolume&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivationlevel&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microinputdevice&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microon&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microvolumefactor&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::midivolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::mp3volume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::radiovolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::reversestereo&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::sfxvolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::voicevolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::allowglobalpms&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::automapping&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontsize&lt;br /&gt;
| integer&lt;br /&gt;
| Change showtext zoom: $pref::graal::defaultfontsize/24&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontconnectlevels&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontloadlistheads&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepasswords&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepms&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedport&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedudpport&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::language&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::limitnicknames&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::loadbuddylistfromserver&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nicknamelimit&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nomassmessages&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::notoalls&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::noudp&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::showyourselfonbuddylists&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::input::mousesensitivity&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::interior::lockarrays&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::terrain::enabledetails&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::detailfactor&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fogdistance&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fullscreenmode&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::screenshotformat&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::visibledistance&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::windowmode&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $scenelighting::lightingprogress&lt;br /&gt;
| float (read only)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| allfeatures&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| for use with enablefeatures(), it's the default unless it is changed.&lt;br /&gt;
|-&lt;br /&gt;
| allplayerscount&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| The size of the allplayers array.&lt;br /&gt;
|-&lt;br /&gt;
| allrenderobjecttypes&lt;br /&gt;
| integer (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allstats&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| A bitflag of all stats currently enabled&lt;br /&gt;
|-&lt;br /&gt;
| canspin&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player has spin attack&lt;br /&gt;
|-&lt;br /&gt;
| carriesblackstone&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying a black stone&lt;br /&gt;
|-&lt;br /&gt;
| carriesbush&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying a bush&lt;br /&gt;
|-&lt;br /&gt;
| carriesnpc&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying an NPC.&lt;br /&gt;
|-&lt;br /&gt;
| carriessign&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if a player is carrying a sign.&lt;br /&gt;
|-&lt;br /&gt;
| carriesstone&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if a player is carrying a stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesvase&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if a player is carrying a vase.&lt;br /&gt;
|-&lt;br /&gt;
| downloadfile&lt;br /&gt;
| string (read only)&lt;br /&gt;
| Name of the file currently being downloaded&lt;br /&gt;
|-&lt;br /&gt;
| downloadpos&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Amount of download file already downloaded&lt;br /&gt;
|-&lt;br /&gt;
| downloadsize&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Size of the file being downloaded&lt;br /&gt;
|-&lt;br /&gt;
| editingmission&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| emoticonchar&lt;br /&gt;
| string (read only)&lt;br /&gt;
| The letter of the emoticon being displayed by the player&lt;br /&gt;
|-&lt;br /&gt;
| focusx&lt;br /&gt;
| float (read only)&lt;br /&gt;
| X coordinate of the center of playing screen in the level, offset -1.5&lt;br /&gt;
|-&lt;br /&gt;
| focusy&lt;br /&gt;
| float (read only)&lt;br /&gt;
| Y coordinate of the center of playing screen in the level, offset -2&lt;br /&gt;
|-&lt;br /&gt;
| graalversion&lt;br /&gt;
| float (read only)&lt;br /&gt;
| Graal version&lt;br /&gt;
|-&lt;br /&gt;
| gravity&lt;br /&gt;
| float&lt;br /&gt;
| Downward acceleration for projectiles ejected with the shoot() function.&lt;br /&gt;
|-&lt;br /&gt;
| iscarrying&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying anything&lt;br /&gt;
|-&lt;br /&gt;
| isfocused&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraal3d&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if you are running graal 3D&lt;br /&gt;
|-&lt;br /&gt;
| isleader&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player is the first person in the level&lt;br /&gt;
|-&lt;br /&gt;
| isonmap&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player is on a map&lt;br /&gt;
|-&lt;br /&gt;
| jpegquality&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lastdownloadfile&lt;br /&gt;
| string (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebutton&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the left mouse button is down&lt;br /&gt;
|-&lt;br /&gt;
| levelorgx&lt;br /&gt;
| float (read only)&lt;br /&gt;
| The x-value of the levels' origin (may deviate with attachplayertoobj)&lt;br /&gt;
|-&lt;br /&gt;
| levelorgy&lt;br /&gt;
| float (read only)&lt;br /&gt;
| The x-value of the levels' origin (may deviate with attachplayertoobj)&lt;br /&gt;
|-&lt;br /&gt;
| lighteffectsenabled&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player has enabled light effects&lt;br /&gt;
|-&lt;br /&gt;
| weathereffectsenabled&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player has enabled weather effects&lt;br /&gt;
|-&lt;br /&gt;
| particleeffectsenabled&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player has enabled particle effects&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebutton&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the middle mouse button is down&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttons&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Counts the amount of mousebuttons pressed&lt;br /&gt;
|-&lt;br /&gt;
| mousescreenx&lt;br /&gt;
| integer&lt;br /&gt;
| X coordinate of the mouse on the GUI layer&lt;br /&gt;
|-&lt;br /&gt;
| mousescreeny&lt;br /&gt;
| integer&lt;br /&gt;
| Y coordinate of the mouse on the GUI layer&lt;br /&gt;
|-&lt;br /&gt;
| mousewheeldelta&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Amount that the mouse scroll wheel was scrolled [(-) is up, (+) is down]&lt;br /&gt;
|-&lt;br /&gt;
| mousex&lt;br /&gt;
| float&lt;br /&gt;
| X coordinate of the mouse on the tile layer&lt;br /&gt;
|-&lt;br /&gt;
| mousey&lt;br /&gt;
| float&lt;br /&gt;
| Y coordinate of the mouse on the tile layer&lt;br /&gt;
|-&lt;br /&gt;
| musiclen&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| The duration of the playing sound file&lt;br /&gt;
|-&lt;br /&gt;
| musicpos&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| The position in the file at which the sound file is&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebutton&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the right mouse button is down&lt;br /&gt;
|-&lt;br /&gt;
| screenheight&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Height of the Graal window&lt;br /&gt;
|-&lt;br /&gt;
| screenwidth&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Width of the Graal window&lt;br /&gt;
|-&lt;br /&gt;
| scriptedcontrols&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scriptedplayerlist&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedlistplayers&lt;br /&gt;
| object&lt;br /&gt;
| an array of players highlighted on the playerlist&lt;br /&gt;
|-&lt;br /&gt;
| selectedsword&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedweapon&lt;br /&gt;
| integer&lt;br /&gt;
| Index of player.weapons that references the player's current weapon&lt;br /&gt;
|-&lt;br /&gt;
| servername&lt;br /&gt;
| string (read only)&lt;br /&gt;
| Name of the current server&lt;br /&gt;
|-&lt;br /&gt;
| serverstartconnect&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| serverstartparams&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| shotbybaddy&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player was shot by a baddy&lt;br /&gt;
|-&lt;br /&gt;
| shotbyplayer&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player was shot by another player&lt;br /&gt;
|-&lt;br /&gt;
| showterraingrid&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| A timer which is increased each 5 seconds and is snychronized between server and clients; The timer started exactly on 2001-02-01 at 18:33:34 Paris time (opening of Graal2001); on serverside the unixtime (timevar2) is around 981048814 + timevar*5&lt;br /&gt;
|-&lt;br /&gt;
| timevar2&lt;br /&gt;
| float (read only)&lt;br /&gt;
| Unix-time with a very high precision, not synchronized between server and client&lt;br /&gt;
|-&lt;br /&gt;
| timevar3 &lt;br /&gt;
| float (read only)&lt;br /&gt;
| synchronized time which works on both server- and client-side, precision is milliseconds, only available for Graal3D right now&lt;br /&gt;
|-&lt;br /&gt;
| wasshooted&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| waterheight&lt;br /&gt;
| float&lt;br /&gt;
| The height of water at the player's (x,y) on a terrain&lt;br /&gt;
|-&lt;br /&gt;
| weapons&lt;br /&gt;
| object (read only)&lt;br /&gt;
| An array of weapon objects&lt;br /&gt;
|-&lt;br /&gt;
| weaponsenabled&lt;br /&gt;
| boolean&lt;br /&gt;
| Are weapons enabled? (Player can trigger onWeaponFired...)&lt;br /&gt;
|-&lt;br /&gt;
| worldclockstopped&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldhour&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldminute&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldminutesofday&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldrealsecondsperday&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Variable Prefixes==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Prefix'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| object.var&lt;br /&gt;
| accesses the variables of the object. The object can be retrieved by using the case-sensitive name of the object or a variable pointing to the object.&lt;br /&gt;
|-&lt;br /&gt;
| this.var&lt;br /&gt;
| variables that belong to the current script object, on the server-side they are saved to file when the object is a database npc&lt;br /&gt;
|-&lt;br /&gt;
| thiso.var&lt;br /&gt;
| refer to the this. variables of the executing npc ('o' stands for original) when you use the with () command: with (findnpc(&amp;quot;npc2&amp;quot;)) thiso.temp = this.temp; will copy 'this.temp' from npc2 to the current npc&lt;br /&gt;
|-&lt;br /&gt;
| player.var&lt;br /&gt;
| variables of the current player object, when the event was invoked by a player (e.g. playertouchsme), or you do with (findplayer(accountname))&lt;br /&gt;
|-&lt;br /&gt;
| playero.var&lt;br /&gt;
| variables of the original player object, in generally the player who has invoked the event (e.g. playertouchsme)&lt;br /&gt;
|-&lt;br /&gt;
| client.var&lt;br /&gt;
| short for player.client.var, variables that can be changed on server-side and client-side&lt;br /&gt;
|-&lt;br /&gt;
| clientr.var&lt;br /&gt;
| short for player.clientr.var, variables that can only be changed on server-side but can be read on client-side&lt;br /&gt;
|-&lt;br /&gt;
| server.var&lt;br /&gt;
| variables that only exists on server-side and can be accessed by all npcs&lt;br /&gt;
|-&lt;br /&gt;
| serverr.var&lt;br /&gt;
| variables that can only be changed on server-side and is server wide, but can also be read by all clients, so it can be used for storing the state of global activities that need client-side actions like displaying weather; like server. vars they can also be changed with remotecontrol.exe by administrators that have the right to change server. variables&lt;br /&gt;
|-&lt;br /&gt;
| level.var&lt;br /&gt;
| variables of the current level, which is the level the executing npc stands in (on server-side) or the player is in (on client-side)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
''Note: Currently this doesn't list the functions which are optimized at compile time, see [[Creation/Dev/Script/Starting_Guide#Standard_functions|Starting Guide: Standard functions]] for those.''&lt;br /&gt;
&lt;br /&gt;
===Common===&lt;br /&gt;
* aindexof(float, array) - returns integer, better use array.index(float) instead&lt;br /&gt;
* echo(str text) - prints text in the F2 window (clientside) or RC chat (serverside)&lt;br /&gt;
* getbasepackage() - returns [[Creation/Dev/Script/Client/TUpdatePackage|TUpdatePackage]] object&lt;br /&gt;
* getdownloadedupdatepackagesize() - returns integer&lt;br /&gt;
* getdownloadingpackage() - returns [[Creation/Dev/Script/Client/TUpdatePackage|TUpdatePackage]] object&lt;br /&gt;
* getdownloadingpackagescount() - returns integer&lt;br /&gt;
* gethttprequest(str, int, str) - returns [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]] object&lt;br /&gt;
* getkeycode(str keyname) - returns integer&lt;br /&gt;
* getpackagesdownloadcomplete() - returns boolean&lt;br /&gt;
* getpackagesdownloaded() - returns boolean&lt;br /&gt;
* getplatform() - returns string&lt;br /&gt;
* getservername() - returns string&lt;br /&gt;
* gettotalupdatepackagesize() - returns integer&lt;br /&gt;
* getupdatepackage(str) - returns object&lt;br /&gt;
* isadminguild(str guildname) - returns boolean&lt;br /&gt;
* isobject(str objectname) - returns boolean, checks if an object is existing&lt;br /&gt;
* keydown(int keynumber) - returns if the specified key is pressed (0..10: up, left, down, right, S, A, D, M, tab, Q, P)&lt;br /&gt;
* keydown2(int keycode, bool ignorecase) - returns boolean&lt;br /&gt;
* keyname(int keycode) - returns string&lt;br /&gt;
* opengraalurl(str url) - opens a website of www.graalonline.com and automatically lets the player login to it (e.g. for the upgrade page or screenshot section)&lt;br /&gt;
* openurl(str url)&lt;br /&gt;
* openurl2(str url, int width, int height) - deprecated, width and height are ignored&lt;br /&gt;
* requesthttp(str, int, str) - returns [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]] object&lt;br /&gt;
* requesttext(str type, str option)&lt;br /&gt;
* requesturl(str url) - returns [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]] object&lt;br /&gt;
* savelog(str text)&lt;br /&gt;
* savelog2(str filename, str text) - adds a log entry to &amp;quot;logs/filename&amp;quot;&lt;br /&gt;
* sendrpgmessage(str text) - adds text to the F2 window&lt;br /&gt;
* sendtext(str type, str option, params...)&lt;br /&gt;
* sendtorc(str text) - serverside only, displays text on the RC chat&lt;br /&gt;
* serverwarp(str servername) - the name can either be the internal name (graal2002) or part of the server name on the serverlist&lt;br /&gt;
&lt;br /&gt;
====Files====&lt;br /&gt;
* extractfilebase(str filepath) - returns string, '/an/example/path/and/file' would return '/an/example/path/and/'&lt;br /&gt;
* extractfileext(str filepath) - returns string, 'filename.ext' would return '.ext'&lt;br /&gt;
* extractfilename(str filepath) - returns string, '/an/example/path/and/file' would return 'file'&lt;br /&gt;
* extractfilepath(str filepath) - returns string, '/an/example/path/and/file' would return '/an/example/path/and/'&lt;br /&gt;
* fileexists(str filepath) - returns boolean, checks if a file exists&lt;br /&gt;
* filesize(str filepath) - returns integer, returns the size of a file&lt;br /&gt;
* fileupdate(str filepath) - returns boolean, checks if a file is existing and requests an update from the server if it has not been checked yet&lt;br /&gt;
* findfiles(str filenamepattern, flags) - returns array of strings, flags can be either 1 for recursive search or 0 for non-recursive&lt;br /&gt;
* freefileresources(str)&lt;br /&gt;
* getextension(str filepath) - returns string, 'filename.ext' would return '.ext'&lt;br /&gt;
* reloadfile(str filepath)&lt;br /&gt;
* requestfiledeletion(str filepath), requests a file to be deleted on the server&lt;br /&gt;
* requestfilerename(str filepath, str newfilepath), requests a file to be renamed on the server&lt;br /&gt;
* requestfilesmove(str filepath, str newfilepath), requests a file to be moved on the server&lt;br /&gt;
* selectfilefordownload(str filter)&lt;br /&gt;
* selectfileforupload()&lt;br /&gt;
&lt;br /&gt;
''Watch the [[Creation/Dev/Script/Client/TGraalVar|TGraalVar]] object for loading and saving of files (loadlines etc.)''&lt;br /&gt;
&lt;br /&gt;
''See more information about input/output at [[Creation/Dev/Output Methods|Output methods]]''&lt;br /&gt;
&lt;br /&gt;
====Math====&lt;br /&gt;
* degtorad(float value) - returns float&lt;br /&gt;
* radtodeg(float value) - returns float&lt;br /&gt;
&lt;br /&gt;
=====Matrices=====&lt;br /&gt;
GraalScript [[Matrix|matricies]] are arrays of seven elements: three describing translation, three describing rotation, and one describing angle.&lt;br /&gt;
* [[Matrix#matrixcreate()|matrixcreate]](str vector, str rotation) - returns matrix string&lt;br /&gt;
* matrixcreatefromeuler(str eulerrotation) - returns matrix string&lt;br /&gt;
* matrixmulpoint(str, str) - returns string&lt;br /&gt;
* matrixmultiply(str matrix, str matrix) - returns matrix string&lt;br /&gt;
* matrixmulvector(str matrix, str vector) - returns vector string&lt;br /&gt;
&lt;br /&gt;
=====Vectors=====&lt;br /&gt;
Each [[Vectors|vector]] is basicly an array of format {x,y,z} but is passed as string for simplicity. Click on the function names to see more information about the vector operations.&lt;br /&gt;
* [[Vectors#Vector_Addition|vectoradd]](vector, vector) - returns vector&lt;br /&gt;
* [[Cross Product|vectorcross]](vector, vector) - returns vector&lt;br /&gt;
* [[Vectors#Distance_Between_Terminal_Points|vectordist]](vector, vector) - returns float&lt;br /&gt;
* [[Dot Product|vectordot]](vector, vector) - returns float&lt;br /&gt;
* [[Vectors#Vector_Length_.28Magnitude.29|vectorlen]](vector) - returns float&lt;br /&gt;
* [[Vectors#Unit_Length|vectornormalize]](vector) - returns vector, scales the vector to length 1&lt;br /&gt;
* vectororthobasis(vector) - returns vector&lt;br /&gt;
* [[Vectors#Vector-Scalar_Multiplication|vectorscale]](vector, float) - returns vector&lt;br /&gt;
* [[Vectors#Vector_Subtraction|vectorsub]](vector, vector) - returns vector&lt;br /&gt;
&lt;br /&gt;
====Strings====&lt;br /&gt;
* base64decode(str text) - returns decoded string&lt;br /&gt;
* base64encode(str text) - returns encoded string&lt;br /&gt;
* checksum(str text) - returns checksum float&lt;br /&gt;
* contains(str haystack, str needle) - returns boolean, you should probably do haystack.contains(needle) instead&lt;br /&gt;
* getascii(str character) - returns ascii value integer&lt;br /&gt;
* getstringkeys(str leading) - searchs for variables which start with the specified string and returns and array of their ending&lt;br /&gt;
* lowercase(str text) - returns lowercased string, it is recommended to use string.lower() though&lt;br /&gt;
* md5(str text) - returns md5 hash string&lt;br /&gt;
* randomstring(array of strings) - returns string&lt;br /&gt;
* strcmp(str text1, str text2) - returns integer&lt;br /&gt;
* strequals(str text1, str text2) - returns boolean, you probably should do text1.equals(text2) instead&lt;br /&gt;
* uppercase(str text) - returns uppercased string, it is recommended to use string.upper() though&lt;br /&gt;
&lt;br /&gt;
===GUI===&lt;br /&gt;
* addcontrol(obj) - adds a GUI control or a 3D-object to the scene&lt;br /&gt;
* cursoroff()&lt;br /&gt;
* cursoron()&lt;br /&gt;
* iscursoron() - returns boolean&lt;br /&gt;
* popdialog() - removes the top dialog control&lt;br /&gt;
* pushdialog(obj) - displays a control on top of all other controls, this control gains all focus until it is removed again&lt;br /&gt;
* setcontentcontrol(obj) - replaces the current content control (usually named GUIContainer) with another one&lt;br /&gt;
&lt;br /&gt;
===Graal 2D===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef(str tilesetimage, str prefix, int tilesettype)&lt;br /&gt;
|&lt;br /&gt;
| Sets the tileset image for levels beginning with the specified prefix.&lt;br /&gt;
Tileset type 0 is for pics1.png style tilesets.&lt;br /&gt;
Tileset type 1 is for the new tileset format (Era's tiles for example)&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef2(str tilesetimage, str prefix, int x, int y)&lt;br /&gt;
|&lt;br /&gt;
| Replaces a section of the tileset (x, y) image for levels beginning with the specified prefix.&lt;br /&gt;
|-&lt;br /&gt;
| attachplayertoobj(int objtype, int id)&lt;br /&gt;
|&lt;br /&gt;
| Attaches a player to the specified object. Using attachpayertoobj(0, id); the player will be attached to the current NPC.&lt;br /&gt;
|-&lt;br /&gt;
| callnpc(int npcindex, params...)&lt;br /&gt;
|&lt;br /&gt;
| Invokes an event on an npc, better use npcs[npcindex].trigger(event, params) instead; you can only trigger objects this way that are on your side of clientside/serverside&lt;br /&gt;
|-&lt;br /&gt;
| callweapon(int weaponindex, params...)&lt;br /&gt;
|&lt;br /&gt;
| Invokes a trigger on a weapon, better use weapons[weaponindex].trigger(event, params) instead&lt;br /&gt;
|-&lt;br /&gt;
| detachplayer()&lt;br /&gt;
|&lt;br /&gt;
| Puts the player back on the level (after using attachplayertoobj).&lt;br /&gt;
|-&lt;br /&gt;
| disabledefmovement()&lt;br /&gt;
|&lt;br /&gt;
| Disables the default movement.&lt;br /&gt;
|-&lt;br /&gt;
| disablemap()&lt;br /&gt;
|&lt;br /&gt;
| Disables the default map&lt;br /&gt;
|-&lt;br /&gt;
| disablepause()&lt;br /&gt;
|&lt;br /&gt;
| Disables pausing.&lt;br /&gt;
|-&lt;br /&gt;
| disableselectweapons()&lt;br /&gt;
|&lt;br /&gt;
| Disables the default Q menu.&lt;br /&gt;
|-&lt;br /&gt;
| disableweapons()&lt;br /&gt;
|&lt;br /&gt;
| Disables weapons.&lt;br /&gt;
|-&lt;br /&gt;
| enabledefmovement()&lt;br /&gt;
|&lt;br /&gt;
| Enables default movement&lt;br /&gt;
|-&lt;br /&gt;
| enablefeatures(int flags)&lt;br /&gt;
| &lt;br /&gt;
| Enable/disable client features&lt;br /&gt;
&lt;br /&gt;
Flags can consist of:&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
  | '''Value'''&lt;br /&gt;
  | '''Description'''&lt;br /&gt;
  |-&lt;br /&gt;
  | 1&lt;br /&gt;
  | M key (map)&lt;br /&gt;
  |-&lt;br /&gt;
  | 2&lt;br /&gt;
  | P key (pause)&lt;br /&gt;
  |-&lt;br /&gt;
  | 4&lt;br /&gt;
  | Q key (weapon select)&lt;br /&gt;
  |-&lt;br /&gt;
  | 8&lt;br /&gt;
  | R key (show ratings)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x10&lt;br /&gt;
  | S+A key combination for dropping items&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x20&lt;br /&gt;
  | S+D key combination for switching weapons&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x40&lt;br /&gt;
  | TAB key (if disabled then you cannot switch to the chat field with TAB)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x80&lt;br /&gt;
  | Display of chat text&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x100&lt;br /&gt;
  | Display of the hearts over player heads&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x200&lt;br /&gt;
  | Display of nicknames&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x400&lt;br /&gt;
  | Toall/PM-icons on the minimap&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x800&lt;br /&gt;
  | Right-click on players opens their profile&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x1000&lt;br /&gt;
  | Emoticons (disable it if you want to do other stuff with control+keys)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x2000&lt;br /&gt;
  | Alt+5 for making snapshots  ''(deprecated)''&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x4000&lt;br /&gt;
  | Alt+8/9 for zooming ''(deprecated)''&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x8000&lt;br /&gt;
  | The logframe where savelog stuff is added&lt;br /&gt;
  |-&lt;br /&gt;
  | allfeatures&lt;br /&gt;
  | All of the previously stated feature flags enabled&lt;br /&gt;
  |}&lt;br /&gt;
|-&lt;br /&gt;
| enablemap()&lt;br /&gt;
|&lt;br /&gt;
| Enables default map.&lt;br /&gt;
|-&lt;br /&gt;
| enablepause()&lt;br /&gt;
|&lt;br /&gt;
| Enables pausing.&lt;br /&gt;
|-&lt;br /&gt;
| enableselectweapons()&lt;br /&gt;
|&lt;br /&gt;
| Enables default Q menu.&lt;br /&gt;
|-&lt;br /&gt;
| enableweapons()&lt;br /&gt;
|&lt;br /&gt;
| Enables weapons.&lt;br /&gt;
|-&lt;br /&gt;
| explodebomb(int bombindex)&lt;br /&gt;
|&lt;br /&gt;
| Explodes a bomb with the specified index.&lt;br /&gt;
|-&lt;br /&gt;
| findani(str)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TGraalAni|TGraalAni]] object&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| findlevel(str levelfilename)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerLevel|TServerLevel]] object&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| findplayer(str accountname)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerPlayer|TServerPlayer]] object&lt;br /&gt;
| Returns player object of Account specified. Player must be online.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbyid(int playerid)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerPlayer|TServerPlayer]] object&lt;br /&gt;
| Returns player object of id specified. If id isn't available, returns false.&lt;br /&gt;
|-&lt;br /&gt;
| findweapon(str weaponname)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerWeapon|TServerWeapon]] object&lt;br /&gt;
| Returns weapon object of name specified. Returns false if weapon doesn't exist.&lt;br /&gt;
|-&lt;br /&gt;
| freezeplayer(float seconds)&lt;br /&gt;
|&lt;br /&gt;
| Freezes player for a specific amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| getimgheight(str imagefilename)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the height (in pixels) of an image.&lt;br /&gt;
|-&lt;br /&gt;
| getimgwidth(str imagefilename)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the width (in pixels) of an image.&lt;br /&gt;
|-&lt;br /&gt;
| getmapx(str levelname)&lt;br /&gt;
| integer&lt;br /&gt;
| X coordinate of the level on a map (top-left level is 0)&lt;br /&gt;
|-&lt;br /&gt;
| getmapy(str levelname)&lt;br /&gt;
| integer&lt;br /&gt;
| Y coordinate of the level on a map (top-left level is 0)&lt;br /&gt;
|-&lt;br /&gt;
| gettextheight(float, str, str)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the height of the font. Format:&lt;br /&gt;
  gettextheight(zoom, font, style)&lt;br /&gt;
|-&lt;br /&gt;
| gettextwidth(float, str, str, str)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the width of a specified text in a certain font. Format:&lt;br /&gt;
  gettextwidth(zoom, font, style, text)&lt;br /&gt;
|-&lt;br /&gt;
| getz(float x, float y)&lt;br /&gt;
| float&lt;br /&gt;
| Returns the z value of a terrain at (x,y).&lt;br /&gt;
|-&lt;br /&gt;
| graalcontrolhasfocus(bool) &lt;br /&gt;
| boolean &lt;br /&gt;
| parameter says if it should also check if the chat bar has the focus&lt;br /&gt;
|-&lt;br /&gt;
| hideplayer(float seconds)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player for ''seconds'' seconds.&lt;br /&gt;
|-&lt;br /&gt;
| hidesword(float seconds)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player's sword for ''seconds'' seconds.&lt;br /&gt;
|-&lt;br /&gt;
| hitnpc(int, float, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| hitobjects(float, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| hitplayer(int, float, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lay2(str extraname, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| loadmap(str mapfilename)&lt;br /&gt;
|&lt;br /&gt;
| Preloads a gmap on clientside, speeds up entering of new maps but is not required.&lt;br /&gt;
|-&lt;br /&gt;
| noplayerkilling()&lt;br /&gt;
|&lt;br /&gt;
| Disables killing of other players.&lt;br /&gt;
|-&lt;br /&gt;
| onwall(float x, float y)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if the specified x and y is a blocking tile.&lt;br /&gt;
|-&lt;br /&gt;
| onwall2(float x, float y, float width, float height)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if a blocking tile exists in the specified area.&lt;br /&gt;
|-&lt;br /&gt;
| onwater(float x, float y)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if the specified x and y is water.&lt;br /&gt;
|-&lt;br /&gt;
| onwater2(float x, float y, float width, float height)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if water exists in the specified area.&lt;br /&gt;
|-&lt;br /&gt;
| play(str soundfilename)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file.&lt;br /&gt;
|-&lt;br /&gt;
| play2(str soundfilename, float x, float y, float volume)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file at location x, y with the specified volume. Volume should be between 0 and 1, if volume is set to 1 default volume is used (depending on how far away the player is).&lt;br /&gt;
|-&lt;br /&gt;
| playlooped(str soundfilename)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file in a loop until stopsound() is called.&lt;br /&gt;
|-&lt;br /&gt;
| playlooped2(str soundfile, float x, float y, float volume)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file at location x, y with the specified volume in a loop until stopsound() is called. Volume should be between 0 and 1, if volume is set to 1 default volume is used (depending on how far away the player is).&lt;br /&gt;
|-&lt;br /&gt;
| putleaps(int leapstype, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| removetiledefs(str prefix)&lt;br /&gt;
|&lt;br /&gt;
| Remove tile definitions set by addtiledef and addtiledef2 for the specified prefix.&lt;br /&gt;
|-&lt;br /&gt;
| replaceani(str defaultaniname, str newaniname)&lt;br /&gt;
|&lt;br /&gt;
| replaces the player's default ani with the new ani.&lt;br /&gt;
|-&lt;br /&gt;
| resetfocus()&lt;br /&gt;
|&lt;br /&gt;
| Sets the screen focus to the player.&lt;br /&gt;
|-&lt;br /&gt;
| say(int signindex)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| say2(str text)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| screenx(float x, float y)&lt;br /&gt;
| integer&lt;br /&gt;
| returns the x of the screen layer for a location on the tiles layer.&lt;br /&gt;
|-&lt;br /&gt;
| screeny(float x, float y)&lt;br /&gt;
| integer&lt;br /&gt;
| returns the y of the screen layer for a location on the tiles layer.&lt;br /&gt;
|-&lt;br /&gt;
| worldx(float x, float y)&lt;br /&gt;
| float&lt;br /&gt;
| returns the x of the tiles layer for a location on the screen layer.&lt;br /&gt;
|-&lt;br /&gt;
| worldy(float x, float y)&lt;br /&gt;
| float&lt;br /&gt;
| returns the y of the tiles layer for a location on the screen layer.&lt;br /&gt;
|-&lt;br /&gt;
| setani(str aniname, str aniparams)&lt;br /&gt;
|&lt;br /&gt;
| Sets the gani of a player.&lt;br /&gt;
|-&lt;br /&gt;
| setbeltcolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setcoatcolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| seteffect(float red, float green, float blue, float alpha)&lt;br /&gt;
|&lt;br /&gt;
| Sets the color and alpha transparency of the current npc, use seteffectmode(1) to make the npc alpha-transparent instead of displaying as a light, see [[Creation/Dev/Script/Client/TServerNPC|TServerNPC]] for more.&lt;br /&gt;
|-&lt;br /&gt;
| setfocus(float x, float y)&lt;br /&gt;
|&lt;br /&gt;
| Sets the screen focus to the specified x and y.&lt;br /&gt;
|-&lt;br /&gt;
| setgender(str gendername)&lt;br /&gt;
|&lt;br /&gt;
| Sets the gender of a player.&lt;br /&gt;
|-&lt;br /&gt;
| sethead(str imagefilename)&lt;br /&gt;
|&lt;br /&gt;
| Sets the head of a player&lt;br /&gt;
|-&lt;br /&gt;
| setletters(str imagefilename)&lt;br /&gt;
|&lt;br /&gt;
| Sets the image to use for sign background and text.&lt;br /&gt;
|-&lt;br /&gt;
| setmap(str, str, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setminimap(str, str, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setmusicvolume(float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setplayerdir(str)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setshield(str imagefilename, int shieldpower)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setshoecolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setshootparams(str params)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setskincolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setsleevecolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setsword(str imagefilename, int swordpower)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| showstats(int statsflag)&lt;br /&gt;
|&lt;br /&gt;
| With this you can show/hide parts of the status bar / game&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Shows all&lt;br /&gt;
showstats(allstats);&lt;br /&gt;
&lt;br /&gt;
// Enable everything except minimap&lt;br /&gt;
showstats(allstats &amp;amp; ~0x100);&lt;br /&gt;
&lt;br /&gt;
// Enable everything except AP and MP bars&lt;br /&gt;
showstats(allstats &amp;amp; ~(0x40 | 0x80));&lt;br /&gt;
&lt;br /&gt;
// Enable only players and right-click profile&lt;br /&gt;
showstats(0x400 | 0x800);&lt;br /&gt;
&lt;br /&gt;
// Hides all&lt;br /&gt;
showstats(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flags can consist of:&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
  | '''Value'''&lt;br /&gt;
  | '''Description'''&lt;br /&gt;
  |-&lt;br /&gt;
  | 1&lt;br /&gt;
  | ASD&lt;br /&gt;
  |-&lt;br /&gt;
  | 2&lt;br /&gt;
  | Icons (for rupees, bombs, arrows)&lt;br /&gt;
  |-&lt;br /&gt;
  | 4&lt;br /&gt;
  | Rupees count&lt;br /&gt;
  |-&lt;br /&gt;
  | 8&lt;br /&gt;
  | Bombs count&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x10&lt;br /&gt;
  | Arrows count&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x20&lt;br /&gt;
  | Hearts&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x40&lt;br /&gt;
  | Alignment (ap) bar&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x80&lt;br /&gt;
  | Magic points (mp) bar&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x100&lt;br /&gt;
  | Minimap (you can only hide it, you can't show it when the player pressed Alt+3)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x200&lt;br /&gt;
  | Inventory NPCs&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x400&lt;br /&gt;
  | Players&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x800&lt;br /&gt;
  | Right-click on players opens their profile&lt;br /&gt;
  |-&lt;br /&gt;
  | allstats&lt;br /&gt;
  | All of the previously stated stats flags enabled&lt;br /&gt;
  |}&lt;br /&gt;
|-&lt;br /&gt;
| spyfire(int length, int power)&lt;br /&gt;
|&lt;br /&gt;
| Shoots a line of fire in the direction of the player with the specified tile length, and fire power (1 - bomb, 2 - super bomb, 3 - jolt bomb).&lt;br /&gt;
|-&lt;br /&gt;
| stopmidi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| stopsound(str soundfilename)&lt;br /&gt;
|&lt;br /&gt;
| Stop playing a sound started by playlooped&lt;br /&gt;
|-&lt;br /&gt;
| takeplayercarry()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| takeplayerhorse()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| testplayer(float x, float y)&lt;br /&gt;
| integer&lt;br /&gt;
| checks if there is a player on that position and returns the index of the player in players[], or -1 if there is none&lt;br /&gt;
|-&lt;br /&gt;
| triggeraction(float x, float y, str eventname, params...)&lt;br /&gt;
|&lt;br /&gt;
| Invokes an &amp;quot;onActionEventname&amp;quot; event on objects at the specified position, can be used to invoke events on objects from clientside to serverside and vice versa. &lt;br /&gt;
Special eventnames are &amp;quot;serverEventname&amp;quot; which will invoke an event on the Control-NPC (onActionEventname), or &amp;quot;serverside&amp;quot; which will invoke an onActionServerSide event on the weapon script specified by the first following parameter (the fourth parameter). It is recommended to use triggerserver() for that though.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
triggeraction(30, 30, &amp;quot;explode&amp;quot;, 5);&lt;br /&gt;
triggeraction(0, 0, &amp;quot;serverchat&amp;quot;, player.chat);&lt;br /&gt;
triggeraction(0, 0, &amp;quot;serverside&amp;quot;, &amp;quot;PlasmaGun&amp;quot;, &amp;quot;activate&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| triggerserver(str objecttype, str objectname, str params)&lt;br /&gt;
|&lt;br /&gt;
| Invokes an event on a serverside object, currently objecttype can only be &amp;quot;gui&amp;quot; or &amp;quot;weapon&amp;quot; (which is the same), objectname is the name of the weapon script, the invoked event will be &amp;quot;onActionServerSide&amp;quot;.&lt;br /&gt;
On Graal3D the event will be &amp;quot;onActionParam0&amp;quot; instead.&lt;br /&gt;
For invoking events on the clientside use player.triggerclient(objecttype,objectname,params) instead.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
triggerserver(&amp;quot;weapon&amp;quot;, &amp;quot;PlasmaGun&amp;quot;, &amp;quot;activate&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| updateboard(int x, int y, int width, int height)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| updateratings(obj)&lt;br /&gt;
| object&lt;br /&gt;
| Updates an array of {rating1,ratingdeviation1, rating2,ratingdeviation2, ...}, init them at 1500 and 350.&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
newratings = updateratings({winner.rating,winner.ratingd,loser.rating,loser.ratingd});&lt;br /&gt;
winner.rating = newratings[0];&lt;br /&gt;
winner.ratingd = newratings[1];&lt;br /&gt;
loser.rating = newratings[2];&lt;br /&gt;
loser.ratingd = newratings[3];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| wraptext(int fontsize, str format, str text)&lt;br /&gt;
| array of strings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| wraptext2(int pixelwidth, float zoom, str delimiters, str text)&lt;br /&gt;
| array of strings&lt;br /&gt;
| wraps the text so that it fits in the specified number of pixels and returns an array of text lines &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Graal 3D===&lt;br /&gt;
* getboxcenter(str box) - returns string&lt;br /&gt;
* get3dobjectat(float x, float y, bool doboxcollision) - returns object - gets the 3d object at the specified screen position, third parameter says if it should do box collision&lt;br /&gt;
* get3dobjectatmouse(bool doboxcollision) - returns object - gets the 3d object at the mouse, specify if it should do box collision (true)&lt;br /&gt;
* get3dobjectbyray(str vector, str vector) - returns object&lt;br /&gt;
* lightscene() - returns boolean&lt;br /&gt;
* setfogcolors(array)&lt;br /&gt;
* setinteriorrendermode(int)&lt;br /&gt;
* setskybandcolors(array)&lt;br /&gt;
* setskybandsizes(array)&lt;br /&gt;
* setsuncolors(array)&lt;br /&gt;
* setterrainrendermode(int)&lt;br /&gt;
* synctimeofday(float hour, float minute)&lt;br /&gt;
* updateterrain()&lt;br /&gt;
* updatevisibledistance()&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* adventure_installgraal(str, bool, bool)&lt;br /&gt;
* adventure_openexternaloptions() - returns boolean&lt;br /&gt;
* adventure_openexternalpm(obj) - returns boolean&lt;br /&gt;
* adventure_openserverlist()&lt;br /&gt;
* adventure_quit()&lt;br /&gt;
* adventure_reconnect()&lt;br /&gt;
* adventure_savegraaloptions()&lt;br /&gt;
* adventure_selectpath(str) - returns object&lt;br /&gt;
* adventure_setaccountname(str)&lt;br /&gt;
* adventure_setchat(str)&lt;br /&gt;
* adventure_setnickname(str)&lt;br /&gt;
* adventure_setpassword(str)&lt;br /&gt;
* adventure_startofflinemode()&lt;br /&gt;
* adventure_updateaccountfield()&lt;br /&gt;
* adventure_updatemicroactivationlevel()&lt;br /&gt;
* adventure_updatemidivolume()&lt;br /&gt;
* adventure_updatemp3volume()&lt;br /&gt;
* adventure_updateplayermuted()&lt;br /&gt;
* adventure_updateplayerprofile(bool, str, str, int, str, str, str, str, str, str)&lt;br /&gt;
* adventure_updateradiovolume()&lt;br /&gt;
&lt;br /&gt;
''(these functions are only available to privileged scripts from the Login server)''&lt;br /&gt;
&lt;br /&gt;
==Classes / Object Types==&lt;br /&gt;
* [[Creation/Dev/Script/Client/TGraalVar|TGraalVar]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/ActionMap|ActionMap]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/DTSAniThread|DTSAniThread]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GameMovementInterpolate|GameMovementInterpolate]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameMovementRigid|GameMovementRigid]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GameMovementList|GameMovementList]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GameShape|GameShape]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShape3DS|GameShape3DS]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShapeDIF|GameShapeDIF]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShapeDTS|GameShapeDTS]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShapeFT|GameShapeFT]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiControl|GuiControl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiArrayCtrl|GuiArrayCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiTextListCtrl|GuiTextListCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiTreeViewCtrl|GuiTreeViewCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiBitmapButtonCtrl|GuiBitmapButtonCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiBitmapCtrl|GuiBitmapCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiMapOverviewCtrl|GuiMapOverviewCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiButtonBaseCtrl|GuiButtonBaseCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiButtonCtrl|GuiButtonCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiCheckBoxCtrl|GuiCheckBoxCtrl]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/GuiRadioCtrl|GuiRadioCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiChunkedBitmapCtrl|GuiChunkedBitmapCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiContextMenuCtrl|GuiContextMenuCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiDrawingPanel|GuiDrawingPanel]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiFlash|GuiFlash]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiFrameSetCtrl|GuiFrameSetCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiGraal3DCtrl|GuiGraal3DCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiGraalCtrl|GuiGraalCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiMenuCtrl|GuiMenuCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiMLTextCtrl|GuiMLTextCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiMLTextEditCtrl|GuiMLTextEditCtrl]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/GuiPMEditCtrl|GuiPMEditCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPMCtrl|GuiPMCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPMHistoryCtrl|GuiPMHistoryCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiPlayerView|GuiPlayerView]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiProgressCtrl|GuiProgressCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiScrollCtrl|GuiScrollCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiShapeNameHud|GuiShapeNameHud]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiShowImgCtrl|GuiShowImgCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiSliderCtrl|GuiSliderCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiStretchCtrl|GuiStretchCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiTabCtrl|GuiTabCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiTextCtrl|GuiTextCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPopUpEditCtrl|GuiPopUpEditCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPopUpMenuCtrl|GuiPopUpMenuCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiTextEditCtrl|GuiTextEditCtrl]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/GuiTextEditSliderCtrl|GuiTextEditSliderCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiWindowCtrl|GuiWindowCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TerrainEditor|TerrainEditor]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/WorldEditor|WorldEditor]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiControlProfile|GuiControlProfile]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiCursor|GuiCursor]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiTabCtrlEntry|GuiTabCtrlEntry]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiTextListEntry|GuiTextListEntry]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiTreeViewNode|GuiTreeViewNode]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/MRandomGenerator|MRandomGenerator]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/MRandomLCG|MRandomLCG]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/MRandomR250|MRandomR250]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/SimObject|SimObject]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/SceneObject|SceneObject]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/fxSunLight|fxSunLight]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GameObject|GameObject]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/Camera|Camera]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/DynamicShapeReplicator|DynamicShapeReplicator]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/DynamicGrass|DynamicGrass]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/DynamicGrassReplicator|DynamicGrassReplicator]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/Sky|Sky]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TerrainBlock|TerrainBlock]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/twSurfaceReference|twSurfaceReference]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/WaterBlock|WaterBlock]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/SimGroup|SimGroup]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GameConnection|GameConnection]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/Sun|Sun]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TDrawableObject|TDrawableObject]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TBaddy|TBaddy]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TLevelObject|TLevelObject]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TExplosion|TExplosion]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TGaniObject|TGaniObject]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/TProjectile|TProjectile]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/TServerHorse|TServerHorse]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/TServerPlayer|TServerPlayer]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/TPlayer|TPlayer]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/TServerNPC|TServerNPC]]&lt;br /&gt;
******* [[Creation/Dev/Script/Client/TServerWeapon|TServerWeapon]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerBomb|TServerBomb]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerCarry|TServerCarry]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerChest|TServerChest]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerExtra|TServerExtra]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerFlying|TServerFlying]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerLeap|TServerLeap]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerSign|TServerSign]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TShowImg|TShowImg]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TDrawingPanel|TDrawingPanel]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/Terraformer|Terraformer]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TFrameDetail|TFrameDetail]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGaniParam|TGaniParam]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAni|TGraalAni]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniPart|TGraalAniPart]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniSound|TGraalAniSound]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniSprite|TGraalAniSprite]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniStep|TGraalAniStep]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalSpriteAttachment|TGraalSpriteAttachment]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TMovementRigid|TMovementRigid]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TParticle|TParticle]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TParticleEmitter|TParticleEmitter]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TParticleModifier|TParticleModifier]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TServerLevel|TServerLevel]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TServerLevelLink|TServerLevelLink]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TShapeMaterial|TShapeMaterial]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TShowImg_Values|TShowImg_Values]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Flash|TShowImg_Flash]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Gani|TShowImg_Gani]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Image|TShowImg_Image]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Shape|TShowImg_Shape]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Poly|TShowImg_Poly]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Text|TShowImg_Text]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TStaticVar|TStaticVar]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TTilesLayer|TTilesLayer]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TUpdatePackage|TUpdatePackage]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Client&amp;diff=7815</id>
		<title>Creation/Dev/Script/Client</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Client&amp;diff=7815"/>
		<updated>2006-12-30T18:46:07Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Matrices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Client Supported Script Features=&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| $camera::movementspeed&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::choosenvoicecodec&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivatebyvolume&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivationlevel&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microinputdevice&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microon&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microvolumefactor&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::midivolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::mp3volume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::radiovolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::reversestereo&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::sfxvolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::voicevolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::allowglobalpms&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::automapping&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontsize&lt;br /&gt;
| integer&lt;br /&gt;
| Change showtext zoom: $pref::graal::defaultfontsize/24&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontconnectlevels&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontloadlistheads&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepasswords&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepms&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedport&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedudpport&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::language&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::limitnicknames&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::loadbuddylistfromserver&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nicknamelimit&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nomassmessages&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::notoalls&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::noudp&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::showyourselfonbuddylists&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::input::mousesensitivity&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::interior::lockarrays&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::terrain::enabledetails&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::detailfactor&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fogdistance&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fullscreenmode&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::screenshotformat&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::visibledistance&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::windowmode&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $scenelighting::lightingprogress&lt;br /&gt;
| float (read only)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| allfeatures&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| for use with enablefeatures(), it's the default unless it is changed.&lt;br /&gt;
|-&lt;br /&gt;
| allplayerscount&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| The size of the allplayers array.&lt;br /&gt;
|-&lt;br /&gt;
| allrenderobjecttypes&lt;br /&gt;
| integer (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allstats&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| A bitflag of all stats currently enabled&lt;br /&gt;
|-&lt;br /&gt;
| canspin&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player has spin attack&lt;br /&gt;
|-&lt;br /&gt;
| carriesblackstone&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying a black stone&lt;br /&gt;
|-&lt;br /&gt;
| carriesbush&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying a bush&lt;br /&gt;
|-&lt;br /&gt;
| carriesnpc&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying an NPC.&lt;br /&gt;
|-&lt;br /&gt;
| carriessign&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if a player is carrying a sign.&lt;br /&gt;
|-&lt;br /&gt;
| carriesstone&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if a player is carrying a stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesvase&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if a player is carrying a vase.&lt;br /&gt;
|-&lt;br /&gt;
| downloadfile&lt;br /&gt;
| string (read only)&lt;br /&gt;
| Name of the file currently being downloaded&lt;br /&gt;
|-&lt;br /&gt;
| downloadpos&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Amount of download file already downloaded&lt;br /&gt;
|-&lt;br /&gt;
| downloadsize&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Size of the file being downloaded&lt;br /&gt;
|-&lt;br /&gt;
| editingmission&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| emoticonchar&lt;br /&gt;
| string (read only)&lt;br /&gt;
| The letter of the emoticon being displayed by the player&lt;br /&gt;
|-&lt;br /&gt;
| focusx&lt;br /&gt;
| float (read only)&lt;br /&gt;
| X coordinate of the center of playing screen in the level, offset -1.5&lt;br /&gt;
|-&lt;br /&gt;
| focusy&lt;br /&gt;
| float (read only)&lt;br /&gt;
| Y coordinate of the center of playing screen in the level, offset -2&lt;br /&gt;
|-&lt;br /&gt;
| graalversion&lt;br /&gt;
| float (read only)&lt;br /&gt;
| Graal version&lt;br /&gt;
|-&lt;br /&gt;
| gravity&lt;br /&gt;
| float&lt;br /&gt;
| Downward acceleration for projectiles ejected with the shoot() function.&lt;br /&gt;
|-&lt;br /&gt;
| iscarrying&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying anything&lt;br /&gt;
|-&lt;br /&gt;
| isfocused&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraal3d&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if you are running graal 3D&lt;br /&gt;
|-&lt;br /&gt;
| isleader&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player is the first person in the level&lt;br /&gt;
|-&lt;br /&gt;
| isonmap&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player is on a map&lt;br /&gt;
|-&lt;br /&gt;
| jpegquality&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lastdownloadfile&lt;br /&gt;
| string (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebutton&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the left mouse button is down&lt;br /&gt;
|-&lt;br /&gt;
| levelorgx&lt;br /&gt;
| float (read only)&lt;br /&gt;
| The x-value of the levels' origin (may deviate with attachplayertoobj)&lt;br /&gt;
|-&lt;br /&gt;
| levelorgy&lt;br /&gt;
| float (read only)&lt;br /&gt;
| The x-value of the levels' origin (may deviate with attachplayertoobj)&lt;br /&gt;
|-&lt;br /&gt;
| lighteffectsenabled&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player has enabled light effects&lt;br /&gt;
|-&lt;br /&gt;
| weathereffectsenabled&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player has enabled weather effects&lt;br /&gt;
|-&lt;br /&gt;
| particleeffectsenabled&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player has enabled particle effects&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebutton&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the middle mouse button is down&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttons&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Counts the amount of mousebuttons pressed&lt;br /&gt;
|-&lt;br /&gt;
| mousescreenx&lt;br /&gt;
| integer&lt;br /&gt;
| X coordinate of the mouse on the GUI layer&lt;br /&gt;
|-&lt;br /&gt;
| mousescreeny&lt;br /&gt;
| integer&lt;br /&gt;
| Y coordinate of the mouse on the GUI layer&lt;br /&gt;
|-&lt;br /&gt;
| mousewheeldelta&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Amount that the mouse scroll wheel was scrolled [(-) is up, (+) is down]&lt;br /&gt;
|-&lt;br /&gt;
| mousex&lt;br /&gt;
| float&lt;br /&gt;
| X coordinate of the mouse on the tile layer&lt;br /&gt;
|-&lt;br /&gt;
| mousey&lt;br /&gt;
| float&lt;br /&gt;
| Y coordinate of the mouse on the tile layer&lt;br /&gt;
|-&lt;br /&gt;
| musiclen&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| The duration of the playing sound file&lt;br /&gt;
|-&lt;br /&gt;
| musicpos&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| The position in the file at which the sound file is&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebutton&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the right mouse button is down&lt;br /&gt;
|-&lt;br /&gt;
| screenheight&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Height of the Graal window&lt;br /&gt;
|-&lt;br /&gt;
| screenwidth&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Width of the Graal window&lt;br /&gt;
|-&lt;br /&gt;
| scriptedcontrols&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scriptedplayerlist&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedlistplayers&lt;br /&gt;
| object&lt;br /&gt;
| an array of players highlighted on the playerlist&lt;br /&gt;
|-&lt;br /&gt;
| selectedsword&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedweapon&lt;br /&gt;
| integer&lt;br /&gt;
| Index of player.weapons that references the player's current weapon&lt;br /&gt;
|-&lt;br /&gt;
| servername&lt;br /&gt;
| string (read only)&lt;br /&gt;
| Name of the current server&lt;br /&gt;
|-&lt;br /&gt;
| serverstartconnect&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| serverstartparams&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| shotbybaddy&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player was shot by a baddy&lt;br /&gt;
|-&lt;br /&gt;
| shotbyplayer&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player was shot by another player&lt;br /&gt;
|-&lt;br /&gt;
| showterraingrid&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| A timer which is increased each 5 seconds and is snychronized between server and clients; The timer started exactly on 2001-02-01 at 18:33:34 Paris time (opening of Graal2001); on serverside the unixtime (timevar2) is around 981048814 + timevar*5&lt;br /&gt;
|-&lt;br /&gt;
| timevar2&lt;br /&gt;
| float (read only)&lt;br /&gt;
| Unix-time with a very high precision, not synchronized between server and client&lt;br /&gt;
|-&lt;br /&gt;
| timevar3 &lt;br /&gt;
| float (read only)&lt;br /&gt;
| synchronized time which works on both server- and client-side, precision is milliseconds, only available for Graal3D right now&lt;br /&gt;
|-&lt;br /&gt;
| wasshooted&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| waterheight&lt;br /&gt;
| float&lt;br /&gt;
| The height of water at the player's (x,y) on a terrain&lt;br /&gt;
|-&lt;br /&gt;
| weapons&lt;br /&gt;
| object (read only)&lt;br /&gt;
| An array of weapon objects&lt;br /&gt;
|-&lt;br /&gt;
| weaponsenabled&lt;br /&gt;
| boolean&lt;br /&gt;
| Are weapons enabled? (Player can trigger onWeaponFired...)&lt;br /&gt;
|-&lt;br /&gt;
| worldclockstopped&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldhour&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldminute&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldminutesofday&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldrealsecondsperday&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Variable Prefixes==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Prefix'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| object.var&lt;br /&gt;
| accesses the variables of the object. The object can be retrieved by using the case-sensitive name of the object or a variable pointing to the object.&lt;br /&gt;
|-&lt;br /&gt;
| this.var&lt;br /&gt;
| variables that belong to the current script object, on the server-side they are saved to file when the object is a database npc&lt;br /&gt;
|-&lt;br /&gt;
| thiso.var&lt;br /&gt;
| refer to the this. variables of the executing npc ('o' stands for original) when you use the with () command: with (findnpc(&amp;quot;npc2&amp;quot;)) thiso.temp = this.temp; will copy 'this.temp' from npc2 to the current npc&lt;br /&gt;
|-&lt;br /&gt;
| player.var&lt;br /&gt;
| variables of the current player object, when the event was invoked by a player (e.g. playertouchsme), or you do with (findplayer(accountname))&lt;br /&gt;
|-&lt;br /&gt;
| playero.var&lt;br /&gt;
| variables of the original player object, in generally the player who has invoked the event (e.g. playertouchsme)&lt;br /&gt;
|-&lt;br /&gt;
| client.var&lt;br /&gt;
| short for player.client.var, variables that can be changed on server-side and client-side&lt;br /&gt;
|-&lt;br /&gt;
| clientr.var&lt;br /&gt;
| short for player.clientr.var, variables that can only be changed on server-side but can be read on client-side&lt;br /&gt;
|-&lt;br /&gt;
| server.var&lt;br /&gt;
| variables that only exists on server-side and can be accessed by all npcs&lt;br /&gt;
|-&lt;br /&gt;
| serverr.var&lt;br /&gt;
| variables that can only be changed on server-side and is server wide, but can also be read by all clients, so it can be used for storing the state of global activities that need client-side actions like displaying weather; like server. vars they can also be changed with remotecontrol.exe by administrators that have the right to change server. variables&lt;br /&gt;
|-&lt;br /&gt;
| level.var&lt;br /&gt;
| variables of the current level, which is the level the executing npc stands in (on server-side) or the player is in (on client-side)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
''Note: Currently this doesn't list the functions which are optimized at compile time, see [[Creation/Dev/Script/Starting_Guide#Standard_functions|Starting Guide: Standard functions]] for those.''&lt;br /&gt;
&lt;br /&gt;
===Common===&lt;br /&gt;
* aindexof(float, array) - returns integer, better use array.index(float) instead&lt;br /&gt;
* echo(str text) - prints text in the F2 window (clientside) or RC chat (serverside)&lt;br /&gt;
* getbasepackage() - returns [[Creation/Dev/Script/Client/TUpdatePackage|TUpdatePackage]] object&lt;br /&gt;
* getdownloadedupdatepackagesize() - returns integer&lt;br /&gt;
* getdownloadingpackage() - returns [[Creation/Dev/Script/Client/TUpdatePackage|TUpdatePackage]] object&lt;br /&gt;
* getdownloadingpackagescount() - returns integer&lt;br /&gt;
* gethttprequest(str, int, str) - returns [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]] object&lt;br /&gt;
* getkeycode(str keyname) - returns integer&lt;br /&gt;
* getpackagesdownloadcomplete() - returns boolean&lt;br /&gt;
* getpackagesdownloaded() - returns boolean&lt;br /&gt;
* getplatform() - returns string&lt;br /&gt;
* getservername() - returns string&lt;br /&gt;
* gettotalupdatepackagesize() - returns integer&lt;br /&gt;
* getupdatepackage(str) - returns object&lt;br /&gt;
* isadminguild(str guildname) - returns boolean&lt;br /&gt;
* isobject(str objectname) - returns boolean, checks if an object is existing&lt;br /&gt;
* keydown(int keynumber) - returns if the specified key is pressed (0..10: up, left, down, right, S, A, D, M, tab, Q, P)&lt;br /&gt;
* keydown2(int keycode, bool ignorecase) - returns boolean&lt;br /&gt;
* keyname(int keycode) - returns string&lt;br /&gt;
* opengraalurl(str url) - opens a website of www.graalonline.com and automatically lets the player login to it (e.g. for the upgrade page or screenshot section)&lt;br /&gt;
* openurl(str url)&lt;br /&gt;
* openurl2(str url, int width, int height) - deprecated, width and height are ignored&lt;br /&gt;
* requesthttp(str, int, str) - returns [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]] object&lt;br /&gt;
* requesttext(str type, str option)&lt;br /&gt;
* requesturl(str url) - returns [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]] object&lt;br /&gt;
* savelog(str text)&lt;br /&gt;
* savelog2(str filename, str text) - adds a log entry to &amp;quot;logs/filename&amp;quot;&lt;br /&gt;
* sendrpgmessage(str text) - adds text to the F2 window&lt;br /&gt;
* sendtext(str type, str option, params...)&lt;br /&gt;
* sendtorc(str text) - serverside only, displays text on the RC chat&lt;br /&gt;
* serverwarp(str servername) - the name can either be the internal name (graal2002) or part of the server name on the serverlist&lt;br /&gt;
&lt;br /&gt;
====Files====&lt;br /&gt;
* extractfilebase(str filepath) - returns string, '/an/example/path/and/file' would return '/an/example/path/and/'&lt;br /&gt;
* extractfileext(str filepath) - returns string, 'filename.ext' would return '.ext'&lt;br /&gt;
* extractfilename(str filepath) - returns string, '/an/example/path/and/file' would return 'file'&lt;br /&gt;
* extractfilepath(str filepath) - returns string, '/an/example/path/and/file' would return '/an/example/path/and/'&lt;br /&gt;
* fileexists(str filepath) - returns boolean, checks if a file exists&lt;br /&gt;
* filesize(str filepath) - returns integer, returns the size of a file&lt;br /&gt;
* fileupdate(str filepath) - returns boolean, checks if a file is existing and requests an update from the server if it has not been checked yet&lt;br /&gt;
* findfiles(str filenamepattern, flags) - returns array of strings, flags can be either 1 for recursive search or 0 for non-recursive&lt;br /&gt;
* freefileresources(str)&lt;br /&gt;
* getextension(str filepath) - returns string, 'filename.ext' would return '.ext'&lt;br /&gt;
* reloadfile(str filepath)&lt;br /&gt;
* requestfiledeletion(str filepath), requests a file to be deleted on the server&lt;br /&gt;
* requestfilerename(str filepath, str newfilepath), requests a file to be renamed on the server&lt;br /&gt;
* requestfilesmove(str filepath, str newfilepath), requests a file to be moved on the server&lt;br /&gt;
* selectfilefordownload(str filter)&lt;br /&gt;
* selectfileforupload()&lt;br /&gt;
&lt;br /&gt;
''Watch the [[Creation/Dev/Script/Client/TGraalVar|TGraalVar]] object for loading and saving of files (loadlines etc.)''&lt;br /&gt;
&lt;br /&gt;
''See more information about input/output at [[Creation/Dev/Output Methods|Output methods]]''&lt;br /&gt;
&lt;br /&gt;
====Math====&lt;br /&gt;
* degtorad(float value) - returns float&lt;br /&gt;
* radtodeg(float value) - returns float&lt;br /&gt;
&lt;br /&gt;
=====Matrices=====&lt;br /&gt;
GraalScript matricies are an array of seven elements: three describing translation, three describing rotation, and one describing angle.&lt;br /&gt;
* [[Matrix#matrixcreate()|matrixcreate]](str vector, str rotation) - returns matrix string&lt;br /&gt;
* matrixcreatefromeuler(str eulerrotation) - returns matrix string&lt;br /&gt;
* matrixmulpoint(str, str) - returns string&lt;br /&gt;
* matrixmultiply(str matrix, str matrix) - returns matrix string&lt;br /&gt;
* matrixmulvector(str matrix, str vector) - returns vector string&lt;br /&gt;
&lt;br /&gt;
=====Vectors=====&lt;br /&gt;
Each [[Vectors|vector]] is basicly an array of format {x,y,z} but is passed as string for simplicity. Click on the function names to see more information about the vector operations.&lt;br /&gt;
* [[Vectors#Vector_Addition|vectoradd]](vector, vector) - returns vector&lt;br /&gt;
* [[Cross Product|vectorcross]](vector, vector) - returns vector&lt;br /&gt;
* [[Vectors#Distance_Between_Terminal_Points|vectordist]](vector, vector) - returns float&lt;br /&gt;
* [[Dot Product|vectordot]](vector, vector) - returns float&lt;br /&gt;
* [[Vectors#Vector_Length_.28Magnitude.29|vectorlen]](vector) - returns float&lt;br /&gt;
* [[Vectors#Unit_Length|vectornormalize]](vector) - returns vector, scales the vector to length 1&lt;br /&gt;
* vectororthobasis(vector) - returns vector&lt;br /&gt;
* [[Vectors#Vector-Scalar_Multiplication|vectorscale]](vector, float) - returns vector&lt;br /&gt;
* [[Vectors#Vector_Subtraction|vectorsub]](vector, vector) - returns vector&lt;br /&gt;
&lt;br /&gt;
====Strings====&lt;br /&gt;
* base64decode(str text) - returns decoded string&lt;br /&gt;
* base64encode(str text) - returns encoded string&lt;br /&gt;
* checksum(str text) - returns checksum float&lt;br /&gt;
* contains(str haystack, str needle) - returns boolean, you should probably do haystack.contains(needle) instead&lt;br /&gt;
* getascii(str character) - returns ascii value integer&lt;br /&gt;
* getstringkeys(str leading) - searchs for variables which start with the specified string and returns and array of their ending&lt;br /&gt;
* lowercase(str text) - returns lowercased string, it is recommended to use string.lower() though&lt;br /&gt;
* md5(str text) - returns md5 hash string&lt;br /&gt;
* randomstring(array of strings) - returns string&lt;br /&gt;
* strcmp(str text1, str text2) - returns integer&lt;br /&gt;
* strequals(str text1, str text2) - returns boolean, you probably should do text1.equals(text2) instead&lt;br /&gt;
* uppercase(str text) - returns uppercased string, it is recommended to use string.upper() though&lt;br /&gt;
&lt;br /&gt;
===GUI===&lt;br /&gt;
* addcontrol(obj) - adds a GUI control or a 3D-object to the scene&lt;br /&gt;
* cursoroff()&lt;br /&gt;
* cursoron()&lt;br /&gt;
* iscursoron() - returns boolean&lt;br /&gt;
* popdialog() - removes the top dialog control&lt;br /&gt;
* pushdialog(obj) - displays a control on top of all other controls, this control gains all focus until it is removed again&lt;br /&gt;
* setcontentcontrol(obj) - replaces the current content control (usually named GUIContainer) with another one&lt;br /&gt;
&lt;br /&gt;
===Graal 2D===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef(str tilesetimage, str prefix, int tilesettype)&lt;br /&gt;
|&lt;br /&gt;
| Sets the tileset image for levels beginning with the specified prefix.&lt;br /&gt;
Tileset type 0 is for pics1.png style tilesets.&lt;br /&gt;
Tileset type 1 is for the new tileset format (Era's tiles for example)&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef2(str tilesetimage, str prefix, int x, int y)&lt;br /&gt;
|&lt;br /&gt;
| Replaces a section of the tileset (x, y) image for levels beginning with the specified prefix.&lt;br /&gt;
|-&lt;br /&gt;
| attachplayertoobj(int objtype, int id)&lt;br /&gt;
|&lt;br /&gt;
| Attaches a player to the specified object. Using attachpayertoobj(0, id); the player will be attached to the current NPC.&lt;br /&gt;
|-&lt;br /&gt;
| callnpc(int npcindex, params...)&lt;br /&gt;
|&lt;br /&gt;
| Invokes an event on an npc, better use npcs[npcindex].trigger(event, params) instead; you can only trigger objects this way that are on your side of clientside/serverside&lt;br /&gt;
|-&lt;br /&gt;
| callweapon(int weaponindex, params...)&lt;br /&gt;
|&lt;br /&gt;
| Invokes a trigger on a weapon, better use weapons[weaponindex].trigger(event, params) instead&lt;br /&gt;
|-&lt;br /&gt;
| detachplayer()&lt;br /&gt;
|&lt;br /&gt;
| Puts the player back on the level (after using attachplayertoobj).&lt;br /&gt;
|-&lt;br /&gt;
| disabledefmovement()&lt;br /&gt;
|&lt;br /&gt;
| Disables the default movement.&lt;br /&gt;
|-&lt;br /&gt;
| disablemap()&lt;br /&gt;
|&lt;br /&gt;
| Disables the default map&lt;br /&gt;
|-&lt;br /&gt;
| disablepause()&lt;br /&gt;
|&lt;br /&gt;
| Disables pausing.&lt;br /&gt;
|-&lt;br /&gt;
| disableselectweapons()&lt;br /&gt;
|&lt;br /&gt;
| Disables the default Q menu.&lt;br /&gt;
|-&lt;br /&gt;
| disableweapons()&lt;br /&gt;
|&lt;br /&gt;
| Disables weapons.&lt;br /&gt;
|-&lt;br /&gt;
| enabledefmovement()&lt;br /&gt;
|&lt;br /&gt;
| Enables default movement&lt;br /&gt;
|-&lt;br /&gt;
| enablefeatures(int flags)&lt;br /&gt;
| &lt;br /&gt;
| Enable/disable client features&lt;br /&gt;
&lt;br /&gt;
Flags can consist of:&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
  | '''Value'''&lt;br /&gt;
  | '''Description'''&lt;br /&gt;
  |-&lt;br /&gt;
  | 1&lt;br /&gt;
  | M key (map)&lt;br /&gt;
  |-&lt;br /&gt;
  | 2&lt;br /&gt;
  | P key (pause)&lt;br /&gt;
  |-&lt;br /&gt;
  | 4&lt;br /&gt;
  | Q key (weapon select)&lt;br /&gt;
  |-&lt;br /&gt;
  | 8&lt;br /&gt;
  | R key (show ratings)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x10&lt;br /&gt;
  | S+A key combination for dropping items&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x20&lt;br /&gt;
  | S+D key combination for switching weapons&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x40&lt;br /&gt;
  | TAB key (if disabled then you cannot switch to the chat field with TAB)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x80&lt;br /&gt;
  | Display of chat text&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x100&lt;br /&gt;
  | Display of the hearts over player heads&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x200&lt;br /&gt;
  | Display of nicknames&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x400&lt;br /&gt;
  | Toall/PM-icons on the minimap&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x800&lt;br /&gt;
  | Right-click on players opens their profile&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x1000&lt;br /&gt;
  | Emoticons (disable it if you want to do other stuff with control+keys)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x2000&lt;br /&gt;
  | Alt+5 for making snapshots  ''(deprecated)''&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x4000&lt;br /&gt;
  | Alt+8/9 for zooming ''(deprecated)''&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x8000&lt;br /&gt;
  | The logframe where savelog stuff is added&lt;br /&gt;
  |-&lt;br /&gt;
  | allfeatures&lt;br /&gt;
  | All of the previously stated feature flags enabled&lt;br /&gt;
  |}&lt;br /&gt;
|-&lt;br /&gt;
| enablemap()&lt;br /&gt;
|&lt;br /&gt;
| Enables default map.&lt;br /&gt;
|-&lt;br /&gt;
| enablepause()&lt;br /&gt;
|&lt;br /&gt;
| Enables pausing.&lt;br /&gt;
|-&lt;br /&gt;
| enableselectweapons()&lt;br /&gt;
|&lt;br /&gt;
| Enables default Q menu.&lt;br /&gt;
|-&lt;br /&gt;
| enableweapons()&lt;br /&gt;
|&lt;br /&gt;
| Enables weapons.&lt;br /&gt;
|-&lt;br /&gt;
| explodebomb(int bombindex)&lt;br /&gt;
|&lt;br /&gt;
| Explodes a bomb with the specified index.&lt;br /&gt;
|-&lt;br /&gt;
| findani(str)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TGraalAni|TGraalAni]] object&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| findlevel(str levelfilename)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerLevel|TServerLevel]] object&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| findplayer(str accountname)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerPlayer|TServerPlayer]] object&lt;br /&gt;
| Returns player object of Account specified. Player must be online.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbyid(int playerid)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerPlayer|TServerPlayer]] object&lt;br /&gt;
| Returns player object of id specified. If id isn't available, returns false.&lt;br /&gt;
|-&lt;br /&gt;
| findweapon(str weaponname)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerWeapon|TServerWeapon]] object&lt;br /&gt;
| Returns weapon object of name specified. Returns false if weapon doesn't exist.&lt;br /&gt;
|-&lt;br /&gt;
| freezeplayer(float seconds)&lt;br /&gt;
|&lt;br /&gt;
| Freezes player for a specific amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| getimgheight(str imagefilename)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the height (in pixels) of an image.&lt;br /&gt;
|-&lt;br /&gt;
| getimgwidth(str imagefilename)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the width (in pixels) of an image.&lt;br /&gt;
|-&lt;br /&gt;
| getmapx(str levelname)&lt;br /&gt;
| integer&lt;br /&gt;
| X coordinate of the level on a map (top-left level is 0)&lt;br /&gt;
|-&lt;br /&gt;
| getmapy(str levelname)&lt;br /&gt;
| integer&lt;br /&gt;
| Y coordinate of the level on a map (top-left level is 0)&lt;br /&gt;
|-&lt;br /&gt;
| gettextheight(float, str, str)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the height of the font. Format:&lt;br /&gt;
  gettextheight(zoom, font, style)&lt;br /&gt;
|-&lt;br /&gt;
| gettextwidth(float, str, str, str)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the width of a specified text in a certain font. Format:&lt;br /&gt;
  gettextwidth(zoom, font, style, text)&lt;br /&gt;
|-&lt;br /&gt;
| getz(float x, float y)&lt;br /&gt;
| float&lt;br /&gt;
| Returns the z value of a terrain at (x,y).&lt;br /&gt;
|-&lt;br /&gt;
| graalcontrolhasfocus(bool) &lt;br /&gt;
| boolean &lt;br /&gt;
| parameter says if it should also check if the chat bar has the focus&lt;br /&gt;
|-&lt;br /&gt;
| hideplayer(float seconds)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player for ''seconds'' seconds.&lt;br /&gt;
|-&lt;br /&gt;
| hidesword(float seconds)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player's sword for ''seconds'' seconds.&lt;br /&gt;
|-&lt;br /&gt;
| hitnpc(int, float, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| hitobjects(float, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| hitplayer(int, float, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lay2(str extraname, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| loadmap(str mapfilename)&lt;br /&gt;
|&lt;br /&gt;
| Preloads a gmap on clientside, speeds up entering of new maps but is not required.&lt;br /&gt;
|-&lt;br /&gt;
| noplayerkilling()&lt;br /&gt;
|&lt;br /&gt;
| Disables killing of other players.&lt;br /&gt;
|-&lt;br /&gt;
| onwall(float x, float y)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if the specified x and y is a blocking tile.&lt;br /&gt;
|-&lt;br /&gt;
| onwall2(float x, float y, float width, float height)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if a blocking tile exists in the specified area.&lt;br /&gt;
|-&lt;br /&gt;
| onwater(float x, float y)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if the specified x and y is water.&lt;br /&gt;
|-&lt;br /&gt;
| onwater2(float x, float y, float width, float height)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if water exists in the specified area.&lt;br /&gt;
|-&lt;br /&gt;
| play(str soundfilename)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file.&lt;br /&gt;
|-&lt;br /&gt;
| play2(str soundfilename, float x, float y, float volume)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file at location x, y with the specified volume. Volume should be between 0 and 1, if volume is set to 1 default volume is used (depending on how far away the player is).&lt;br /&gt;
|-&lt;br /&gt;
| playlooped(str soundfilename)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file in a loop until stopsound() is called.&lt;br /&gt;
|-&lt;br /&gt;
| playlooped2(str soundfile, float x, float y, float volume)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file at location x, y with the specified volume in a loop until stopsound() is called. Volume should be between 0 and 1, if volume is set to 1 default volume is used (depending on how far away the player is).&lt;br /&gt;
|-&lt;br /&gt;
| putleaps(int leapstype, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| removetiledefs(str prefix)&lt;br /&gt;
|&lt;br /&gt;
| Remove tile definitions set by addtiledef and addtiledef2 for the specified prefix.&lt;br /&gt;
|-&lt;br /&gt;
| replaceani(str defaultaniname, str newaniname)&lt;br /&gt;
|&lt;br /&gt;
| replaces the player's default ani with the new ani.&lt;br /&gt;
|-&lt;br /&gt;
| resetfocus()&lt;br /&gt;
|&lt;br /&gt;
| Sets the screen focus to the player.&lt;br /&gt;
|-&lt;br /&gt;
| say(int signindex)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| say2(str text)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| screenx(float x, float y)&lt;br /&gt;
| integer&lt;br /&gt;
| returns the x of the screen layer for a location on the tiles layer.&lt;br /&gt;
|-&lt;br /&gt;
| screeny(float x, float y)&lt;br /&gt;
| integer&lt;br /&gt;
| returns the y of the screen layer for a location on the tiles layer.&lt;br /&gt;
|-&lt;br /&gt;
| worldx(float x, float y)&lt;br /&gt;
| float&lt;br /&gt;
| returns the x of the tiles layer for a location on the screen layer.&lt;br /&gt;
|-&lt;br /&gt;
| worldy(float x, float y)&lt;br /&gt;
| float&lt;br /&gt;
| returns the y of the tiles layer for a location on the screen layer.&lt;br /&gt;
|-&lt;br /&gt;
| setani(str aniname, str aniparams)&lt;br /&gt;
|&lt;br /&gt;
| Sets the gani of a player.&lt;br /&gt;
|-&lt;br /&gt;
| setbeltcolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setcoatcolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| seteffect(float red, float green, float blue, float alpha)&lt;br /&gt;
|&lt;br /&gt;
| Sets the color and alpha transparency of the current npc, use seteffectmode(1) to make the npc alpha-transparent instead of displaying as a light, see [[Creation/Dev/Script/Client/TServerNPC|TServerNPC]] for more.&lt;br /&gt;
|-&lt;br /&gt;
| setfocus(float x, float y)&lt;br /&gt;
|&lt;br /&gt;
| Sets the screen focus to the specified x and y.&lt;br /&gt;
|-&lt;br /&gt;
| setgender(str gendername)&lt;br /&gt;
|&lt;br /&gt;
| Sets the gender of a player.&lt;br /&gt;
|-&lt;br /&gt;
| sethead(str imagefilename)&lt;br /&gt;
|&lt;br /&gt;
| Sets the head of a player&lt;br /&gt;
|-&lt;br /&gt;
| setletters(str imagefilename)&lt;br /&gt;
|&lt;br /&gt;
| Sets the image to use for sign background and text.&lt;br /&gt;
|-&lt;br /&gt;
| setmap(str, str, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setminimap(str, str, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setmusicvolume(float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setplayerdir(str)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setshield(str imagefilename, int shieldpower)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setshoecolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setshootparams(str params)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setskincolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setsleevecolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setsword(str imagefilename, int swordpower)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| showstats(int statsflag)&lt;br /&gt;
|&lt;br /&gt;
| With this you can show/hide parts of the status bar / game&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Shows all&lt;br /&gt;
showstats(allstats);&lt;br /&gt;
&lt;br /&gt;
// Enable everything except minimap&lt;br /&gt;
showstats(allstats &amp;amp; ~0x100);&lt;br /&gt;
&lt;br /&gt;
// Enable everything except AP and MP bars&lt;br /&gt;
showstats(allstats &amp;amp; ~(0x40 | 0x80));&lt;br /&gt;
&lt;br /&gt;
// Enable only players and right-click profile&lt;br /&gt;
showstats(0x400 | 0x800);&lt;br /&gt;
&lt;br /&gt;
// Hides all&lt;br /&gt;
showstats(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flags can consist of:&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
  | '''Value'''&lt;br /&gt;
  | '''Description'''&lt;br /&gt;
  |-&lt;br /&gt;
  | 1&lt;br /&gt;
  | ASD&lt;br /&gt;
  |-&lt;br /&gt;
  | 2&lt;br /&gt;
  | Icons (for rupees, bombs, arrows)&lt;br /&gt;
  |-&lt;br /&gt;
  | 4&lt;br /&gt;
  | Rupees count&lt;br /&gt;
  |-&lt;br /&gt;
  | 8&lt;br /&gt;
  | Bombs count&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x10&lt;br /&gt;
  | Arrows count&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x20&lt;br /&gt;
  | Hearts&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x40&lt;br /&gt;
  | Alignment (ap) bar&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x80&lt;br /&gt;
  | Magic points (mp) bar&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x100&lt;br /&gt;
  | Minimap (you can only hide it, you can't show it when the player pressed Alt+3)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x200&lt;br /&gt;
  | Inventory NPCs&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x400&lt;br /&gt;
  | Players&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x800&lt;br /&gt;
  | Right-click on players opens their profile&lt;br /&gt;
  |-&lt;br /&gt;
  | allstats&lt;br /&gt;
  | All of the previously stated stats flags enabled&lt;br /&gt;
  |}&lt;br /&gt;
|-&lt;br /&gt;
| spyfire(int length, int power)&lt;br /&gt;
|&lt;br /&gt;
| Shoots a line of fire in the direction of the player with the specified tile length, and fire power (1 - bomb, 2 - super bomb, 3 - jolt bomb).&lt;br /&gt;
|-&lt;br /&gt;
| stopmidi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| stopsound(str soundfilename)&lt;br /&gt;
|&lt;br /&gt;
| Stop playing a sound started by playlooped&lt;br /&gt;
|-&lt;br /&gt;
| takeplayercarry()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| takeplayerhorse()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| testplayer(float x, float y)&lt;br /&gt;
| integer&lt;br /&gt;
| checks if there is a player on that position and returns the index of the player in players[], or -1 if there is none&lt;br /&gt;
|-&lt;br /&gt;
| triggeraction(float x, float y, str eventname, params...)&lt;br /&gt;
|&lt;br /&gt;
| Invokes an &amp;quot;onActionEventname&amp;quot; event on objects at the specified position, can be used to invoke events on objects from clientside to serverside and vice versa. &lt;br /&gt;
Special eventnames are &amp;quot;serverEventname&amp;quot; which will invoke an event on the Control-NPC (onActionEventname), or &amp;quot;serverside&amp;quot; which will invoke an onActionServerSide event on the weapon script specified by the first following parameter (the fourth parameter). It is recommended to use triggerserver() for that though.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
triggeraction(30, 30, &amp;quot;explode&amp;quot;, 5);&lt;br /&gt;
triggeraction(0, 0, &amp;quot;serverchat&amp;quot;, player.chat);&lt;br /&gt;
triggeraction(0, 0, &amp;quot;serverside&amp;quot;, &amp;quot;PlasmaGun&amp;quot;, &amp;quot;activate&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| triggerserver(str objecttype, str objectname, str params)&lt;br /&gt;
|&lt;br /&gt;
| Invokes an event on a serverside object, currently objecttype can only be &amp;quot;gui&amp;quot; or &amp;quot;weapon&amp;quot; (which is the same), objectname is the name of the weapon script, the invoked event will be &amp;quot;onActionServerSide&amp;quot;.&lt;br /&gt;
On Graal3D the event will be &amp;quot;onActionParam0&amp;quot; instead.&lt;br /&gt;
For invoking events on the clientside use player.triggerclient(objecttype,objectname,params) instead.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
triggerserver(&amp;quot;weapon&amp;quot;, &amp;quot;PlasmaGun&amp;quot;, &amp;quot;activate&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| updateboard(int x, int y, int width, int height)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| updateratings(obj)&lt;br /&gt;
| object&lt;br /&gt;
| Updates an array of {rating1,ratingdeviation1, rating2,ratingdeviation2, ...}, init them at 1500 and 350.&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
newratings = updateratings({winner.rating,winner.ratingd,loser.rating,loser.ratingd});&lt;br /&gt;
winner.rating = newratings[0];&lt;br /&gt;
winner.ratingd = newratings[1];&lt;br /&gt;
loser.rating = newratings[2];&lt;br /&gt;
loser.ratingd = newratings[3];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| wraptext(int fontsize, str format, str text)&lt;br /&gt;
| array of strings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| wraptext2(int pixelwidth, float zoom, str delimiters, str text)&lt;br /&gt;
| array of strings&lt;br /&gt;
| wraps the text so that it fits in the specified number of pixels and returns an array of text lines &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Graal 3D===&lt;br /&gt;
* getboxcenter(str box) - returns string&lt;br /&gt;
* get3dobjectat(float x, float y, bool doboxcollision) - returns object - gets the 3d object at the specified screen position, third parameter says if it should do box collision&lt;br /&gt;
* get3dobjectatmouse(bool doboxcollision) - returns object - gets the 3d object at the mouse, specify if it should do box collision (true)&lt;br /&gt;
* get3dobjectbyray(str vector, str vector) - returns object&lt;br /&gt;
* lightscene() - returns boolean&lt;br /&gt;
* setfogcolors(array)&lt;br /&gt;
* setinteriorrendermode(int)&lt;br /&gt;
* setskybandcolors(array)&lt;br /&gt;
* setskybandsizes(array)&lt;br /&gt;
* setsuncolors(array)&lt;br /&gt;
* setterrainrendermode(int)&lt;br /&gt;
* synctimeofday(float hour, float minute)&lt;br /&gt;
* updateterrain()&lt;br /&gt;
* updatevisibledistance()&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* adventure_installgraal(str, bool, bool)&lt;br /&gt;
* adventure_openexternaloptions() - returns boolean&lt;br /&gt;
* adventure_openexternalpm(obj) - returns boolean&lt;br /&gt;
* adventure_openserverlist()&lt;br /&gt;
* adventure_quit()&lt;br /&gt;
* adventure_reconnect()&lt;br /&gt;
* adventure_savegraaloptions()&lt;br /&gt;
* adventure_selectpath(str) - returns object&lt;br /&gt;
* adventure_setaccountname(str)&lt;br /&gt;
* adventure_setchat(str)&lt;br /&gt;
* adventure_setnickname(str)&lt;br /&gt;
* adventure_setpassword(str)&lt;br /&gt;
* adventure_startofflinemode()&lt;br /&gt;
* adventure_updateaccountfield()&lt;br /&gt;
* adventure_updatemicroactivationlevel()&lt;br /&gt;
* adventure_updatemidivolume()&lt;br /&gt;
* adventure_updatemp3volume()&lt;br /&gt;
* adventure_updateplayermuted()&lt;br /&gt;
* adventure_updateplayerprofile(bool, str, str, int, str, str, str, str, str, str)&lt;br /&gt;
* adventure_updateradiovolume()&lt;br /&gt;
&lt;br /&gt;
''(these functions are only available to privileged scripts from the Login server)''&lt;br /&gt;
&lt;br /&gt;
==Classes / Object Types==&lt;br /&gt;
* [[Creation/Dev/Script/Client/TGraalVar|TGraalVar]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/ActionMap|ActionMap]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/DTSAniThread|DTSAniThread]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GameMovementInterpolate|GameMovementInterpolate]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameMovementRigid|GameMovementRigid]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GameMovementList|GameMovementList]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GameShape|GameShape]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShape3DS|GameShape3DS]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShapeDIF|GameShapeDIF]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShapeDTS|GameShapeDTS]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShapeFT|GameShapeFT]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiControl|GuiControl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiArrayCtrl|GuiArrayCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiTextListCtrl|GuiTextListCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiTreeViewCtrl|GuiTreeViewCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiBitmapButtonCtrl|GuiBitmapButtonCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiBitmapCtrl|GuiBitmapCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiMapOverviewCtrl|GuiMapOverviewCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiButtonBaseCtrl|GuiButtonBaseCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiButtonCtrl|GuiButtonCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiCheckBoxCtrl|GuiCheckBoxCtrl]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/GuiRadioCtrl|GuiRadioCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiChunkedBitmapCtrl|GuiChunkedBitmapCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiContextMenuCtrl|GuiContextMenuCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiDrawingPanel|GuiDrawingPanel]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiFlash|GuiFlash]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiFrameSetCtrl|GuiFrameSetCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiGraal3DCtrl|GuiGraal3DCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiGraalCtrl|GuiGraalCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiMenuCtrl|GuiMenuCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiMLTextCtrl|GuiMLTextCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiMLTextEditCtrl|GuiMLTextEditCtrl]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/GuiPMEditCtrl|GuiPMEditCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPMCtrl|GuiPMCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPMHistoryCtrl|GuiPMHistoryCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiPlayerView|GuiPlayerView]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiProgressCtrl|GuiProgressCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiScrollCtrl|GuiScrollCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiShapeNameHud|GuiShapeNameHud]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiShowImgCtrl|GuiShowImgCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiSliderCtrl|GuiSliderCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiStretchCtrl|GuiStretchCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiTabCtrl|GuiTabCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiTextCtrl|GuiTextCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPopUpEditCtrl|GuiPopUpEditCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPopUpMenuCtrl|GuiPopUpMenuCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiTextEditCtrl|GuiTextEditCtrl]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/GuiTextEditSliderCtrl|GuiTextEditSliderCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiWindowCtrl|GuiWindowCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TerrainEditor|TerrainEditor]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/WorldEditor|WorldEditor]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiControlProfile|GuiControlProfile]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiCursor|GuiCursor]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiTabCtrlEntry|GuiTabCtrlEntry]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiTextListEntry|GuiTextListEntry]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiTreeViewNode|GuiTreeViewNode]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/MRandomGenerator|MRandomGenerator]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/MRandomLCG|MRandomLCG]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/MRandomR250|MRandomR250]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/SimObject|SimObject]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/SceneObject|SceneObject]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/fxSunLight|fxSunLight]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GameObject|GameObject]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/Camera|Camera]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/DynamicShapeReplicator|DynamicShapeReplicator]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/DynamicGrass|DynamicGrass]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/DynamicGrassReplicator|DynamicGrassReplicator]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/Sky|Sky]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TerrainBlock|TerrainBlock]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/twSurfaceReference|twSurfaceReference]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/WaterBlock|WaterBlock]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/SimGroup|SimGroup]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GameConnection|GameConnection]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/Sun|Sun]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TDrawableObject|TDrawableObject]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TBaddy|TBaddy]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TLevelObject|TLevelObject]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TExplosion|TExplosion]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TGaniObject|TGaniObject]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/TProjectile|TProjectile]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/TServerHorse|TServerHorse]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/TServerPlayer|TServerPlayer]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/TPlayer|TPlayer]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/TServerNPC|TServerNPC]]&lt;br /&gt;
******* [[Creation/Dev/Script/Client/TServerWeapon|TServerWeapon]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerBomb|TServerBomb]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerCarry|TServerCarry]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerChest|TServerChest]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerExtra|TServerExtra]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerFlying|TServerFlying]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerLeap|TServerLeap]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerSign|TServerSign]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TShowImg|TShowImg]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TDrawingPanel|TDrawingPanel]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/Terraformer|Terraformer]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TFrameDetail|TFrameDetail]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGaniParam|TGaniParam]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAni|TGraalAni]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniPart|TGraalAniPart]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniSound|TGraalAniSound]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniSprite|TGraalAniSprite]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniStep|TGraalAniStep]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalSpriteAttachment|TGraalSpriteAttachment]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TMovementRigid|TMovementRigid]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TParticle|TParticle]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TParticleEmitter|TParticleEmitter]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TParticleModifier|TParticleModifier]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TServerLevel|TServerLevel]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TServerLevelLink|TServerLevelLink]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TShapeMaterial|TShapeMaterial]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TShowImg_Values|TShowImg_Values]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Flash|TShowImg_Flash]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Gani|TShowImg_Gani]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Image|TShowImg_Image]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Shape|TShowImg_Shape]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Poly|TShowImg_Poly]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Text|TShowImg_Text]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TStaticVar|TStaticVar]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TTilesLayer|TTilesLayer]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TUpdatePackage|TUpdatePackage]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Talk:Creation/Dev/Script/Client&amp;diff=7812</id>
		<title>Talk:Creation/Dev/Script/Client</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Talk:Creation/Dev/Script/Client&amp;diff=7812"/>
		<updated>2006-12-28T18:48:00Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I need help with a new system I'm making for my server, I've posted some info on the forums, but it hasn't gotten replys, and I'm stumped. Here's the forums site, it would mean a lot to me if someone could help me out a bit, thanks!!!&lt;br /&gt;
http://forums.graalonline.com/forums/showthread.php?t=65330&lt;br /&gt;
&lt;br /&gt;
== Vectors ==&lt;br /&gt;
&lt;br /&gt;
Okay, I've been writing documentation for vectors. I'm assuming by the description that vector normalize is '''u'''/|'''u'''|. I can't seem to figure out what vectororthobasis is or how vectordist could be anything other than 0. Seeing as vectors don't have position, we can assume that all of them cross at (0,0,0) (and thus the minimum distance be 0).&lt;br /&gt;
&lt;br /&gt;
Hopefully I could get some clarification.&lt;br /&gt;
&lt;br /&gt;
--[[User:Tolnaftate2004|Tolnaftate2004]] 20:36, 18 November 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I've figured out vectordist, but vectororthobasis is still a bit fuzzy. If it is returning a vector, then there are three of them, and is peculiar that is is returning an identity ''matrix'' for the '''0''' vector.&lt;br /&gt;
&lt;br /&gt;
--[[User:Tolnaftate2004|Tolnaftate2004]] 19:48, 28 December 2006 (CET)&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Creation/Dev/Script/Client&amp;diff=7811</id>
		<title>Creation/Dev/Script/Client</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Creation/Dev/Script/Client&amp;diff=7811"/>
		<updated>2006-12-28T18:43:01Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Vectors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Client Supported Script Features=&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| $camera::movementspeed&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::choosenvoicecodec&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivatebyvolume&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microactivationlevel&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microinputdevice&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microon&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::microvolumefactor&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::midivolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::mp3volume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::radiovolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::reversestereo&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::sfxvolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::audio::voicevolume&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::allowglobalpms&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::automapping&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::defaultfontsize&lt;br /&gt;
| integer&lt;br /&gt;
| Change showtext zoom: $pref::graal::defaultfontsize/24&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontconnectlevels&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontloadlistheads&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepasswords&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::dontsavepms&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedport&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::fixedudpport&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::language&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::limitnicknames&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::loadbuddylistfromserver&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nicknamelimit&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::nomassmessages&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::notoalls&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::noudp&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::graal::showyourselfonbuddylists&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::input::mousesensitivity&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::interior::lockarrays&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::terrain::enabledetails&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::detailfactor&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fogdistance&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::fullscreenmode&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::screenshotformat&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::visibledistance&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $pref::video::windowmode&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $scenelighting::lightingprogress&lt;br /&gt;
| float (read only)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| allfeatures&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| for use with enablefeatures(), it's the default unless it is changed.&lt;br /&gt;
|-&lt;br /&gt;
| allplayerscount&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| The size of the allplayers array.&lt;br /&gt;
|-&lt;br /&gt;
| allrenderobjecttypes&lt;br /&gt;
| integer (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| allstats&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| A bitflag of all stats currently enabled&lt;br /&gt;
|-&lt;br /&gt;
| canspin&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player has spin attack&lt;br /&gt;
|-&lt;br /&gt;
| carriesblackstone&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying a black stone&lt;br /&gt;
|-&lt;br /&gt;
| carriesbush&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying a bush&lt;br /&gt;
|-&lt;br /&gt;
| carriesnpc&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying an NPC.&lt;br /&gt;
|-&lt;br /&gt;
| carriessign&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if a player is carrying a sign.&lt;br /&gt;
|-&lt;br /&gt;
| carriesstone&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if a player is carrying a stone.&lt;br /&gt;
|-&lt;br /&gt;
| carriesvase&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if a player is carrying a vase.&lt;br /&gt;
|-&lt;br /&gt;
| downloadfile&lt;br /&gt;
| string (read only)&lt;br /&gt;
| Name of the file currently being downloaded&lt;br /&gt;
|-&lt;br /&gt;
| downloadpos&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Amount of download file already downloaded&lt;br /&gt;
|-&lt;br /&gt;
| downloadsize&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Size of the file being downloaded&lt;br /&gt;
|-&lt;br /&gt;
| editingmission&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| emoticonchar&lt;br /&gt;
| string (read only)&lt;br /&gt;
| The letter of the emoticon being displayed by the player&lt;br /&gt;
|-&lt;br /&gt;
| focusx&lt;br /&gt;
| float (read only)&lt;br /&gt;
| X coordinate of the center of playing screen in the level, offset -1.5&lt;br /&gt;
|-&lt;br /&gt;
| focusy&lt;br /&gt;
| float (read only)&lt;br /&gt;
| Y coordinate of the center of playing screen in the level, offset -2&lt;br /&gt;
|-&lt;br /&gt;
| graalversion&lt;br /&gt;
| float (read only)&lt;br /&gt;
| Graal version&lt;br /&gt;
|-&lt;br /&gt;
| gravity&lt;br /&gt;
| float&lt;br /&gt;
| Downward acceleration for projectiles ejected with the shoot() function.&lt;br /&gt;
|-&lt;br /&gt;
| iscarrying&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player is carrying anything&lt;br /&gt;
|-&lt;br /&gt;
| isfocused&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| isgraal3d&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if you are running graal 3D&lt;br /&gt;
|-&lt;br /&gt;
| isleader&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player is the first person in the level&lt;br /&gt;
|-&lt;br /&gt;
| isonmap&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player is on a map&lt;br /&gt;
|-&lt;br /&gt;
| jpegquality&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lastdownloadfile&lt;br /&gt;
| string (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| leftmousebutton&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the left mouse button is down&lt;br /&gt;
|-&lt;br /&gt;
| levelorgx&lt;br /&gt;
| float (read only)&lt;br /&gt;
| The x-value of the levels' origin (may deviate with attachplayertoobj)&lt;br /&gt;
|-&lt;br /&gt;
| levelorgy&lt;br /&gt;
| float (read only)&lt;br /&gt;
| The x-value of the levels' origin (may deviate with attachplayertoobj)&lt;br /&gt;
|-&lt;br /&gt;
| lighteffectsenabled&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player has enabled light effects&lt;br /&gt;
|-&lt;br /&gt;
| weathereffectsenabled&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player has enabled weather effects&lt;br /&gt;
|-&lt;br /&gt;
| particleeffectsenabled&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| signifies that the player has enabled particle effects&lt;br /&gt;
|-&lt;br /&gt;
| middlemousebutton&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the middle mouse button is down&lt;br /&gt;
|-&lt;br /&gt;
| mousebuttons&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Counts the amount of mousebuttons pressed&lt;br /&gt;
|-&lt;br /&gt;
| mousescreenx&lt;br /&gt;
| integer&lt;br /&gt;
| X coordinate of the mouse on the GUI layer&lt;br /&gt;
|-&lt;br /&gt;
| mousescreeny&lt;br /&gt;
| integer&lt;br /&gt;
| Y coordinate of the mouse on the GUI layer&lt;br /&gt;
|-&lt;br /&gt;
| mousewheeldelta&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Amount that the mouse scroll wheel was scrolled [(-) is up, (+) is down]&lt;br /&gt;
|-&lt;br /&gt;
| mousex&lt;br /&gt;
| float&lt;br /&gt;
| X coordinate of the mouse on the tile layer&lt;br /&gt;
|-&lt;br /&gt;
| mousey&lt;br /&gt;
| float&lt;br /&gt;
| Y coordinate of the mouse on the tile layer&lt;br /&gt;
|-&lt;br /&gt;
| musiclen&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| The duration of the playing sound file&lt;br /&gt;
|-&lt;br /&gt;
| musicpos&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| The position in the file at which the sound file is&lt;br /&gt;
|-&lt;br /&gt;
| rightmousebutton&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the right mouse button is down&lt;br /&gt;
|-&lt;br /&gt;
| screenheight&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Height of the Graal window&lt;br /&gt;
|-&lt;br /&gt;
| screenwidth&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| Width of the Graal window&lt;br /&gt;
|-&lt;br /&gt;
| scriptedcontrols&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| scriptedplayerlist&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedlistplayers&lt;br /&gt;
| object&lt;br /&gt;
| an array of players highlighted on the playerlist&lt;br /&gt;
|-&lt;br /&gt;
| selectedsword&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| selectedweapon&lt;br /&gt;
| integer&lt;br /&gt;
| Index of player.weapons that references the player's current weapon&lt;br /&gt;
|-&lt;br /&gt;
| servername&lt;br /&gt;
| string (read only)&lt;br /&gt;
| Name of the current server&lt;br /&gt;
|-&lt;br /&gt;
| serverstartconnect&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| serverstartparams&lt;br /&gt;
| string&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| shotbybaddy&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player was shot by a baddy&lt;br /&gt;
|-&lt;br /&gt;
| shotbyplayer&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
| True if the player was shot by another player&lt;br /&gt;
|-&lt;br /&gt;
| showterraingrid&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| timevar&lt;br /&gt;
| integer (read only)&lt;br /&gt;
| A timer which is increased each 5 seconds and is snychronized between server and clients; The timer started exactly on 2001-02-01 at 18:33:34 Paris time (opening of Graal2001); on serverside the unixtime (timevar2) is around 981048814 + timevar*5&lt;br /&gt;
|-&lt;br /&gt;
| timevar2&lt;br /&gt;
| float (read only)&lt;br /&gt;
| Unix-time with a very high precision, not synchronized between server and client&lt;br /&gt;
|-&lt;br /&gt;
| timevar3 &lt;br /&gt;
| float (read only)&lt;br /&gt;
| synchronized time which works on both server- and client-side, precision is milliseconds, only available for Graal3D right now&lt;br /&gt;
|-&lt;br /&gt;
| wasshooted&lt;br /&gt;
| boolean (read only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| waterheight&lt;br /&gt;
| float&lt;br /&gt;
| The height of water at the player's (x,y) on a terrain&lt;br /&gt;
|-&lt;br /&gt;
| weapons&lt;br /&gt;
| object (read only)&lt;br /&gt;
| An array of weapon objects&lt;br /&gt;
|-&lt;br /&gt;
| weaponsenabled&lt;br /&gt;
| boolean&lt;br /&gt;
| Are weapons enabled? (Player can trigger onWeaponFired...)&lt;br /&gt;
|-&lt;br /&gt;
| worldclockstopped&lt;br /&gt;
| boolean&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldhour&lt;br /&gt;
| integer&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldminute&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldminutesofday&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| worldrealsecondsperday&lt;br /&gt;
| float&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Variable Prefixes==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Prefix'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| object.var&lt;br /&gt;
| accesses the variables of the object. The object can be retrieved by using the case-sensitive name of the object or a variable pointing to the object.&lt;br /&gt;
|-&lt;br /&gt;
| this.var&lt;br /&gt;
| variables that belong to the current script object, on the server-side they are saved to file when the object is a database npc&lt;br /&gt;
|-&lt;br /&gt;
| thiso.var&lt;br /&gt;
| refer to the this. variables of the executing npc ('o' stands for original) when you use the with () command: with (findnpc(&amp;quot;npc2&amp;quot;)) thiso.temp = this.temp; will copy 'this.temp' from npc2 to the current npc&lt;br /&gt;
|-&lt;br /&gt;
| player.var&lt;br /&gt;
| variables of the current player object, when the event was invoked by a player (e.g. playertouchsme), or you do with (findplayer(accountname))&lt;br /&gt;
|-&lt;br /&gt;
| playero.var&lt;br /&gt;
| variables of the original player object, in generally the player who has invoked the event (e.g. playertouchsme)&lt;br /&gt;
|-&lt;br /&gt;
| client.var&lt;br /&gt;
| short for player.client.var, variables that can be changed on server-side and client-side&lt;br /&gt;
|-&lt;br /&gt;
| clientr.var&lt;br /&gt;
| short for player.clientr.var, variables that can only be changed on server-side but can be read on client-side&lt;br /&gt;
|-&lt;br /&gt;
| server.var&lt;br /&gt;
| variables that only exists on server-side and can be accessed by all npcs&lt;br /&gt;
|-&lt;br /&gt;
| serverr.var&lt;br /&gt;
| variables that can only be changed on server-side and is server wide, but can also be read by all clients, so it can be used for storing the state of global activities that need client-side actions like displaying weather; like server. vars they can also be changed with remotecontrol.exe by administrators that have the right to change server. variables&lt;br /&gt;
|-&lt;br /&gt;
| level.var&lt;br /&gt;
| variables of the current level, which is the level the executing npc stands in (on server-side) or the player is in (on client-side)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
''Note: Currently this doesn't list the functions which are optimized at compile time, see [[Creation/Dev/Script/Starting_Guide#Standard_functions|Starting Guide: Standard functions]] for those.''&lt;br /&gt;
&lt;br /&gt;
===Common===&lt;br /&gt;
* aindexof(float, array) - returns integer, better use array.index(float) instead&lt;br /&gt;
* echo(str text) - prints text in the F2 window (clientside) or RC chat (serverside)&lt;br /&gt;
* getbasepackage() - returns [[Creation/Dev/Script/Client/TUpdatePackage|TUpdatePackage]] object&lt;br /&gt;
* getdownloadedupdatepackagesize() - returns integer&lt;br /&gt;
* getdownloadingpackage() - returns [[Creation/Dev/Script/Client/TUpdatePackage|TUpdatePackage]] object&lt;br /&gt;
* getdownloadingpackagescount() - returns integer&lt;br /&gt;
* gethttprequest(str, int, str) - returns [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]] object&lt;br /&gt;
* getkeycode(str keyname) - returns integer&lt;br /&gt;
* getpackagesdownloadcomplete() - returns boolean&lt;br /&gt;
* getpackagesdownloaded() - returns boolean&lt;br /&gt;
* getplatform() - returns string&lt;br /&gt;
* getservername() - returns string&lt;br /&gt;
* gettotalupdatepackagesize() - returns integer&lt;br /&gt;
* getupdatepackage(str) - returns object&lt;br /&gt;
* isadminguild(str guildname) - returns boolean&lt;br /&gt;
* isobject(str objectname) - returns boolean, checks if an object is existing&lt;br /&gt;
* keydown(int keynumber) - returns if the specified key is pressed (0..10: up, left, down, right, S, A, D, M, tab, Q, P)&lt;br /&gt;
* keydown2(int keycode, bool ignorecase) - returns boolean&lt;br /&gt;
* keyname(int keycode) - returns string&lt;br /&gt;
* opengraalurl(str url) - opens a website of www.graalonline.com and automatically lets the player login to it (e.g. for the upgrade page or screenshot section)&lt;br /&gt;
* openurl(str url)&lt;br /&gt;
* openurl2(str url, int width, int height) - deprecated, width and height are ignored&lt;br /&gt;
* requesthttp(str, int, str) - returns [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]] object&lt;br /&gt;
* requesttext(str type, str option)&lt;br /&gt;
* requesturl(str url) - returns [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]] object&lt;br /&gt;
* savelog(str text)&lt;br /&gt;
* savelog2(str filename, str text) - adds a log entry to &amp;quot;logs/filename&amp;quot;&lt;br /&gt;
* sendrpgmessage(str text) - adds text to the F2 window&lt;br /&gt;
* sendtext(str type, str option, params...)&lt;br /&gt;
* sendtorc(str text) - serverside only, displays text on the RC chat&lt;br /&gt;
* serverwarp(str servername) - the name can either be the internal name (graal2002) or part of the server name on the serverlist&lt;br /&gt;
&lt;br /&gt;
====Files====&lt;br /&gt;
* extractfilebase(str filepath) - returns string, '/an/example/path/and/file' would return '/an/example/path/and/'&lt;br /&gt;
* extractfileext(str filepath) - returns string, 'filename.ext' would return '.ext'&lt;br /&gt;
* extractfilename(str filepath) - returns string, '/an/example/path/and/file' would return 'file'&lt;br /&gt;
* extractfilepath(str filepath) - returns string, '/an/example/path/and/file' would return '/an/example/path/and/'&lt;br /&gt;
* fileexists(str filepath) - returns boolean, checks if a file exists&lt;br /&gt;
* filesize(str filepath) - returns integer, returns the size of a file&lt;br /&gt;
* fileupdate(str filepath) - returns boolean, checks if a file is existing and requests an update from the server if it has not been checked yet&lt;br /&gt;
* findfiles(str filenamepattern, flags) - returns array of strings, flags can be either 1 for recursive search or 0 for non-recursive&lt;br /&gt;
* freefileresources(str)&lt;br /&gt;
* getextension(str filepath) - returns string, 'filename.ext' would return '.ext'&lt;br /&gt;
* reloadfile(str filepath)&lt;br /&gt;
* requestfiledeletion(str filepath), requests a file to be deleted on the server&lt;br /&gt;
* requestfilerename(str filepath, str newfilepath), requests a file to be renamed on the server&lt;br /&gt;
* requestfilesmove(str filepath, str newfilepath), requests a file to be moved on the server&lt;br /&gt;
* selectfilefordownload(str filter)&lt;br /&gt;
* selectfileforupload()&lt;br /&gt;
&lt;br /&gt;
''Watch the [[Creation/Dev/Script/Client/TGraalVar|TGraalVar]] object for loading and saving of files (loadlines etc.)''&lt;br /&gt;
&lt;br /&gt;
''See more information about input/output at [[Creation/Dev/Output Methods|Output methods]]''&lt;br /&gt;
&lt;br /&gt;
====Math====&lt;br /&gt;
* degtorad(float value) - returns float&lt;br /&gt;
* radtodeg(float value) - returns float&lt;br /&gt;
&lt;br /&gt;
=====Matrices=====&lt;br /&gt;
* [[Matrix#matrixcreate()|matrixcreate]](str vector, str rotation) - returns matrix string&lt;br /&gt;
* matrixcreatefromeuler(str eulerrotation) - returns matrix string&lt;br /&gt;
* matrixmulpoint(str, str) - returns string&lt;br /&gt;
* matrixmultiply(str matrix, str matrix) - returns matrix string&lt;br /&gt;
* matrixmulvector(str matrix, str vector) - returns vector string&lt;br /&gt;
&lt;br /&gt;
=====Vectors=====&lt;br /&gt;
Each [[Vectors|vector]] is basicly an array of format {x,y,z} but is passed as string for simplicity. Click on the function names to see more information about the vector operations.&lt;br /&gt;
* [[Vectors#Vector_Addition|vectoradd]](vector, vector) - returns vector&lt;br /&gt;
* [[Cross Product|vectorcross]](vector, vector) - returns vector&lt;br /&gt;
* [[Vectors#Distance_Between_Terminal_Points|vectordist]](vector, vector) - returns float&lt;br /&gt;
* [[Dot Product|vectordot]](vector, vector) - returns float&lt;br /&gt;
* [[Vectors#Vector_Length_.28Magnitude.29|vectorlen]](vector) - returns float&lt;br /&gt;
* [[Vectors#Unit_Length|vectornormalize]](vector) - returns vector, scales the vector to length 1&lt;br /&gt;
* vectororthobasis(vector) - returns vector&lt;br /&gt;
* [[Vectors#Vector-Scalar_Multiplication|vectorscale]](vector, float) - returns vector&lt;br /&gt;
* [[Vectors#Vector_Subtraction|vectorsub]](vector, vector) - returns vector&lt;br /&gt;
&lt;br /&gt;
====Strings====&lt;br /&gt;
* base64decode(str text) - returns decoded string&lt;br /&gt;
* base64encode(str text) - returns encoded string&lt;br /&gt;
* checksum(str text) - returns checksum float&lt;br /&gt;
* contains(str haystack, str needle) - returns boolean, you should probably do haystack.contains(needle) instead&lt;br /&gt;
* getascii(str character) - returns ascii value integer&lt;br /&gt;
* getstringkeys(str leading) - searchs for variables which start with the specified string and returns and array of their ending&lt;br /&gt;
* lowercase(str text) - returns lowercased string, it is recommended to use string.lower() though&lt;br /&gt;
* md5(str text) - returns md5 hash string&lt;br /&gt;
* randomstring(array of strings) - returns string&lt;br /&gt;
* strcmp(str text1, str text2) - returns integer&lt;br /&gt;
* strequals(str text1, str text2) - returns boolean, you probably should do text1.equals(text2) instead&lt;br /&gt;
* uppercase(str text) - returns uppercased string, it is recommended to use string.upper() though&lt;br /&gt;
&lt;br /&gt;
===GUI===&lt;br /&gt;
* addcontrol(obj) - adds a GUI control or a 3D-object to the scene&lt;br /&gt;
* cursoroff()&lt;br /&gt;
* cursoron()&lt;br /&gt;
* iscursoron() - returns boolean&lt;br /&gt;
* popdialog() - removes the top dialog control&lt;br /&gt;
* pushdialog(obj) - displays a control on top of all other controls, this control gains all focus until it is removed again&lt;br /&gt;
* setcontentcontrol(obj) - replaces the current content control (usually named GUIContainer) with another one&lt;br /&gt;
&lt;br /&gt;
===Graal 2D===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Type'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef(str tilesetimage, str prefix, int tilesettype)&lt;br /&gt;
|&lt;br /&gt;
| Sets the tileset image for levels beginning with the specified prefix.&lt;br /&gt;
Tileset type 0 is for pics1.png style tilesets.&lt;br /&gt;
Tileset type 1 is for the new tileset format (Era's tiles for example)&lt;br /&gt;
|-&lt;br /&gt;
| addtiledef2(str tilesetimage, str prefix, int x, int y)&lt;br /&gt;
|&lt;br /&gt;
| Replaces a section of the tileset (x, y) image for levels beginning with the specified prefix.&lt;br /&gt;
|-&lt;br /&gt;
| attachplayertoobj(int objtype, int id)&lt;br /&gt;
|&lt;br /&gt;
| Attaches a player to the specified object. Using attachpayertoobj(0, id); the player will be attached to the current NPC.&lt;br /&gt;
|-&lt;br /&gt;
| callnpc(int npcindex, params...)&lt;br /&gt;
|&lt;br /&gt;
| Invokes an event on an npc, better use npcs[npcindex].trigger(event, params) instead; you can only trigger objects this way that are on your side of clientside/serverside&lt;br /&gt;
|-&lt;br /&gt;
| callweapon(int weaponindex, params...)&lt;br /&gt;
|&lt;br /&gt;
| Invokes a trigger on a weapon, better use weapons[weaponindex].trigger(event, params) instead&lt;br /&gt;
|-&lt;br /&gt;
| detachplayer()&lt;br /&gt;
|&lt;br /&gt;
| Puts the player back on the level (after using attachplayertoobj).&lt;br /&gt;
|-&lt;br /&gt;
| disabledefmovement()&lt;br /&gt;
|&lt;br /&gt;
| Disables the default movement.&lt;br /&gt;
|-&lt;br /&gt;
| disablemap()&lt;br /&gt;
|&lt;br /&gt;
| Disables the default map&lt;br /&gt;
|-&lt;br /&gt;
| disablepause()&lt;br /&gt;
|&lt;br /&gt;
| Disables pausing.&lt;br /&gt;
|-&lt;br /&gt;
| disableselectweapons()&lt;br /&gt;
|&lt;br /&gt;
| Disables the default Q menu.&lt;br /&gt;
|-&lt;br /&gt;
| disableweapons()&lt;br /&gt;
|&lt;br /&gt;
| Disables weapons.&lt;br /&gt;
|-&lt;br /&gt;
| enabledefmovement()&lt;br /&gt;
|&lt;br /&gt;
| Enables default movement&lt;br /&gt;
|-&lt;br /&gt;
| enablefeatures(int flags)&lt;br /&gt;
| &lt;br /&gt;
| Enable/disable client features&lt;br /&gt;
&lt;br /&gt;
Flags can consist of:&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
  | '''Value'''&lt;br /&gt;
  | '''Description'''&lt;br /&gt;
  |-&lt;br /&gt;
  | 1&lt;br /&gt;
  | M key (map)&lt;br /&gt;
  |-&lt;br /&gt;
  | 2&lt;br /&gt;
  | P key (pause)&lt;br /&gt;
  |-&lt;br /&gt;
  | 4&lt;br /&gt;
  | Q key (weapon select)&lt;br /&gt;
  |-&lt;br /&gt;
  | 8&lt;br /&gt;
  | R key (show ratings)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x10&lt;br /&gt;
  | S+A key combination for dropping items&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x20&lt;br /&gt;
  | S+D key combination for switching weapons&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x40&lt;br /&gt;
  | TAB key (if disabled then you cannot switch to the chat field with TAB)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x80&lt;br /&gt;
  | Display of chat text&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x100&lt;br /&gt;
  | Display of the hearts over player heads&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x200&lt;br /&gt;
  | Display of nicknames&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x400&lt;br /&gt;
  | Toall/PM-icons on the minimap&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x800&lt;br /&gt;
  | Right-click on players opens their profile&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x1000&lt;br /&gt;
  | Emoticons (disable it if you want to do other stuff with control+keys)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x2000&lt;br /&gt;
  | Alt+5 for making snapshots  ''(deprecated)''&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x4000&lt;br /&gt;
  | Alt+8/9 for zooming ''(deprecated)''&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x8000&lt;br /&gt;
  | The logframe where savelog stuff is added&lt;br /&gt;
  |-&lt;br /&gt;
  | allfeatures&lt;br /&gt;
  | All of the previously stated feature flags enabled&lt;br /&gt;
  |}&lt;br /&gt;
|-&lt;br /&gt;
| enablemap()&lt;br /&gt;
|&lt;br /&gt;
| Enables default map.&lt;br /&gt;
|-&lt;br /&gt;
| enablepause()&lt;br /&gt;
|&lt;br /&gt;
| Enables pausing.&lt;br /&gt;
|-&lt;br /&gt;
| enableselectweapons()&lt;br /&gt;
|&lt;br /&gt;
| Enables default Q menu.&lt;br /&gt;
|-&lt;br /&gt;
| enableweapons()&lt;br /&gt;
|&lt;br /&gt;
| Enables weapons.&lt;br /&gt;
|-&lt;br /&gt;
| explodebomb(int bombindex)&lt;br /&gt;
|&lt;br /&gt;
| Explodes a bomb with the specified index.&lt;br /&gt;
|-&lt;br /&gt;
| findani(str)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TGraalAni|TGraalAni]] object&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| findlevel(str levelfilename)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerLevel|TServerLevel]] object&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| findplayer(str accountname)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerPlayer|TServerPlayer]] object&lt;br /&gt;
| Returns player object of Account specified. Player must be online.&lt;br /&gt;
|-&lt;br /&gt;
| findplayerbyid(int playerid)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerPlayer|TServerPlayer]] object&lt;br /&gt;
| Returns player object of id specified. If id isn't available, returns false.&lt;br /&gt;
|-&lt;br /&gt;
| findweapon(str weaponname)&lt;br /&gt;
| [[Creation/Dev/Script/Client/TServerWeapon|TServerWeapon]] object&lt;br /&gt;
| Returns weapon object of name specified. Returns false if weapon doesn't exist.&lt;br /&gt;
|-&lt;br /&gt;
| freezeplayer(float seconds)&lt;br /&gt;
|&lt;br /&gt;
| Freezes player for a specific amount of time.&lt;br /&gt;
|-&lt;br /&gt;
| getimgheight(str imagefilename)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the height (in pixels) of an image.&lt;br /&gt;
|-&lt;br /&gt;
| getimgwidth(str imagefilename)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the width (in pixels) of an image.&lt;br /&gt;
|-&lt;br /&gt;
| getmapx(str levelname)&lt;br /&gt;
| integer&lt;br /&gt;
| X coordinate of the level on a map (top-left level is 0)&lt;br /&gt;
|-&lt;br /&gt;
| getmapy(str levelname)&lt;br /&gt;
| integer&lt;br /&gt;
| Y coordinate of the level on a map (top-left level is 0)&lt;br /&gt;
|-&lt;br /&gt;
| gettextheight(float, str, str)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the height of the font. Format:&lt;br /&gt;
  gettextheight(zoom, font, style)&lt;br /&gt;
|-&lt;br /&gt;
| gettextwidth(float, str, str, str)&lt;br /&gt;
| integer&lt;br /&gt;
| Returns the width of a specified text in a certain font. Format:&lt;br /&gt;
  gettextwidth(zoom, font, style, text)&lt;br /&gt;
|-&lt;br /&gt;
| getz(float x, float y)&lt;br /&gt;
| float&lt;br /&gt;
| Returns the z value of a terrain at (x,y).&lt;br /&gt;
|-&lt;br /&gt;
| graalcontrolhasfocus(bool) &lt;br /&gt;
| boolean &lt;br /&gt;
| parameter says if it should also check if the chat bar has the focus&lt;br /&gt;
|-&lt;br /&gt;
| hideplayer(float seconds)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player for ''seconds'' seconds.&lt;br /&gt;
|-&lt;br /&gt;
| hidesword(float seconds)&lt;br /&gt;
|&lt;br /&gt;
| Hides the player's sword for ''seconds'' seconds.&lt;br /&gt;
|-&lt;br /&gt;
| hitnpc(int, float, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| hitobjects(float, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| hitplayer(int, float, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lay2(str extraname, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| loadmap(str mapfilename)&lt;br /&gt;
|&lt;br /&gt;
| Preloads a gmap on clientside, speeds up entering of new maps but is not required.&lt;br /&gt;
|-&lt;br /&gt;
| noplayerkilling()&lt;br /&gt;
|&lt;br /&gt;
| Disables killing of other players.&lt;br /&gt;
|-&lt;br /&gt;
| onwall(float x, float y)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if the specified x and y is a blocking tile.&lt;br /&gt;
|-&lt;br /&gt;
| onwall2(float x, float y, float width, float height)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if a blocking tile exists in the specified area.&lt;br /&gt;
|-&lt;br /&gt;
| onwater(float x, float y)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if the specified x and y is water.&lt;br /&gt;
|-&lt;br /&gt;
| onwater2(float x, float y, float width, float height)&lt;br /&gt;
| boolean&lt;br /&gt;
| Returns true if water exists in the specified area.&lt;br /&gt;
|-&lt;br /&gt;
| play(str soundfilename)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file.&lt;br /&gt;
|-&lt;br /&gt;
| play2(str soundfilename, float x, float y, float volume)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file at location x, y with the specified volume. Volume should be between 0 and 1, if volume is set to 1 default volume is used (depending on how far away the player is).&lt;br /&gt;
|-&lt;br /&gt;
| playlooped(str soundfilename)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file in a loop until stopsound() is called.&lt;br /&gt;
|-&lt;br /&gt;
| playlooped2(str soundfile, float x, float y, float volume)&lt;br /&gt;
|&lt;br /&gt;
| Plays the specified sound file at location x, y with the specified volume in a loop until stopsound() is called. Volume should be between 0 and 1, if volume is set to 1 default volume is used (depending on how far away the player is).&lt;br /&gt;
|-&lt;br /&gt;
| putleaps(int leapstype, float x, float y)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| removetiledefs(str prefix)&lt;br /&gt;
|&lt;br /&gt;
| Remove tile definitions set by addtiledef and addtiledef2 for the specified prefix.&lt;br /&gt;
|-&lt;br /&gt;
| replaceani(str defaultaniname, str newaniname)&lt;br /&gt;
|&lt;br /&gt;
| replaces the player's default ani with the new ani.&lt;br /&gt;
|-&lt;br /&gt;
| resetfocus()&lt;br /&gt;
|&lt;br /&gt;
| Sets the screen focus to the player.&lt;br /&gt;
|-&lt;br /&gt;
| say(int signindex)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| say2(str text)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| screenx(float x, float y)&lt;br /&gt;
| integer&lt;br /&gt;
| returns the x of the screen layer for a location on the tiles layer.&lt;br /&gt;
|-&lt;br /&gt;
| screeny(float x, float y)&lt;br /&gt;
| integer&lt;br /&gt;
| returns the y of the screen layer for a location on the tiles layer.&lt;br /&gt;
|-&lt;br /&gt;
| worldx(float x, float y)&lt;br /&gt;
| float&lt;br /&gt;
| returns the x of the tiles layer for a location on the screen layer.&lt;br /&gt;
|-&lt;br /&gt;
| worldy(float x, float y)&lt;br /&gt;
| float&lt;br /&gt;
| returns the y of the tiles layer for a location on the screen layer.&lt;br /&gt;
|-&lt;br /&gt;
| setani(str aniname, str aniparams)&lt;br /&gt;
|&lt;br /&gt;
| Sets the gani of a player.&lt;br /&gt;
|-&lt;br /&gt;
| setbeltcolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setcoatcolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| seteffect(float red, float green, float blue, float alpha)&lt;br /&gt;
|&lt;br /&gt;
| Sets the color and alpha transparency of the current npc, use seteffectmode(1) to make the npc alpha-transparent instead of displaying as a light, see [[Creation/Dev/Script/Client/TServerNPC|TServerNPC]] for more.&lt;br /&gt;
|-&lt;br /&gt;
| setfocus(float x, float y)&lt;br /&gt;
|&lt;br /&gt;
| Sets the screen focus to the specified x and y.&lt;br /&gt;
|-&lt;br /&gt;
| setgender(str gendername)&lt;br /&gt;
|&lt;br /&gt;
| Sets the gender of a player.&lt;br /&gt;
|-&lt;br /&gt;
| sethead(str imagefilename)&lt;br /&gt;
|&lt;br /&gt;
| Sets the head of a player&lt;br /&gt;
|-&lt;br /&gt;
| setletters(str imagefilename)&lt;br /&gt;
|&lt;br /&gt;
| Sets the image to use for sign background and text.&lt;br /&gt;
|-&lt;br /&gt;
| setmap(str, str, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setminimap(str, str, float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setmusicvolume(float, float)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setplayerdir(str)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setshield(str imagefilename, int shieldpower)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setshoecolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setshootparams(str params)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setskincolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setsleevecolor(str color)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| setsword(str imagefilename, int swordpower)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| showstats(int statsflag)&lt;br /&gt;
|&lt;br /&gt;
| With this you can show/hide parts of the status bar / game&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Shows all&lt;br /&gt;
showstats(allstats);&lt;br /&gt;
&lt;br /&gt;
// Enable everything except minimap&lt;br /&gt;
showstats(allstats &amp;amp; ~0x100);&lt;br /&gt;
&lt;br /&gt;
// Enable everything except AP and MP bars&lt;br /&gt;
showstats(allstats &amp;amp; ~(0x40 | 0x80));&lt;br /&gt;
&lt;br /&gt;
// Enable only players and right-click profile&lt;br /&gt;
showstats(0x400 | 0x800);&lt;br /&gt;
&lt;br /&gt;
// Hides all&lt;br /&gt;
showstats(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flags can consist of:&lt;br /&gt;
  {| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
  | '''Value'''&lt;br /&gt;
  | '''Description'''&lt;br /&gt;
  |-&lt;br /&gt;
  | 1&lt;br /&gt;
  | ASD&lt;br /&gt;
  |-&lt;br /&gt;
  | 2&lt;br /&gt;
  | Icons (for rupees, bombs, arrows)&lt;br /&gt;
  |-&lt;br /&gt;
  | 4&lt;br /&gt;
  | Rupees count&lt;br /&gt;
  |-&lt;br /&gt;
  | 8&lt;br /&gt;
  | Bombs count&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x10&lt;br /&gt;
  | Arrows count&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x20&lt;br /&gt;
  | Hearts&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x40&lt;br /&gt;
  | Alignment (ap) bar&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x80&lt;br /&gt;
  | Magic points (mp) bar&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x100&lt;br /&gt;
  | Minimap (you can only hide it, you can't show it when the player pressed Alt+3)&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x200&lt;br /&gt;
  | Inventory NPCs&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x400&lt;br /&gt;
  | Players&lt;br /&gt;
  |-&lt;br /&gt;
  | 0x800&lt;br /&gt;
  | Right-click on players opens their profile&lt;br /&gt;
  |-&lt;br /&gt;
  | allstats&lt;br /&gt;
  | All of the previously stated stats flags enabled&lt;br /&gt;
  |}&lt;br /&gt;
|-&lt;br /&gt;
| spyfire(int length, int power)&lt;br /&gt;
|&lt;br /&gt;
| Shoots a line of fire in the direction of the player with the specified tile length, and fire power (1 - bomb, 2 - super bomb, 3 - jolt bomb).&lt;br /&gt;
|-&lt;br /&gt;
| stopmidi()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| stopsound(str soundfilename)&lt;br /&gt;
|&lt;br /&gt;
| Stop playing a sound started by playlooped&lt;br /&gt;
|-&lt;br /&gt;
| takeplayercarry()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| takeplayerhorse()&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| testplayer(float x, float y)&lt;br /&gt;
| integer&lt;br /&gt;
| checks if there is a player on that position and returns the index of the player in players[], or -1 if there is none&lt;br /&gt;
|-&lt;br /&gt;
| triggeraction(float x, float y, str eventname, params...)&lt;br /&gt;
|&lt;br /&gt;
| Invokes an &amp;quot;onActionEventname&amp;quot; event on objects at the specified position, can be used to invoke events on objects from clientside to serverside and vice versa. &lt;br /&gt;
Special eventnames are &amp;quot;serverEventname&amp;quot; which will invoke an event on the Control-NPC (onActionEventname), or &amp;quot;serverside&amp;quot; which will invoke an onActionServerSide event on the weapon script specified by the first following parameter (the fourth parameter). It is recommended to use triggerserver() for that though.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
triggeraction(30, 30, &amp;quot;explode&amp;quot;, 5);&lt;br /&gt;
triggeraction(0, 0, &amp;quot;serverchat&amp;quot;, player.chat);&lt;br /&gt;
triggeraction(0, 0, &amp;quot;serverside&amp;quot;, &amp;quot;PlasmaGun&amp;quot;, &amp;quot;activate&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| triggerserver(str objecttype, str objectname, str params)&lt;br /&gt;
|&lt;br /&gt;
| Invokes an event on a serverside object, currently objecttype can only be &amp;quot;gui&amp;quot; or &amp;quot;weapon&amp;quot; (which is the same), objectname is the name of the weapon script, the invoked event will be &amp;quot;onActionServerSide&amp;quot;.&lt;br /&gt;
On Graal3D the event will be &amp;quot;onActionParam0&amp;quot; instead.&lt;br /&gt;
For invoking events on the clientside use player.triggerclient(objecttype,objectname,params) instead.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
triggerserver(&amp;quot;weapon&amp;quot;, &amp;quot;PlasmaGun&amp;quot;, &amp;quot;activate&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| updateboard(int x, int y, int width, int height)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| updateratings(obj)&lt;br /&gt;
| object&lt;br /&gt;
| Updates an array of {rating1,ratingdeviation1, rating2,ratingdeviation2, ...}, init them at 1500 and 350.&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
newratings = updateratings({winner.rating,winner.ratingd,loser.rating,loser.ratingd});&lt;br /&gt;
winner.rating = newratings[0];&lt;br /&gt;
winner.ratingd = newratings[1];&lt;br /&gt;
loser.rating = newratings[2];&lt;br /&gt;
loser.ratingd = newratings[3];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| wraptext(int fontsize, str format, str text)&lt;br /&gt;
| array of strings&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| wraptext2(int pixelwidth, float zoom, str delimiters, str text)&lt;br /&gt;
| array of strings&lt;br /&gt;
| wraps the text so that it fits in the specified number of pixels and returns an array of text lines &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Graal 3D===&lt;br /&gt;
* getboxcenter(str box) - returns string&lt;br /&gt;
* get3dobjectat(float x, float y, bool doboxcollision) - returns object - gets the 3d object at the specified screen position, third parameter says if it should do box collision&lt;br /&gt;
* get3dobjectatmouse(bool doboxcollision) - returns object - gets the 3d object at the mouse, specify if it should do box collision (true)&lt;br /&gt;
* get3dobjectbyray(str vector, str vector) - returns object&lt;br /&gt;
* lightscene() - returns boolean&lt;br /&gt;
* setfogcolors(array)&lt;br /&gt;
* setinteriorrendermode(int)&lt;br /&gt;
* setskybandcolors(array)&lt;br /&gt;
* setskybandsizes(array)&lt;br /&gt;
* setsuncolors(array)&lt;br /&gt;
* setterrainrendermode(int)&lt;br /&gt;
* synctimeofday(float hour, float minute)&lt;br /&gt;
* updateterrain()&lt;br /&gt;
* updatevisibledistance()&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* adventure_installgraal(str, bool, bool)&lt;br /&gt;
* adventure_openexternaloptions() - returns boolean&lt;br /&gt;
* adventure_openexternalpm(obj) - returns boolean&lt;br /&gt;
* adventure_openserverlist()&lt;br /&gt;
* adventure_quit()&lt;br /&gt;
* adventure_reconnect()&lt;br /&gt;
* adventure_savegraaloptions()&lt;br /&gt;
* adventure_selectpath(str) - returns object&lt;br /&gt;
* adventure_setaccountname(str)&lt;br /&gt;
* adventure_setchat(str)&lt;br /&gt;
* adventure_setnickname(str)&lt;br /&gt;
* adventure_setpassword(str)&lt;br /&gt;
* adventure_startofflinemode()&lt;br /&gt;
* adventure_updateaccountfield()&lt;br /&gt;
* adventure_updatemicroactivationlevel()&lt;br /&gt;
* adventure_updatemidivolume()&lt;br /&gt;
* adventure_updatemp3volume()&lt;br /&gt;
* adventure_updateplayermuted()&lt;br /&gt;
* adventure_updateplayerprofile(bool, str, str, int, str, str, str, str, str, str)&lt;br /&gt;
* adventure_updateradiovolume()&lt;br /&gt;
&lt;br /&gt;
''(these functions are only available to privileged scripts from the Login server)''&lt;br /&gt;
&lt;br /&gt;
==Classes / Object Types==&lt;br /&gt;
* [[Creation/Dev/Script/Client/TGraalVar|TGraalVar]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/ActionMap|ActionMap]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/DTSAniThread|DTSAniThread]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GameMovementInterpolate|GameMovementInterpolate]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameMovementRigid|GameMovementRigid]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GameMovementList|GameMovementList]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GameShape|GameShape]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShape3DS|GameShape3DS]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShapeDIF|GameShapeDIF]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShapeDTS|GameShapeDTS]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GameShapeFT|GameShapeFT]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiControl|GuiControl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiArrayCtrl|GuiArrayCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiTextListCtrl|GuiTextListCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiTreeViewCtrl|GuiTreeViewCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiBitmapButtonCtrl|GuiBitmapButtonCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiBitmapCtrl|GuiBitmapCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiMapOverviewCtrl|GuiMapOverviewCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiButtonBaseCtrl|GuiButtonBaseCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiButtonCtrl|GuiButtonCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiCheckBoxCtrl|GuiCheckBoxCtrl]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/GuiRadioCtrl|GuiRadioCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiChunkedBitmapCtrl|GuiChunkedBitmapCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiContextMenuCtrl|GuiContextMenuCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiDrawingPanel|GuiDrawingPanel]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiFlash|GuiFlash]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiFrameSetCtrl|GuiFrameSetCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiGraal3DCtrl|GuiGraal3DCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiGraalCtrl|GuiGraalCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiMenuCtrl|GuiMenuCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiMLTextCtrl|GuiMLTextCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiMLTextEditCtrl|GuiMLTextEditCtrl]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/GuiPMEditCtrl|GuiPMEditCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPMCtrl|GuiPMCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPMHistoryCtrl|GuiPMHistoryCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiPlayerView|GuiPlayerView]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiProgressCtrl|GuiProgressCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiScrollCtrl|GuiScrollCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiShapeNameHud|GuiShapeNameHud]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiShowImgCtrl|GuiShowImgCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiSliderCtrl|GuiSliderCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiStretchCtrl|GuiStretchCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiTabCtrl|GuiTabCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/GuiTextCtrl|GuiTextCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPopUpEditCtrl|GuiPopUpEditCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiPopUpMenuCtrl|GuiPopUpMenuCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiTextEditCtrl|GuiTextEditCtrl]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/GuiTextEditSliderCtrl|GuiTextEditSliderCtrl]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GuiWindowCtrl|GuiWindowCtrl]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TerrainEditor|TerrainEditor]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/WorldEditor|WorldEditor]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiControlProfile|GuiControlProfile]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiCursor|GuiCursor]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiTabCtrlEntry|GuiTabCtrlEntry]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiTextListEntry|GuiTextListEntry]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/GuiTreeViewNode|GuiTreeViewNode]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/MRandomGenerator|MRandomGenerator]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/MRandomLCG|MRandomLCG]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/MRandomR250|MRandomR250]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/SimObject|SimObject]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/SceneObject|SceneObject]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/fxSunLight|fxSunLight]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GameObject|GameObject]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/Camera|Camera]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/DynamicShapeReplicator|DynamicShapeReplicator]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/DynamicGrass|DynamicGrass]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/DynamicGrassReplicator|DynamicGrassReplicator]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/Sky|Sky]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TerrainBlock|TerrainBlock]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/twSurfaceReference|twSurfaceReference]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/WaterBlock|WaterBlock]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/SimGroup|SimGroup]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/GameConnection|GameConnection]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/Sun|Sun]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TDrawableObject|TDrawableObject]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TBaddy|TBaddy]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TLevelObject|TLevelObject]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TExplosion|TExplosion]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TGaniObject|TGaniObject]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/TProjectile|TProjectile]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/TServerHorse|TServerHorse]]&lt;br /&gt;
***** [[Creation/Dev/Script/Client/TServerPlayer|TServerPlayer]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/TPlayer|TPlayer]]&lt;br /&gt;
****** [[Creation/Dev/Script/Client/TServerNPC|TServerNPC]]&lt;br /&gt;
******* [[Creation/Dev/Script/Client/TServerWeapon|TServerWeapon]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerBomb|TServerBomb]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerCarry|TServerCarry]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerChest|TServerChest]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerExtra|TServerExtra]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerFlying|TServerFlying]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerLeap|TServerLeap]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TServerSign|TServerSign]]&lt;br /&gt;
**** [[Creation/Dev/Script/Client/TShowImg|TShowImg]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TDrawingPanel|TDrawingPanel]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/Terraformer|Terraformer]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TFrameDetail|TFrameDetail]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGaniParam|TGaniParam]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAni|TGraalAni]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniPart|TGraalAniPart]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniSound|TGraalAniSound]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniSprite|TGraalAniSprite]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalAniStep|TGraalAniStep]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TGraalSpriteAttachment|TGraalSpriteAttachment]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/THTTPRequest|THTTPRequest]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TMovementRigid|TMovementRigid]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TParticle|TParticle]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TParticleEmitter|TParticleEmitter]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TParticleModifier|TParticleModifier]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TServerLevel|TServerLevel]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TServerLevelLink|TServerLevelLink]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TShapeMaterial|TShapeMaterial]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TShowImg_Values|TShowImg_Values]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Flash|TShowImg_Flash]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Gani|TShowImg_Gani]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Image|TShowImg_Image]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Shape|TShowImg_Shape]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Poly|TShowImg_Poly]]&lt;br /&gt;
*** [[Creation/Dev/Script/Client/TShowImg_Text|TShowImg_Text]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TStaticVar|TStaticVar]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TTilesLayer|TTilesLayer]]&lt;br /&gt;
** [[Creation/Dev/Script/Client/TUpdatePackage|TUpdatePackage]]&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectors&amp;diff=7810</id>
		<title>Vectors</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectors&amp;diff=7810"/>
		<updated>2006-12-28T18:41:28Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Distance Between Terminal Points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Vectors''' are mathematical representations of any thing that has a length, or magnitude, and direction. Positions are also described using vectors which start at the origin of the coordinate system (0,0,0).&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In GraalScript, a vector is limited to three dimensions, however, mathematics allows for analyses of vectors in n-dimensions. Vectors do not have positions. Two vectors are said to be parallel if they have the same direction (u || v), and are said to be equal if they are parallel and have the same magnitude (u = v). Vectors are generally described by their terminal points with respect to the origin (0,0,0).&lt;br /&gt;
&lt;br /&gt;
The basic format of a vector in GraalScript is {x,y,z} where x, y, and z are all floating points in reference to the axis to which they correspond. Built into GraalScript are several functions which can be used to analyze these vectors.&lt;br /&gt;
&lt;br /&gt;
In mathematics, vectors are often written&lt;br /&gt;
 v = &amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;&lt;br /&gt;
for a vector in three dimensions. They can also be written as the sum of unit vectors, &amp;lt;b&amp;gt;i&amp;lt;/b&amp;gt; = &amp;amp;lt;1,0,0&amp;amp;gt;, &amp;lt;b&amp;gt;j&amp;lt;/b&amp;gt; = &amp;amp;lt;0,1,0&amp;amp;gt;, and &amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt; = &amp;amp;lt;0,0,1&amp;amp;gt; on the x, y, and z axes, respectively. In this case, the vector would be written as&lt;br /&gt;
 v = v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;i&amp;lt;/b&amp;gt; + v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;j&amp;lt;/b&amp;gt; + v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt;&lt;br /&gt;
where the values of v are treated as scalars (numerical multipliers) of the unit vectors.&lt;br /&gt;
&lt;br /&gt;
To denote the difference between a scalar and a vector, vectors are often written with a directional arrow above them, which looks like the top half of an arrow pointing right. In GraalScript, a scalar and a vector are impossible to confuse: a scalar is a floating point whereas a vector is a string.&lt;br /&gt;
&lt;br /&gt;
=== Vector Length (Magnitude) ===&lt;br /&gt;
Being as vectors are merely written by terminal point coordinates, there is no immediate way to determine the magnitude of the vector. Mathematically, the terminal point lies on a sphere that has the same radius as the vector's magnitude. Thus, we can use the equation of a sphere to calculate the magnitude.&amp;lt;br /&amp;gt;&lt;br /&gt;
 r&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 r = &amp;amp;radic;(x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
where r is the magnitude. Generally, the magnitude is denoted as |v| or ||v||. This was chosen, because absolute value refers to distance from the origin, thus  the marks were suitable. In GraalScript, however, the magnitude of any vector can be calculated simply by plugging a vector string into the '''vectorlen({{graycourier|v}})''' function.&lt;br /&gt;
&lt;br /&gt;
=== Unit Length ===&lt;br /&gt;
A vector is said to have &amp;quot;unit length&amp;quot; when it's magnitude is one. '''i''', '''j''', and '''k''' are each unit vectors because their magnitudes are each one. To make a vector of unit length, the vector must merely be divided by it's magnitude.&lt;br /&gt;
Let v be a vector and u be the direction (unit vector) of v.&lt;br /&gt;
 v = &amp;lt;1,7,1&amp;gt;&lt;br /&gt;
 |v| = &amp;amp;radic;(1&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 7&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) = &amp;amp;radic;51&lt;br /&gt;
 u = v/|v| = &amp;lt;1/&amp;amp;radic;51,7/&amp;amp;radic;51,1/&amp;amp;radic;51&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graalscript has a built-in function, '''vectornormalize({{graycourier|1=v}})''',to perform such a calculation.&lt;br /&gt;
&lt;br /&gt;
== Vector Modification ==&lt;br /&gt;
Along with vectorlen are a plethora of functions built into GraalScript all for the purpose of modifying vectors.&lt;br /&gt;
&lt;br /&gt;
=== Vector Addition ===&lt;br /&gt;
[[Image:Vectors-addition.png|thumb|right|Vector addition]]&lt;br /&gt;
Given the vectors u and v, we could create a third vector that has the magnitude of u and v, were the two vectors to be placed tip-to-end. This is called vector addition and can be done with the function '''vectoradd({{graycourier|u}},{{graycourier|v}})'''. This takes the terminal coordinates and adds them together. to make a new vector: &amp;lt;br /&amp;gt;&lt;br /&gt;
 w = &amp;amp;lt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;. &lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector-Scalar Multiplication ===&lt;br /&gt;
[[Image:Vectors-scalar-multiplication.png|thumb|left|Vector-scalar multiplication]]&lt;br /&gt;
With a vector, v, and a scalar, s, we could make a new vector that is s times larger than v. This can be accomplished in GraalScript with the function '''vectorscale({{graycourier|v}},{{graycourier|s}})'''. The vector is thus extended in the following manner: &amp;lt;br /&amp;gt;&lt;br /&gt;
 s&amp;amp;#183;v = s&amp;amp;#183;&amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt; = &amp;amp;lt;s&amp;amp;#183;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,s&amp;amp;#183;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,s&amp;amp;#183;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector Subtraction ===&lt;br /&gt;
[[Image:Vectors-subtraction.png|thumb|right|Vector subtraction]]&lt;br /&gt;
With these two properties, we find that vector subtraction is possible, and no longer a new idea. This is done in GraalScript with the use of the '''vectorsub({{graycourier|u}},{{graycourier|v}})''' function. &amp;lt;br /&amp;gt;&lt;br /&gt;
 u-v = u + (-v) = u + (-1)&amp;amp;#183;v&lt;br /&gt;
You can imagine this as the two vectors placed tip-to-end, but the second is facing the opposite direction.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Distance Between Terminal Points ===&lt;br /&gt;
Without creating a third vector, it is simple in GraalScript to find the distance between the two points at which two vectors end. This function is '''vectordist({{graycourier|u}},{{graycourier|v}})'''. &amp;lt;br /&amp;gt;&lt;br /&gt;
The return value would be&lt;br /&gt;
 &amp;amp;radic;((u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;+(u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;+(u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
The mathematical operation is the pythagorean theorem (or a combination of two). As may be evident, the distance is the magnitude of '''u'''-'''v'''.&lt;br /&gt;
&lt;br /&gt;
== Other functions ==&lt;br /&gt;
vectordot({{graycourier|u}},{{graycourier|v}}): see [[Dot Product]].&amp;lt;br /&amp;gt;&lt;br /&gt;
vectorcross({{graycourier|u}},{{graycourier|v}}): see [[Cross Product]].&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectors&amp;diff=7809</id>
		<title>Vectors</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectors&amp;diff=7809"/>
		<updated>2006-12-28T18:40:53Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Vector Modification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Vectors''' are mathematical representations of any thing that has a length, or magnitude, and direction. Positions are also described using vectors which start at the origin of the coordinate system (0,0,0).&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In GraalScript, a vector is limited to three dimensions, however, mathematics allows for analyses of vectors in n-dimensions. Vectors do not have positions. Two vectors are said to be parallel if they have the same direction (u || v), and are said to be equal if they are parallel and have the same magnitude (u = v). Vectors are generally described by their terminal points with respect to the origin (0,0,0).&lt;br /&gt;
&lt;br /&gt;
The basic format of a vector in GraalScript is {x,y,z} where x, y, and z are all floating points in reference to the axis to which they correspond. Built into GraalScript are several functions which can be used to analyze these vectors.&lt;br /&gt;
&lt;br /&gt;
In mathematics, vectors are often written&lt;br /&gt;
 v = &amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;&lt;br /&gt;
for a vector in three dimensions. They can also be written as the sum of unit vectors, &amp;lt;b&amp;gt;i&amp;lt;/b&amp;gt; = &amp;amp;lt;1,0,0&amp;amp;gt;, &amp;lt;b&amp;gt;j&amp;lt;/b&amp;gt; = &amp;amp;lt;0,1,0&amp;amp;gt;, and &amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt; = &amp;amp;lt;0,0,1&amp;amp;gt; on the x, y, and z axes, respectively. In this case, the vector would be written as&lt;br /&gt;
 v = v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;i&amp;lt;/b&amp;gt; + v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;j&amp;lt;/b&amp;gt; + v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt;&lt;br /&gt;
where the values of v are treated as scalars (numerical multipliers) of the unit vectors.&lt;br /&gt;
&lt;br /&gt;
To denote the difference between a scalar and a vector, vectors are often written with a directional arrow above them, which looks like the top half of an arrow pointing right. In GraalScript, a scalar and a vector are impossible to confuse: a scalar is a floating point whereas a vector is a string.&lt;br /&gt;
&lt;br /&gt;
=== Vector Length (Magnitude) ===&lt;br /&gt;
Being as vectors are merely written by terminal point coordinates, there is no immediate way to determine the magnitude of the vector. Mathematically, the terminal point lies on a sphere that has the same radius as the vector's magnitude. Thus, we can use the equation of a sphere to calculate the magnitude.&amp;lt;br /&amp;gt;&lt;br /&gt;
 r&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 r = &amp;amp;radic;(x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
where r is the magnitude. Generally, the magnitude is denoted as |v| or ||v||. This was chosen, because absolute value refers to distance from the origin, thus  the marks were suitable. In GraalScript, however, the magnitude of any vector can be calculated simply by plugging a vector string into the '''vectorlen({{graycourier|v}})''' function.&lt;br /&gt;
&lt;br /&gt;
=== Unit Length ===&lt;br /&gt;
A vector is said to have &amp;quot;unit length&amp;quot; when it's magnitude is one. '''i''', '''j''', and '''k''' are each unit vectors because their magnitudes are each one. To make a vector of unit length, the vector must merely be divided by it's magnitude.&lt;br /&gt;
Let v be a vector and u be the direction (unit vector) of v.&lt;br /&gt;
 v = &amp;lt;1,7,1&amp;gt;&lt;br /&gt;
 |v| = &amp;amp;radic;(1&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 7&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) = &amp;amp;radic;51&lt;br /&gt;
 u = v/|v| = &amp;lt;1/&amp;amp;radic;51,7/&amp;amp;radic;51,1/&amp;amp;radic;51&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graalscript has a built-in function, '''vectornormalize({{graycourier|1=v}})''',to perform such a calculation.&lt;br /&gt;
&lt;br /&gt;
== Vector Modification ==&lt;br /&gt;
Along with vectorlen are a plethora of functions built into GraalScript all for the purpose of modifying vectors.&lt;br /&gt;
&lt;br /&gt;
=== Vector Addition ===&lt;br /&gt;
[[Image:Vectors-addition.png|thumb|right|Vector addition]]&lt;br /&gt;
Given the vectors u and v, we could create a third vector that has the magnitude of u and v, were the two vectors to be placed tip-to-end. This is called vector addition and can be done with the function '''vectoradd({{graycourier|u}},{{graycourier|v}})'''. This takes the terminal coordinates and adds them together. to make a new vector: &amp;lt;br /&amp;gt;&lt;br /&gt;
 w = &amp;amp;lt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;. &lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector-Scalar Multiplication ===&lt;br /&gt;
[[Image:Vectors-scalar-multiplication.png|thumb|left|Vector-scalar multiplication]]&lt;br /&gt;
With a vector, v, and a scalar, s, we could make a new vector that is s times larger than v. This can be accomplished in GraalScript with the function '''vectorscale({{graycourier|v}},{{graycourier|s}})'''. The vector is thus extended in the following manner: &amp;lt;br /&amp;gt;&lt;br /&gt;
 s&amp;amp;#183;v = s&amp;amp;#183;&amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt; = &amp;amp;lt;s&amp;amp;#183;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,s&amp;amp;#183;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,s&amp;amp;#183;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector Subtraction ===&lt;br /&gt;
[[Image:Vectors-subtraction.png|thumb|right|Vector subtraction]]&lt;br /&gt;
With these two properties, we find that vector subtraction is possible, and no longer a new idea. This is done in GraalScript with the use of the '''vectorsub({{graycourier|u}},{{graycourier|v}})''' function. &amp;lt;br /&amp;gt;&lt;br /&gt;
 u-v = u + (-v) = u + (-1)&amp;amp;#183;v&lt;br /&gt;
You can imagine this as the two vectors placed tip-to-end, but the second is facing the opposite direction.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Distance Between Terminal Points ===&lt;br /&gt;
Without creating a third vector, it is simple in GraalScript to find the distance between the two points at which two vectors end. This function is '''vectordist({{graycourier|u}},{{graycourier|v}})'''. &amp;lt;br /&amp;gt;&lt;br /&gt;
The return value would be&lt;br /&gt;
 &amp;amp;radic;((u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;+(u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;+(u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
The mathematical operation is the pythagorean theorem (or a combination of two). As may be evident, the magnitude is that of '''u'''-'''v'''.&lt;br /&gt;
&lt;br /&gt;
== Other functions ==&lt;br /&gt;
vectordot({{graycourier|u}},{{graycourier|v}}): see [[Dot Product]].&amp;lt;br /&amp;gt;&lt;br /&gt;
vectorcross({{graycourier|u}},{{graycourier|v}}): see [[Cross Product]].&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Vectors&amp;diff=7808</id>
		<title>Vectors</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Vectors&amp;diff=7808"/>
		<updated>2006-12-28T18:40:34Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Vector Modification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Vectors''' are mathematical representations of any thing that has a length, or magnitude, and direction. Positions are also described using vectors which start at the origin of the coordinate system (0,0,0).&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In GraalScript, a vector is limited to three dimensions, however, mathematics allows for analyses of vectors in n-dimensions. Vectors do not have positions. Two vectors are said to be parallel if they have the same direction (u || v), and are said to be equal if they are parallel and have the same magnitude (u = v). Vectors are generally described by their terminal points with respect to the origin (0,0,0).&lt;br /&gt;
&lt;br /&gt;
The basic format of a vector in GraalScript is {x,y,z} where x, y, and z are all floating points in reference to the axis to which they correspond. Built into GraalScript are several functions which can be used to analyze these vectors.&lt;br /&gt;
&lt;br /&gt;
In mathematics, vectors are often written&lt;br /&gt;
 v = &amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;&lt;br /&gt;
for a vector in three dimensions. They can also be written as the sum of unit vectors, &amp;lt;b&amp;gt;i&amp;lt;/b&amp;gt; = &amp;amp;lt;1,0,0&amp;amp;gt;, &amp;lt;b&amp;gt;j&amp;lt;/b&amp;gt; = &amp;amp;lt;0,1,0&amp;amp;gt;, and &amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt; = &amp;amp;lt;0,0,1&amp;amp;gt; on the x, y, and z axes, respectively. In this case, the vector would be written as&lt;br /&gt;
 v = v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;i&amp;lt;/b&amp;gt; + v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;j&amp;lt;/b&amp;gt; + v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt;&lt;br /&gt;
where the values of v are treated as scalars (numerical multipliers) of the unit vectors.&lt;br /&gt;
&lt;br /&gt;
To denote the difference between a scalar and a vector, vectors are often written with a directional arrow above them, which looks like the top half of an arrow pointing right. In GraalScript, a scalar and a vector are impossible to confuse: a scalar is a floating point whereas a vector is a string.&lt;br /&gt;
&lt;br /&gt;
=== Vector Length (Magnitude) ===&lt;br /&gt;
Being as vectors are merely written by terminal point coordinates, there is no immediate way to determine the magnitude of the vector. Mathematically, the terminal point lies on a sphere that has the same radius as the vector's magnitude. Thus, we can use the equation of a sphere to calculate the magnitude.&amp;lt;br /&amp;gt;&lt;br /&gt;
 r&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 r = &amp;amp;radic;(x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
where r is the magnitude. Generally, the magnitude is denoted as |v| or ||v||. This was chosen, because absolute value refers to distance from the origin, thus  the marks were suitable. In GraalScript, however, the magnitude of any vector can be calculated simply by plugging a vector string into the '''vectorlen({{graycourier|v}})''' function.&lt;br /&gt;
&lt;br /&gt;
=== Unit Length ===&lt;br /&gt;
A vector is said to have &amp;quot;unit length&amp;quot; when it's magnitude is one. '''i''', '''j''', and '''k''' are each unit vectors because their magnitudes are each one. To make a vector of unit length, the vector must merely be divided by it's magnitude.&lt;br /&gt;
Let v be a vector and u be the direction (unit vector) of v.&lt;br /&gt;
 v = &amp;lt;1,7,1&amp;gt;&lt;br /&gt;
 |v| = &amp;amp;radic;(1&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 7&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) = &amp;amp;radic;51&lt;br /&gt;
 u = v/|v| = &amp;lt;1/&amp;amp;radic;51,7/&amp;amp;radic;51,1/&amp;amp;radic;51&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graalscript has a built-in function, '''vectornormalize({{graycourier|1=v}})''',to perform such a calculation.&lt;br /&gt;
&lt;br /&gt;
== Vector Modification ==&lt;br /&gt;
Along with vectorlen are a plethora of functions built into GraalScript all for the purpose of modifying vectors.&lt;br /&gt;
&lt;br /&gt;
=== Vector Addition ===&lt;br /&gt;
[[Image:Vectors-addition.png|thumb|right|Vector addition]]&lt;br /&gt;
Given the vectors u and v, we could create a third vector that has the magnitude of u and v, were the two vectors to be placed tip-to-end. This is called vector addition and can be done with the function '''vectoradd({{graycourier|u}},{{graycourier|v}})'''. This takes the terminal coordinates and adds them together. to make a new vector: &amp;lt;br /&amp;gt;&lt;br /&gt;
 w = &amp;amp;lt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;, u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;+v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;. &lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector-Scalar Multiplication ===&lt;br /&gt;
[[Image:Vectors-scalar-multiplication.png|thumb|left|Vector-scalar multiplication]]&lt;br /&gt;
With a vector, v, and a scalar, s, we could make a new vector that is s times larger than v. This can be accomplished in GraalScript with the function '''vectorscale({{graycourier|v}},{{graycourier|s}})'''. The vector is thus extended in the following manner: &amp;lt;br /&amp;gt;&lt;br /&gt;
 s&amp;amp;#183;v = s&amp;amp;#183;&amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt; = &amp;amp;lt;s&amp;amp;#183;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,s&amp;amp;#183;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,s&amp;amp;#183;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector Subtraction ===&lt;br /&gt;
[[Image:Vectors-subtraction.png|thumb|right|Vector subtraction]]&lt;br /&gt;
With these two properties, we find that vector subtraction is possible, and no longer a new idea. This is done in GraalScript with the use of the '''vectorsub({{graycourier|u}},{{graycourier|v}})''' function. &amp;lt;br /&amp;gt;&lt;br /&gt;
 u-v = u + (-v) = u + (-1)&amp;amp;#183;v&lt;br /&gt;
You can imagine this as the two vectors placed tip-to-end, but the second is facing the opposite direction.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Distance Between Terminal Points ===&lt;br /&gt;
Without creating a third vector, it is simple in GraalScript to find the distance between the two points at which two vectors end. This function is '''vectrodist({{graycourier|u}},{{graycourier|v}})'''. &amp;lt;br /&amp;gt;&lt;br /&gt;
The return value would be&lt;br /&gt;
 &amp;amp;radic;((u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;+(u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;+(u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
The mathematical operation is the pythagorean theorem (or a combination of two). As may be evident, the magnitude is that of '''u'''-'''v'''.&lt;br /&gt;
&lt;br /&gt;
== Other functions ==&lt;br /&gt;
vectordot({{graycourier|u}},{{graycourier|v}}): see [[Dot Product]].&amp;lt;br /&amp;gt;&lt;br /&gt;
vectorcross({{graycourier|u}},{{graycourier|v}}): see [[Cross Product]].&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Cross_Product&amp;diff=7807</id>
		<title>Cross Product</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Cross_Product&amp;diff=7807"/>
		<updated>2006-12-28T18:28:50Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Cross Product is a property of [[Vectors|vectors]]. The cross product takes two vectors and returns a third, which is perpendicular, or orthogonal, to the passed vectors. This vector is referred to as the normal vector, which normally is corrected to have a total magnitude of one in mathematics.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
If vectors u and v are crossed (&amp;quot;u cross v&amp;quot;), the magnitude of the normal vector is equal to |u||v|sin(&amp;amp;theta;). Thus,&lt;br /&gt;
 |u &amp;amp;times; v| = |u||v||sin(&amp;amp;theta;)||'''n'''| &lt;br /&gt;
 |u &amp;amp;times; v| = |u||v||sin(&amp;amp;theta;)|&lt;br /&gt;
In other applications, this magnitude has been found to be equal to the area of the parallelogram whose vertecies are at '''0''', '''u''', '''u'''+'''v''', and '''v'''.&lt;br /&gt;
&lt;br /&gt;
In addition,&lt;br /&gt;
 u &amp;amp;times; '''0''' = '''0'''&lt;br /&gt;
 u &amp;amp;times; v = -(v &amp;amp;times; u)&lt;br /&gt;
 (ru) &amp;amp;times; (sv) = (rs) u &amp;amp;times; v (where r and s are scalars)&lt;br /&gt;
&lt;br /&gt;
== General Application of the Cross Product ==&lt;br /&gt;
It is common practice in mathematics to write vecotrs as sums of th unti vectors, '''i''', '''j''', and '''k'''. These each have a magnitude of one and, from the origin, move precisely 1 unit on the x, y, and z axes respectively.&lt;br /&gt;
&lt;br /&gt;
Say, then, that we have two vectors, u and v.&lt;br /&gt;
 u = &amp;amp;lt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;&lt;br /&gt;
 v = &amp;amp;lt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;amp;gt;&lt;br /&gt;
We can rewrite these vectors in terms of '''i''', '''j''', and '''k'''.&lt;br /&gt;
 u = u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;'''i''' + u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;'''j''' + u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;'''k'''&lt;br /&gt;
 v = v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;'''i''' + v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;'''j''' + v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;'''k'''&lt;br /&gt;
We can then &amp;quot;multiply&amp;quot; them in an algebraic manner.&lt;br /&gt;
 u &amp;amp;times; v = (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''j''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''k''' + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''j''' + &lt;br /&gt;
         (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''k''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''j''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''k'''&lt;br /&gt;
We can remove immediately any terms where the vector is crossing itself. The angle between two parallel vectors, a and b, is 0, thus a &amp;amp;times; b = |a||b|sin(0)|n| = 0 . So, the above statement simplifies to&lt;br /&gt;
&lt;br /&gt;
 u &amp;amp;times; v = (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''j''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''i''' &amp;amp;times; '''k''' + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''j''' &amp;amp;times; '''k''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''i''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''k''' &amp;amp;times; '''j'''&lt;br /&gt;
Because the cross product reflects the normal vector, the following hold:&lt;br /&gt;
 i &amp;amp;times; j = -(j &amp;amp;times; i) = k&lt;br /&gt;
 j &amp;amp;times; k = -(k &amp;amp;times; j) = i&lt;br /&gt;
 k &amp;amp;times; i = -(i &amp;amp;times; k) = j&lt;br /&gt;
Then, we can simplify our equation further:&lt;br /&gt;
 u &amp;amp;times; v = (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''k''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)(-'''j''') + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)(-'''k''') + (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''i''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''j''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)(-'''i''')&lt;br /&gt;
       = (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''i''' + (u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;)'''j''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''k'''&lt;br /&gt;
       = (u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)'''i''' - (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''j''' + (u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;)'''k''' (u-components are  in order)&lt;br /&gt;
This describes the direction of the normal vector to the vectors u and v. This sum can be expressed in [[Matrix|matricies]]&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;'''i''' - &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;'''j''' + &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;'''k'''&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;=&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot;&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;'''i'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''j'''&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;'''k'''&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;u&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;v&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The Cross Product in GraalScript ==&lt;br /&gt;
The cross product of two vector arrays in Graal can be obtained through the vectorcross({{graycourier|u}},{{graycourier|v}}) function. It's return value is a vector, w&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;'''i''' + w&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;'''j''' + w&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;'''k''', where the vector w is calculated from the determinant of the above [[Matrix|matrix]].&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
	<entry>
		<id>https://graalonline.net/index.php?title=Matrix&amp;diff=7691</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://graalonline.net/index.php?title=Matrix&amp;diff=7691"/>
		<updated>2006-12-02T00:43:10Z</updated>

		<summary type="html">&lt;p&gt;Tolnaftate2004: /* Demystifying Matricies in GraalScript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''matrix''' (''pl.'' matricies) is a list of numbers, generally who have a relationship between them, that are ordered in a type of mathematical array. A matrix, m, may be written as either |m|, [m], or sometimes even (m) in mathematics, where m is a placeholder for the numbers in the matrix.&lt;br /&gt;
&lt;br /&gt;
''Any matrix examples below will use the |m| notation for simplicity.''&lt;br /&gt;
&lt;br /&gt;
== Reading a Matrix ==&lt;br /&gt;
A matrix is ordered in rows and colums, which are counted by increasing i and j respectively. One can think of a matrix as a 2-dimensional array where each object in the 1st dimension holds an array of numbers in that row.&lt;br /&gt;
&lt;br /&gt;
An entry at i=2 and j=3 is noted by either M[2,3] or m&amp;lt;sub&amp;gt;2,3&amp;lt;/sub&amp;gt;. These numbers are important for some modifications involving these matricies.&lt;br /&gt;
&lt;br /&gt;
== Demystifying Matricies in GraalScript ==&lt;br /&gt;
If you have ever tested any of the matrix functions built into GraalScript, you may be lost as to where the return value comes from. Well, luckily there are some adept enough with math to understand these functions. These are their findings.&lt;br /&gt;
&lt;br /&gt;
=== matrixcreate() ===&lt;br /&gt;
Let '''v''' be a vector and '''a''' consisting of a vector and a scalar.&lt;br /&gt;
&lt;br /&gt;
==== Usage ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
strMatrix = matrixcreate(v,a);&lt;br /&gt;
}}&lt;br /&gt;
Where v describes the translation (postition) and 'a' describes the rotation (rotation axis and angle).&lt;br /&gt;
&lt;br /&gt;
==== Return Value ====&lt;br /&gt;
Returns a matrix array of length 7 (this will be explained later).&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
temp.matrix = matrixcreate({1,1,1},{1,7,1,1});&lt;br /&gt;
// This will return 1,1,1,0.140028,0.980196058,0.140028,7.14595223&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== The Math Behind the Function ====&lt;br /&gt;
The first three numbers of the return value should be rather familiar. It is the vector you passed to the function. The other four seem to come out of nowhere. However, there is a method to this madness. The first of these three are merely a property of angles. Because of the [[Dot Product]] of vectors, we are able to calculate the cosine of the angle between two vectors. Well, we have actually created a new vector in this code!&lt;br /&gt;
&lt;br /&gt;
As defined in [[Vectors]], we know that there are three unit vectors that lay on the x, y, and z axes. These vectors have been given the letters '''i''', '''j''', and '''k''', respectively. The first value defined in the &amp;quot;rotation&amp;quot; is multiplied to '''i''', the second to '''j''', and so forth, and this makes a new vector. However, this still does not tell us why we have these numbers returned to us.&lt;br /&gt;
&lt;br /&gt;
From the definition of the dot product, we know that&lt;br /&gt;
 cos(&amp;amp;theta;) = u&amp;amp;#0149;v/(|u||v|)&lt;br /&gt;
The first three numbers returned to us are the cosine of the angles between the new vector (in this case, &amp;lt;1,7,1&amp;gt;) and each of our unit vectors. For example:&lt;br /&gt;
 cos(&amp;amp;alpha;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;1,0,0&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;1,0,0&amp;gt;|) = 1/&amp;amp;radic;51 = 0.1400280084&lt;br /&gt;
 cos(&amp;amp;beta;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;0,1,0&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;0,1,0&amp;gt;|) = 7/&amp;amp;radic;51 = 0.9801960588&lt;br /&gt;
 cos(&amp;amp;gamma;) = &amp;lt;1,7,1&amp;gt;&amp;amp;#0149;&amp;lt;0,0,1&amp;gt;/(|&amp;lt;1,7,1&amp;gt;||&amp;lt;0,0,1&amp;gt;|) = 1/&amp;amp;radic;51 = 0.1400280084&lt;br /&gt;
&lt;br /&gt;
''There is an evident difference between the values given here and the return value. A computer cannot calculate cosine on its own. It merely uses a method of estimation.''&lt;br /&gt;
&lt;br /&gt;
 cos(&amp;amp;alpha;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + cos(&amp;amp;beta;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + cos(&amp;amp;gamma;)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; = 1 &amp;lt;sup&amp;gt;(1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=&amp;quot;33%&amp;quot; noshade=&amp;quot;noshade&amp;quot;&amp;gt;&lt;br /&gt;
(1) The returned values are accurate within &amp;amp;plusmn;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So far, we have 6 of 7 figured out. The last is the simplest of them all. Plugging the new vector into vectorlen() or using &amp;amp;radic;(x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + y&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + z&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) returns it's magnitude. This, multiplied by the fourth number of the second parameter, is the last of the returned values (and as far as anyone can tell the vector passed to the function has no bearing on the return value).&lt;br /&gt;
&lt;br /&gt;
=== matrixcreatefromeuler() ===&lt;br /&gt;
Let '''r''' be an array describing rotation, {&amp;amp;alpha;,&amp;amp;beta;,&amp;amp;gamma;}.&lt;br /&gt;
&lt;br /&gt;
==== Usage ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
strMatrix = matrixcreatefromeuler(r);&lt;br /&gt;
}}&lt;br /&gt;
Where r describes the rotation (rotation axis and angle).&lt;br /&gt;
&lt;br /&gt;
==== Return Value ====&lt;br /&gt;
Returns a matrix array of length 7.&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
{{code|1=&lt;br /&gt;
temp.matrix = matrixcreatefromeuler({pi/2,0,pi/2});&lt;br /&gt;
// This will return 0,0,0,-0.577350258,-0.577350258,-0.577350258,119.999976018&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== The Math Behind the Function ====&lt;br /&gt;
'''Coming soon!'''&lt;br /&gt;
&lt;br /&gt;
== Matricies in Mathematics ==&lt;br /&gt;
There are several matrix-specific operations in mathematics that are helpful in calculations of objects in space.&lt;br /&gt;
&lt;br /&gt;
=== Matrix Addition and Subtraction ===&lt;br /&gt;
These operations are generally between two equal-sized matricies. This is a rather simple operation. however, we can assume that the matricies can zero-fill until they are of equal size. If we have two matricies, m and n, the sum of these two is merely m&amp;lt;sub&amp;gt;i,j&amp;lt;/sub&amp;gt;&amp;amp;plusmn;n&amp;lt;sub&amp;gt;i,j&amp;lt;/sub&amp;gt; for each i and j where 0 &amp;amp;le; i &amp;amp;lt; # of rows and 0 &amp;amp;le; j &amp;amp;lt; # of columns.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=3&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;a&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;b&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;c&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;d&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;e&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;f&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;+&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=3&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;g&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;h&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;i&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;j&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;k&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;l&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;=&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=3&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;a+g&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;b+h&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;c+i&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;d+j&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;e+k&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;f+l&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
=== Matrix Multiplication ===&lt;br /&gt;
In mathematics, two matricies can be multiplied together to create a third matrix. There is only one rule to multiplying matricies. That is that the number of columns of the first must be equal to the number of rows of the second.&lt;br /&gt;
A matrix that is ''a'' high and ''b'' wide can multiply with another matrix that is ''b'' high and ''c'' wide, but not the reverse. Their products will be a matrix with height ''a'' and width ''c''.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=3&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;a&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;b&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;c&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;d&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;e&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;f&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;g&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;h&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;i&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=3&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;j&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;k&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;l&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;=&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table frame=&amp;quot;vsides&amp;quot; style=&amp;quot;border: 1px solid black;&amp;quot; cellspacing=3&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;aj+bk+cl&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;dj+ek+fl&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;gj+hk+ij&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3x'''3'''&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;'''3'''x1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3x1&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above example could be used to simply describe the equations of three planes and find the point at which three planes in three dimensions meet (three planes meet at exactly one point, two planes meet at a unique line).&lt;/div&gt;</summary>
		<author><name>Tolnaftate2004</name></author>
	</entry>
</feed>