<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://www.sandboxgamemaker.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Porterking</id>
		<title>Platinum Arts Sandbox Free 3D Game Maker - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://www.sandboxgamemaker.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Porterking"/>
		<link rel="alternate" type="text/html" href="https://www.sandboxgamemaker.com/wiki/index.php?title=Special:Contributions/Porterking"/>
		<updated>2026-05-03T02:48:35Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://www.sandboxgamemaker.com/wiki/index.php?title=Installing_Platinum_Arts_Sandbox&amp;diff=1288</id>
		<title>Installing Platinum Arts Sandbox</title>
		<link rel="alternate" type="text/html" href="https://www.sandboxgamemaker.com/wiki/index.php?title=Installing_Platinum_Arts_Sandbox&amp;diff=1288"/>
				<updated>2011-07-18T06:59:47Z</updated>
		
		<summary type="html">&lt;p&gt;Porterking: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article explains how to install Platinum Arts Sandbox&lt;br /&gt;
&lt;br /&gt;
== Obtaining Sandbox ==&lt;br /&gt;
&lt;br /&gt;
You will first have to [http://kids.platinumarts.net/download-sandbox.html download the latest release].  If it fails to load after you tried the instructions below, please read our [http://kids.platinumarts.net/wiki/index.php?title=FAQ Frequently Asked Questions]&lt;br /&gt;
&lt;br /&gt;
== Installing the Windows version ==&lt;br /&gt;
&lt;br /&gt;
When you click on the downloaded file it will ask you where you want to install Sandbox.  If you click the three dots to the right you can browse your computer and select where you&amp;#039;d like to place sandbox.  After you are satisfied with where it is to install hit extract.  The sandbox folder will then be created where you chose to install it.  Locate the folder and enter it.  Click on the file that says &amp;quot;&amp;#039;&amp;#039;&amp;#039;(clickheretostart)&amp;#039;&amp;#039;&amp;#039;&amp;quot; and it should launch.  To launch the carts click on the file that says &amp;quot;cartmode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Installing the multi-platform version ==&lt;br /&gt;
&lt;br /&gt;
The multi-platform version works on Windows, Linux and Mac.&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
To install Sandbox in a Linux based operating system, simply download the latest sandbox multi platform zip we have available and extract it into a directory of your choice, then use chmod +x to give sandbox_unix or _SandboxLauncher executable permissions, (for the non console savvy, GNOME and KDE allow these changes on the file&amp;#039;s properties screen). the sandbox_unix script will take care of permissions, so you may wish to run it first before resorting to the launcher.&lt;br /&gt;
&lt;br /&gt;
If you wish for a system wide install, one that&amp;#039;ll require you to only type &amp;#039;sandbox&amp;#039; followed by any desired command line options to run the program, go into the src directory and give the install.sh script executable permissions, and then run it, it&amp;#039;ll set everything up for you. Note: all your files will, from here on out, be saved in ~/.platinumarts.&lt;br /&gt;
&lt;br /&gt;
The Makefile contains a wrapper for this, &amp;quot;make distinstall&amp;quot;, if there&amp;#039;s any problems, see the [[Compiling_the_source_code|compilation page]].&lt;br /&gt;
&lt;br /&gt;
==== Debian/Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
Platinum Arts Sandbox Game Maker is included in Debian 6.0 (Squeeze), Ubuntu 10.10 (Maverick), and later releases. It will be in the contrib and multiverse repositories, respectively. The packages can be installed through apt-get, aptitude, synaptic, etc. The package will install links in the application-&amp;gt; games menu. From the command line, type &amp;quot;sandbox_unix_usr -h&amp;quot; for options on how to use.&lt;br /&gt;
&lt;br /&gt;
In Ubuntu you can also install through the &amp;quot;Ubuntu Software Center.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Additional information and notes [http://forum.sandboxgamemaker.com/viewtopic.php?f=8&amp;amp;t=933&amp;amp;p=4952#p4952 on the forum].&lt;br /&gt;
&lt;br /&gt;
Ubuntu users can also retrieve the packages from [http://www.playdeb.net playdeb.net]. see [http://www.playdeb.net/updates/Ubuntu/all#how_to_install here] for use instructions&lt;br /&gt;
&lt;br /&gt;
=== OSX ===&lt;br /&gt;
&lt;br /&gt;
We&amp;#039;ll leave it to you, chances are you&amp;#039;ll want to put it in the applications, but first, before you do that, you&amp;#039;ll have to compile your own binaries until we can provide them for.&lt;br /&gt;
&lt;br /&gt;
== Related ==&lt;br /&gt;
&lt;br /&gt;
*[[compiling the source code]]&lt;br /&gt;
*[[Bug reports]]&lt;br /&gt;
* [[development|Obtaining development version]]&lt;br /&gt;
* [[Cooperative Editing]] (server setup)&lt;br /&gt;
&lt;br /&gt;
[http://customcollegeessays.com/index.php college essay]&lt;/div&gt;</summary>
		<author><name>Porterking</name></author>	</entry>

	<entry>
		<id>https://www.sandboxgamemaker.com/wiki/index.php?title=Good_free_programs_for_Sandbox&amp;diff=1287</id>
		<title>Good free programs for Sandbox</title>
		<link rel="alternate" type="text/html" href="https://www.sandboxgamemaker.com/wiki/index.php?title=Good_free_programs_for_Sandbox&amp;diff=1287"/>
				<updated>2011-07-18T06:59:42Z</updated>
		
		<summary type="html">&lt;p&gt;Porterking: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All the below programs are free:&lt;br /&gt;
&lt;br /&gt;
Wings3d, a great modeler with a outstanding uv mapper.&lt;br /&gt;
&lt;br /&gt;
http://www.wings3d.com/&lt;br /&gt;
&lt;br /&gt;
Tattoo 3D, This was my first 3D texturing program. It great for fast texturing but limited on more powerfull functions as it a older program. Free to use for non-commerical work.&lt;br /&gt;
&lt;br /&gt;
http://www.terabit-software.co.uk/&lt;br /&gt;
&lt;br /&gt;
Blacksmith 3D, You can paint your models in realtime 3D. The &amp;quot;freeware&amp;quot; 3D painter limits your export image size to 1024 x1024 which is more than enough for Sandbox&lt;br /&gt;
&lt;br /&gt;
http://www.blacksmith3d.com/blacksmith3D-3d-paint-software.php&lt;br /&gt;
&lt;br /&gt;
Artweaver, a 2d paint program like photoshop. It supports layers. Some texture artist like to paint on the flat 2D uv map image for textuing and other texturing usage.&lt;br /&gt;
&lt;br /&gt;
http://www.artweaver.de/index.php?en_version&lt;br /&gt;
&lt;br /&gt;
Misfit Model 3D, to add bones and animations for your NPC or other models, plus to save your model as a md3 file with the animation data. be sure to get the lastest beta version&lt;br /&gt;
&lt;br /&gt;
http://www.misfitcode.com/misfitmodel3d/&lt;br /&gt;
&lt;br /&gt;
CharactorFx, for adding bones and animation to your models. It&amp;#039;s a little older program but works great and saves to md2 files.&lt;br /&gt;
&lt;br /&gt;
http://www.insanesoftware.de/&lt;br /&gt;
&lt;br /&gt;
MD3Compile, a very quick and easy converter for md2,3ds files to a md3 file. I use it for converting my static 3ds models into a md3 file plus to rebuild my 3ds model&amp;#039;s normals.&lt;br /&gt;
&lt;br /&gt;
http://www.quakeunity.com/file=481&lt;br /&gt;
&lt;br /&gt;
Notepad Plus (++), unique text tool built mainly for scripting of many different types. This can be used to edit/make CFGs in Sandbox.&lt;br /&gt;
&lt;br /&gt;
http://notepad-plus.sourceforge.net/uk/site.htm&lt;br /&gt;
&lt;br /&gt;
[http://essaywritingservices.org/prices.php write my paper]&lt;/div&gt;</summary>
		<author><name>Porterking</name></author>	</entry>

	<entry>
		<id>https://www.sandboxgamemaker.com/wiki/index.php?title=FPS&amp;diff=1286</id>
		<title>FPS</title>
		<link rel="alternate" type="text/html" href="https://www.sandboxgamemaker.com/wiki/index.php?title=FPS&amp;diff=1286"/>
				<updated>2011-07-18T06:59:37Z</updated>
		
		<summary type="html">&lt;p&gt;Porterking: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPS(First Person Shooter) Mode&lt;br /&gt;
FPS mode is the default mode. It doesn&amp;#039;t have a lot of special features like the other modes, including spells, advanced interaction, platforming levels, etc. It&amp;#039;s the mode to make Shooters. It&amp;#039;s also a TPS (Third Person Shooter) though too. E is used for edit mode instead of RPG&amp;#039;s F1 &lt;br /&gt;
&lt;br /&gt;
F2:Brings up the texture menu.&lt;br /&gt;
&lt;br /&gt;
F3:Brings up the materials menu.&lt;br /&gt;
&lt;br /&gt;
F4:Brings up the sky menu.&lt;br /&gt;
&lt;br /&gt;
Space:Jump&lt;br /&gt;
&lt;br /&gt;
W, A, S, D :to move around. Also arrow buttons.&lt;br /&gt;
&lt;br /&gt;
Esc:Brings up the main menu.&lt;br /&gt;
&lt;br /&gt;
[http://essaywritingservices.org/prices.php write my essay]&lt;/div&gt;</summary>
		<author><name>Porterking</name></author>	</entry>

	<entry>
		<id>https://www.sandboxgamemaker.com/wiki/index.php?title=FAQ&amp;diff=1285</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://www.sandboxgamemaker.com/wiki/index.php?title=FAQ&amp;diff=1285"/>
				<updated>2011-07-18T06:59:31Z</updated>
		
		<summary type="html">&lt;p&gt;Porterking: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of questions we&amp;#039;ve been asked and the answers too them&amp;lt;br&amp;gt;&lt;br /&gt;
This is still an FAQ as the order of the questions and answers will be rearranged periodically based on the frequency they&amp;#039;ve been asked&lt;br /&gt;
&lt;br /&gt;
You may wish to use Ctrl-F with a few keywords (eg model) to find your query with a common solution faster&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;The game starts up, and closes shortly afterwards&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
This is sort of an ambiguous situation, read carefully&lt;br /&gt;
&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A1:&amp;#039;&amp;#039;&amp;#039; If you saw a message similar to, could not load core textures, you&amp;#039;re trying to run the bin directly, or in the wrong directory. please use the sandbox_unix bash script, or the click_me_to_start batch, or the Launcher.&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A2:&amp;#039;&amp;#039;&amp;#039; You might have broken/corrupt drivers. Please install the newest ones provided by your GPU (aka, video card) manufacturer, especially if you use windows, since Microsoft&amp;#039;s default OGL (WGL) implementation is horrible and is hardly capable of running sandbox.&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A3:&amp;#039;&amp;#039;&amp;#039; Your graphics card might not have shader support, though sandbox should automatically turn it off, if it doesn&amp;#039;t, use the launcher turn shaders off. Otherwise in linux enter -f in the launch command. On windows, open CLICK_ME_TO_START.bat with notepad (or you can right click the file and select edit) and add -f after the sandbox.exe  Note:  If given a number (f1 or f2), it&amp;#039;ll set the shader quality to that value.&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A4:&amp;#039;&amp;#039;&amp;#039; If you have an &amp;#039;&amp;#039;&amp;#039;ATI card&amp;#039;&amp;#039;&amp;#039; you might need to do this &amp;quot;I found that it wont run unless you disable the Catalyst A.I. After i did that it loaded right up! Hope this helps anyone that has problems running sandbox.&amp;quot; Thanks Fudwumper!!&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;I have really low FPS and/or bad performance, what do I do?&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A1:&amp;#039;&amp;#039;&amp;#039; Make sure you update your graphics card drivers.  Also just because you have a new computer doesn&amp;#039;t mean you have the latest graphic cards drivers.&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A2:&amp;#039;&amp;#039;&amp;#039; Lower the resolution&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A3:&amp;#039;&amp;#039;&amp;#039; Try turning shaders off&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;I am unable to utilise Alt-TAB or similar functionality&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
This only applies to non-Windows systems.&lt;br /&gt;
&lt;br /&gt;
This is due to inane behavior inside SDL. Whenever the window is set to fullscreen using SDL_SetVideoMode, SDL takes exclusive control of your keyboard. SDL Also takes exclusive access of your mouse if SDL_ShowCursor(0) is called (this disables acceleration and breaks everything if the pointer is reliant on absolute positioning).&lt;br /&gt;
Whilst fullscreen with SDL hogging all input, you can not send any input events to anything but the SDL application, with the exception of exclusive events meant for the kernel and events meant for whatever allows SDL such access.&lt;br /&gt;
&lt;br /&gt;
So basically if you don&amp;#039;t wish to be afflicted by this stupidity, run sandbox in windowed mode. This can be achieved by using the [[Cmdline_arguments| -t command line option]], manually entering /fullscreen 0 in game or toggling the option in the options menu.&amp;lt;br&amp;gt;&lt;br /&gt;
Linux/FreeBSD users can also opt to start sandbox in windowed mode and change it to fullscreen using your window manager. For example using KDE + Kwin, right click the title or press alt - F3, go to advanced and select fullscreen.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Are there weapons in Sandbox?&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Sandbox is intended to be kid friendly.  In the RPG there is &amp;quot;action&amp;quot; with a melee vegetable extractor and spells.  Also we will be doing a child friendly squirt gun battle mode.  However if someone wanted to make adult violence from the rpg and water gun mode they certainly could though that is not our current focus.&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I edit/play MULTIPLAYER with my friends/other people?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Our next release will include a master server so people can see all the servers available, but currently you need to directly connect to the server.  For instructions on how to do this and how to set up a server [http://sandboxgamemaker.com/wiki/index.php?title=Cooperative_Editing please see this link].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;How do I add my own models and characters to Sandbox?&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Please see the [[Adding_Models_to_Sandbox]] page for tutorials on model creation and bringing your creations into Sandbox.&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;My Mouse only has 1 button&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
:This means you don&amp;#039;t have access to a scroll wheel, which is mostly referred to as universal delta in the documentation.&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A1:&amp;#039;&amp;#039;&amp;#039; go into options and click the &amp;quot;&amp;#039;&amp;#039;PG UP and PG DN as universal delta&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A2:&amp;#039;&amp;#039;&amp;#039; delete config*.cfg and open data/defaults.cfg and modify the mouse4 and mouse 5 binds, mouse 2 and 3 (right and wheel clicks respectively) are mostly for convenience and not nearly as important as the wheel.&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A3:&amp;#039;&amp;#039;&amp;#039; Obtain a mouse with a scroll wheel :P&lt;br /&gt;
&lt;br /&gt;
= Editing =&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I add an NPC to the game?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Take a look at village.cfg and savetheprincess.cfg which are located in the packages/base folder.  You can open them with a text editor such as notepad or wordpad.  If you check out where the models are listed you&amp;#039;ll notice near the end of the savetheprincess.cfg that there is mmodel rc/pink  This is the princess.  To add this to your own map you can either copy this config and rename it to exactly what your map is named, or you can create your own config and add it at the bottom of the list.  To create your own config all you have to do is create a new text document, name it exactly how your map is spelled and change the .txt at the end to .cfg  [http://www.svn.kids.platinumarts.net/32pas32/trunk/packages/base/fps/savetheprincess.cfg Savetheprincess.cfg for reference]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I make an NPC talk and/or give quests?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Review the previous question on how to add the npc.  If you look at the savetheprincess.cfg you&amp;#039;ll notice this&lt;br /&gt;
   level_trigger_1 = [showgui Princess-Robochimp]&lt;br /&gt;
   newgui Princess-Robochimp [&lt;br /&gt;
   guitext &amp;quot;Thank you for saving me!&amp;quot; chat&lt;br /&gt;
   guitext &amp;quot;You&amp;#039;re my hero!&amp;quot; chat&lt;br /&gt;
   ]&lt;br /&gt;
&lt;br /&gt;
That is the format for making a character talk.  You can copy and modify that code according to what you&amp;#039;d like your character to say.  Now you need to into the map and fly over to Princess robochimp.  In edit mode click on her and then press .  Make sure to press enter after you&amp;#039;ve made your modifications to save the entity. If you set the 3rd attribute to 1 she&amp;#039;ll talk once, if set at 11 she&amp;#039;ll talk each time she is approached.   For the 4th attribute it needs to be set to 1 to correspond to the code in the config.  If it was level_trigger_2 in the config then that 4th attribute would need to be 2.  If notice in Savetheprincess the 1 1 values to make her talk are actually in an invisible model close to her.  This is so that it shows her idle animation (jumping with the arms up).  To make a model invisible set the 2nd attribute to 0.  Setting up quests works in a similar fashion, check out village.cfg and take a look at the quest code.  Try changing it to what you are looking to do.  For a version that isn&amp;#039;t so complicated [http://sandboxgamemaker.com/villageold.cfg check out the old version of village.cfg] that I modified to be a quest to find five keys.&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I make items that can be picked up?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Please review the previous question.  The third attribute needs to be 12 and then it will be picked up.&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I add creatures such as butterflies to my map&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
:Type /newent creature 0-6  Note: 0 is the butterfly, 1 the dragon, etc&lt;br /&gt;
:note if you&amp;#039;re using 2.2.0 or older, it&amp;#039;s /newent monster&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I light my map?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
A basic way to do it is first select an area on the map where you want to place it.  Then go to the new light menu.  Make sure you select a color and a radius and then select create light.  You can either enter /calclight in the console or you can go to editing gui and then lighting and select what options you want when creating your lights.  Finish the process and your map will be lit according to the light you created :)  [http://www.kids.platinumarts.net/wiki/index.php?title=Lighting Check here for more detailed information]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;The lights aren&amp;#039;t working&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A1:&amp;#039;&amp;#039;&amp;#039; Check if you placed any lights inside mapmodels or geometry&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A2:&amp;#039;&amp;#039;&amp;#039; Did you calculate lightmaps? ie, the /calclight and /patchlight commands&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A3:&amp;#039;&amp;#039;&amp;#039; Does the light have a very small radius, or RGB values of 0? ie light 256 0 0 0 won&amp;#039;t make any light, light 256 200 100 50 should emit a relatively bright orange.&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I make sloped &amp;quot;roofs&amp;quot; like those in house?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Note, this refers to sloped geometry in general&lt;br /&gt;
&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A1:&amp;#039;&amp;#039;&amp;#039; Hold the middle mouse button, and selected the vertices (point were 2 or more edges meet) you wish to edit, and scroll up/down to deform the cube&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A2:&amp;#039;&amp;#039;&amp;#039; Select 1 or more cubes, and hold in Q. Scroll while hovering over a vertice to deform that specific vertice in the whole selection&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A3:&amp;#039;&amp;#039;&amp;#039; select 1 or more cubes, and hold F. Scroll the wheel to deform the whole face (collection of 3 or 4 vertices, note computers are limited to triangles and quadrilaterals, a circle for example is a series of triangles). &lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I create grass?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
First make sure grass is turned on! (/grass 1)&lt;br /&gt;
&lt;br /&gt;
Hold the Y button down and scroll with the mouse wheel until you come to the texture that includes the 3D grass.  To change what texture the grass is linked with check /data/default_map_settings.cfg&lt;br /&gt;
&lt;br /&gt;
To add grass, add a autograss &amp;quot;texture&amp;quot; to a texture&amp;#039;s loading statement&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I create rain or snow?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
To add a water particle entity to the map:&lt;br /&gt;
&lt;br /&gt;
:Type /newent particles 10 300 256 868 1000 in the console&lt;br /&gt;
&lt;br /&gt;
10 is the type, 300 the shape, 256 the radius, 868, a 12 bit colour, 1000 the fading time&lt;br /&gt;
&lt;br /&gt;
To add snow particles entity to the map:&lt;br /&gt;
&lt;br /&gt;
:Type /newent particles 12 300 256 0xFFFFFA 10000 0 0 0&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;I can&amp;#039;t see my custom mapmodels&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A1&amp;#039;&amp;#039;&amp;#039; Check that the mmodel command of the model you&amp;#039;re trying to load points to a valid object, relevant to packages/models, if you use windows, just invert the slash (note that the model listings are generated automatically on mapsave from 2.3 onwards)&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A2&amp;#039;&amp;#039;&amp;#039; is there a tris.* present? or a md*.cfg or an obj.cfg loading the current model if it isn&amp;#039;t named tris.*?&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A3&amp;#039;&amp;#039;&amp;#039; note that mmodel is directed to a directory, not to the model file&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How do I edit my map&amp;#039;s configuration&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A1&amp;#039;&amp;#039;&amp;#039; use an external file editor like notepad or kate to open the respective map configuration&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A2&amp;#039;&amp;#039;&amp;#039; enter editmode, and press F6, then the load button in the GUI that appears&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Is there any program to make editing easier?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;A1&amp;#039;&amp;#039;&amp;#039; Yes, It&amp;#039;s called Notepad++. You can download it here http://notepad-plus.sourceforge.net/uk/site.htm&lt;br /&gt;
&lt;br /&gt;
= Other =&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Are there any sandbox user groups?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
:In short no, if there are any, we&amp;#039;re not aware of them&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Can I use sandbox maps in (insert fave game here)&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
:In most cases this can&amp;#039;t be done, unless the engine you&amp;#039;re using happens to be cube 2, or has support for the cube 2 octree map format. However you can export the map geometry to .obj format using the command /writeobj&lt;br /&gt;
&lt;br /&gt;
[http://essaywritingservices.org/index.php essay writing service]&lt;/div&gt;</summary>
		<author><name>Porterking</name></author>	</entry>

	<entry>
		<id>https://www.sandboxgamemaker.com/wiki/index.php?title=Cubescript&amp;diff=1284</id>
		<title>Cubescript</title>
		<link rel="alternate" type="text/html" href="https://www.sandboxgamemaker.com/wiki/index.php?title=Cubescript&amp;diff=1284"/>
				<updated>2011-07-18T06:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;Porterking: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cubescript is the scripting language utilised within the sauerbraten/cube2 engine. it is used to set aliases, variables, create binds and generate the menu.&lt;br /&gt;
&lt;br /&gt;
=Writing in Cubescript=&lt;br /&gt;
&lt;br /&gt;
==Aliases==&lt;br /&gt;
&lt;br /&gt;
The brunt of cubescript is concerned with Aliases. Aliases have 3 basic uses.&lt;br /&gt;
* store lists and values for extended periods of time&lt;br /&gt;
* store temporary lists and values&lt;br /&gt;
* grouping a set of commands which are useful when combined&lt;br /&gt;
&lt;br /&gt;
There are two ways to declare an alias. You can do it via infix notation, or by using the alias command. It should be noted that aliases are the exception to the rule, infix notation is only available for creating aliases.&lt;br /&gt;
&lt;br /&gt;
A VERY important note, alias specific operations are available to aliases only. this means builtin variables can&amp;#039;t be set or overridden through alias, =, pop and push (among others).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //command&lt;br /&gt;
  alias myalias [1]&lt;br /&gt;
  &lt;br /&gt;
  //infix variant&lt;br /&gt;
  myalias = [1]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===executing aliases===&lt;br /&gt;
&lt;br /&gt;
To execute an alias, you execute it like any other command. if I had an alias named &amp;#039;&amp;#039;&amp;#039;myalias&amp;#039;&amp;#039;&amp;#039;, I would simply invoke &amp;#039;&amp;#039;&amp;#039;&amp;#039;/myalias&amp;#039;&amp;#039;&amp;#039; to execute it.&lt;br /&gt;
&lt;br /&gt;
These aliases also have access to a class of special aliases. Those are the temporaries in which arguments are stored. There&amp;#039;s also a useful variable named &amp;#039;numargs&amp;#039; which tell you how many arguments were provided. The aliases containing the arguments are named arg. they are numbered and enumerated, starting from 1, so you&amp;#039;d use $arg1 to access the first argument. This does not start at 0, since arg0 is the command&amp;#039;s name (arg0 is also not defined.. ever, nor included in numargs).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //prints all arguments to screen, one by one&lt;br /&gt;
  //see the other comments for an explanation&lt;br /&gt;
  &lt;br /&gt;
  print = [                                    //declares an alias named print&lt;br /&gt;
    loop i $numargs [                          //loops $numargs times, setting i to the current iteration&lt;br /&gt;
      echo (getalias (concatword arg (+ $i 1)) //gets the value of the arguments, by accessing $arg1 $arg2 $arg3....&lt;br /&gt;
    ]                                          //close loop&lt;br /&gt;
  ]                                            //close print alias&lt;br /&gt;
  print I like unicorns                        //should print I like unicorns on 3 separate lines&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===push and pop===&lt;br /&gt;
&lt;br /&gt;
Push and pop used to be two separate instructions, but since the advent of the new Cubescrpt interpreter/compiler (2.6.1), they have been merged into a single instruction. The syntax for this singular stack manipulation command is as follows.&lt;br /&gt;
&lt;br /&gt;
push variable value body&lt;br /&gt;
&lt;br /&gt;
The stack is automatically popped after execution&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  myalias = &amp;quot;candy&amp;quot;&lt;br /&gt;
  push myalias &amp;quot;lollipops&amp;quot; [&lt;br /&gt;
    echo $myalias&lt;br /&gt;
  ]&lt;br /&gt;
  echo $myalias&lt;br /&gt;
  &lt;br /&gt;
  //expected output&lt;br /&gt;
  //lollipops&lt;br /&gt;
  //candy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&lt;br /&gt;
Cubescript is not your typical scripting language. Cubescript is not the most flexible, or the best language, but it more than adequate for our needs and purposes. Cubescript draws its main inspiration from quakescript and from Lisp. It is therefor said that Cubescript contains many &amp;quot;Lispisms&amp;quot;. Below is a summary of notable features/quirks.&lt;br /&gt;
&lt;br /&gt;
* comments are denoted by //&lt;br /&gt;
* both newlines and ; denote the end of a call.&lt;br /&gt;
* newlines will automatically close of any strings you may have forgotten to. (you should not rely on this)&lt;br /&gt;
* substitutions are done through the use of $ and @ tokens, (See below)&lt;br /&gt;
* everything is a function which may take arguments. With the exception of setting an alias, infix notation does not exist&lt;br /&gt;
* there are no arrays or vectors, only lists.&lt;br /&gt;
* most implementations have a 25 word limit. This means commands can be invoked with up to 24 arguments&lt;br /&gt;
&lt;br /&gt;
one liner example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  alias hi [say &amp;quot;hi&amp;quot;; sleep 5000 [say &amp;quot;Hi again&amp;quot;]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
multi liner example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  alias hi [&lt;br /&gt;
    say &amp;quot;hi&amp;quot;&lt;br /&gt;
    sleep 5000 [&lt;br /&gt;
      say &amp;quot;Hi again&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
 ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it&amp;#039;s obvious what the above code does, it&amp;#039;ll make your character say hi, and wait 5 seconds before saying hi again.&lt;br /&gt;
&lt;br /&gt;
indenting is done in levels, the Tabulator (TAB) key is usually used to indent the text. while not necessary, it tends to make it bigger, and more legible as seen in the above example (when you get to big stuff, you&amp;#039;ll thank yourself for indenting it.&lt;br /&gt;
&lt;br /&gt;
As a rule of thumb, pretty much only [ increases the indentation level. Also note, &amp;quot;, ] and ) can close each other, so make sure you close them off properly&lt;br /&gt;
&lt;br /&gt;
==containers==&lt;br /&gt;
&lt;br /&gt;
Containers in cubescript are of 3 specific types, &amp;quot;&amp;quot;, () and [] - all of these have significant differences in operation and use&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;&amp;quot; container===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot; containers are used to store things EXACTLY as they are written, with a few small exceptions - in-text commands which are denoted by a preceding ^. They are as follows&lt;br /&gt;
&lt;br /&gt;
* ^f#&lt;br /&gt;
** ^f# is used to colour text. # must be replaced by either a number or a capital letter (A-Z). r and s are special control characters which will restore and save the text&amp;#039;s current colour respectively. &lt;br /&gt;
* ^n&lt;br /&gt;
** insert a &amp;#039;\n&amp;#039; character (newline/linefeed)&lt;br /&gt;
* ^t&lt;br /&gt;
** inserts a &amp;#039;\t&amp;#039; character (tabulator)&lt;br /&gt;
* ^&amp;quot;&lt;br /&gt;
** inserts a quote (&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===() container===&lt;br /&gt;
&lt;br /&gt;
() containers are used mainly for logic/arithmetic operations. They are usually nested inside [] blocks, and unless they are nested inside []&amp;#039;s they&amp;#039;re permanently substituted with their results.&lt;br /&gt;
&lt;br /&gt;
For example - the following will turn into an infinite loop. The condition is initially evaluated and substituted with one and since 1 can never = 0, it&amp;#039;s true forever more&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  i = 0&lt;br /&gt;
  while (= $i 0) [i = (+ $i 1)]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the following code on the otherhand is devoid of such issues. Being nested inside the [] means it&amp;#039;s not substituted and evaluated each cycle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  i = 0&lt;br /&gt;
  while [= $i 0] [i = (+ $i 1)]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[] container===&lt;br /&gt;
&lt;br /&gt;
This container is used for nesting, deferring execution of it&amp;#039;s contents, deferring calculations and substitutions of () containers, and substitutions of aliases/variables written with a @ prefix (note several levels are needed to achieve this). [] containers are also the ONLY container capable of spanning multiple lines.&lt;br /&gt;
&lt;br /&gt;
This is the most used container and due to it&amp;#039;s properties, is ideal for creating aliases.&lt;br /&gt;
&lt;br /&gt;
generally statements in cubescript can&amp;#039;t span multiple lines. If you should use this container and occupy several, the execution of the prior command continues exactly where this container finished off. This can be demonstrated with an if statement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  if 1 [&lt;br /&gt;
    do&lt;br /&gt;
    stuff&lt;br /&gt;
  ] [&lt;br /&gt;
    do&lt;br /&gt;
    other&lt;br /&gt;
    stuff&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==substitution==&lt;br /&gt;
&lt;br /&gt;
there are two principle ways of substituting values in cubescript, the first is through the use of $ tokens, the second is through the use of @ tokens.&lt;br /&gt;
&lt;br /&gt;
a very simple example:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  myalias = 5&lt;br /&gt;
  echo $myalias&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
myalias is substituted into the echo statement, so you should see 5 printed to the top-left of the screen&lt;br /&gt;
&lt;br /&gt;
using the @ token would have also resulted in the same behaviour&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  myalias = 5&lt;br /&gt;
  echo @myalias&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There&amp;#039;s a big difference between the two, the @ token can be used to concatenate stuff together, $ can&amp;#039;t. @ is also substituted immediately up to the first level of nesting. (this can be incremented by using additional @ tokens, ie @@ for 2 levels of nesting). Do take note that too few @ tokens may cause a substitution to happen too late, and too many may likewise cause it to happen too early.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;An example of use in a level 1 nest&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  myalias = &amp;quot;I am awesome&amp;quot;&lt;br /&gt;
  mymenu = [guitext @myalias]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
if you were to type /echo $mymenu, it should read: guitext &amp;quot;I am awesome&amp;quot;; using the $ token on the other hand&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  myalias = &amp;quot;I am awesome&amp;quot;&lt;br /&gt;
  mymenu = [guitext $myalias]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
typing /echo $mymenu should produce: guitext $myalias&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;An example of concatenation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
as i mentioned, @ also allows you to concatenate stuff together, which could result in shorter and simpler scripts. It should be noted that this can also result in extreme obfuscation&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  myalias0 = 5&lt;br /&gt;
  myalias1 = 3.1415&lt;br /&gt;
  myalias2 = 2.481&lt;br /&gt;
  &lt;br /&gt;
  loop i 3 [&lt;br /&gt;
    echo $myalias@i&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
this should print 5, 3.1415 and 2.481 respectively&lt;br /&gt;
&lt;br /&gt;
the purely $ token equivalent&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  myalias0 = 5&lt;br /&gt;
  myalias1 = 3.1415&lt;br /&gt;
  myalias2 = 2.481&lt;br /&gt;
  &lt;br /&gt;
  loop i 3 [&lt;br /&gt;
    echo (getalias (concatword myalias $i))&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lookup of a Lookup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
There are two ways to look up multiple things; the first is by encasing it inside &amp;#039;getalias&amp;#039;, the second involves using multiple lookup tokens. There is a caveat with the second method, while it works on more types, it&amp;#039;s only available in sandbox as of 2.6.1.&lt;br /&gt;
&lt;br /&gt;
All 3 of the below examples should print &amp;quot;victory!&amp;quot;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  alias1 = &amp;quot;alias2&amp;quot;&lt;br /&gt;
  alias2 = &amp;quot;alias3&amp;quot;&lt;br /&gt;
  alias3 = &amp;quot;victory!&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  //the first method&lt;br /&gt;
  echo (getalias (getalias $alias1))&lt;br /&gt;
  &lt;br /&gt;
  //the second method; 2.6.1&lt;br /&gt;
  echo $$$alias1&lt;br /&gt;
  &lt;br /&gt;
  //to show compatibility with @&lt;br /&gt;
  do [&lt;br /&gt;
    echo $$@alias1&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Branching/Decisions==&lt;br /&gt;
&lt;br /&gt;
Decisions are based on 6 key commands, &amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;?&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;cond&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;case&amp;#039;&amp;#039;&amp;#039; (integer), &amp;#039;&amp;#039;&amp;#039;casef&amp;#039;&amp;#039;&amp;#039; (float) and &amp;#039;&amp;#039;&amp;#039;cases&amp;#039;&amp;#039;&amp;#039; (string). There are also other ways to do this. For example you might be able to easily query something about an object, where it&amp;#039;s obviously unique. You would then execute an alias whose name has this unique bit attached onto the end. This is an advanced method and is generally not recommended. &lt;br /&gt;
&lt;br /&gt;
===if and ?===&lt;br /&gt;
&lt;br /&gt;
Arguments: Cond True False&lt;br /&gt;
&lt;br /&gt;
Unlike most other languages, cubescript&amp;#039;s &amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039; contains an implicit else, in short we do not have an else statement. The provided condition is true if it ends up as a series of alpha numerics, or in the case of a number, as a value other than 0. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  myalias1 = 5&lt;br /&gt;
  myalias2 = &amp;quot;woot&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  //if else-if else&lt;br /&gt;
  if $myalias1 [&lt;br /&gt;
    echo &amp;quot;myalias1 is true&amp;quot;&lt;br /&gt;
  ] [&lt;br /&gt;
    //this shows the alpha numerics case&lt;br /&gt;
    if $myalias2 [&lt;br /&gt;
      echo &amp;quot;myalias1 is false and myalias2 is true&amp;quot;&lt;br /&gt;
    ] [&lt;br /&gt;
      echo &amp;quot;myalias1 is false and myalias2 is false&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;?&amp;#039;&amp;#039;&amp;#039; acts exactly the same way, but there&amp;#039;s one HUGE difference. &amp;#039;&amp;#039;&amp;#039;?&amp;#039;&amp;#039;&amp;#039; does not execute the chosen result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //an example of where ? can be used where if would fail&lt;br /&gt;
  items = 1&lt;br /&gt;
  echo (format &amp;quot;You are carrying %1 item%2.&amp;quot; $items (? (= $items 1) &amp;quot;&amp;quot; &amp;quot;s&amp;quot;))&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===cond===&lt;br /&gt;
&lt;br /&gt;
basically you provided a several pairs of arguments, the first half of the pair is the condition, and the second is the result. To put it in a programming perspective, this is like creating a long line of if else&amp;#039;s together. Execution stops when the first condition is matched. Should you place several conditions where more than one may be true at any one time, only the first will be executed. &lt;br /&gt;
&lt;br /&gt;
The following example assumes you have a light entity selected&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  lightstrength = [&lt;br /&gt;
    cond [&amp;lt; (ea 0) 0] [&lt;br /&gt;
      echo &amp;quot;It&amp;#039;s like a black hole!&amp;quot;&lt;br /&gt;
    ] [= (ea 0) 0] [&lt;br /&gt;
      echo &amp;quot;Blindlier than science!&amp;quot;&lt;br /&gt;
    ] [&amp;lt; (ea 0) 8] [&lt;br /&gt;
      echo &amp;quot;It&amp;#039;s weaker than Billy&amp;#039;s night light!&amp;quot;&lt;br /&gt;
    ] [&amp;lt; (ea 0) 32] [&lt;br /&gt;
      echo &amp;quot;Nice night light you got there&amp;quot;&lt;br /&gt;
    ] [&amp;lt; (ea 0) 96] [&lt;br /&gt;
      echo &amp;quot;It&amp;#039;s like a lamp, but it&amp;#039;s not a lamp&amp;quot;&lt;br /&gt;
    ] [&amp;lt; (ea 0) 512] [&lt;br /&gt;
      echo &amp;quot;By Jove! I can actually see the ground!&amp;quot;&lt;br /&gt;
    ] [&amp;gt;= (ea 0) 512] [&lt;br /&gt;
      echo &amp;quot;Dark places are icky, don&amp;#039;t you agree?&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===case===&lt;br /&gt;
&lt;br /&gt;
This works similar to switches in most programming languages. The biggest difference is that you can&amp;#039;t break out, nor evaluate multiple cases (aka, fallthroughs).&lt;br /&gt;
&lt;br /&gt;
The first argument tells it which variable to use. The following arguments are given in pairs, the first half is the state, the second is the result.&lt;br /&gt;
If the state is a null type, it is considered the default case. The easiest way to generate a null type is to use ()&lt;br /&gt;
&lt;br /&gt;
The following example requires a particles entity to be selected, it will print out what type it is. Do note that this example exceeds the 25 word limit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  parttype = [&lt;br /&gt;
    pname = &amp;quot;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    case (ea 0) 0 [&lt;br /&gt;
      pname = &amp;quot;Fire and Smoke&amp;quot;&lt;br /&gt;
    ] 1 [&lt;br /&gt;
      pname = &amp;quot;Fire&amp;quot;&lt;br /&gt;
    ] 2 [&lt;br /&gt;
      pname = &amp;quot;Smoke Plume&amp;quot;&lt;br /&gt;
    ] 3 [&lt;br /&gt;
      pname = &amp;quot;Smoke&amp;quot;&lt;br /&gt;
    ] 4 [&lt;br /&gt;
      pname = &amp;quot;Fountain&amp;quot;&lt;br /&gt;
    ] 5 [&lt;br /&gt;
      pname = &amp;quot;Explosion&amp;quot;&lt;br /&gt;
    ] 6 [&lt;br /&gt;
      pname = &amp;quot;Meter&amp;quot;&lt;br /&gt;
    ] 7 [&lt;br /&gt;
      pname = &amp;quot;Vs Meter&amp;quot;&lt;br /&gt;
    ] 8 [&lt;br /&gt;
      pname = &amp;quot;Text&amp;quot;&lt;br /&gt;
    ] 9 [&lt;br /&gt;
      pname = &amp;quot;Flare&amp;quot;&lt;br /&gt;
    ] 10 [&lt;br /&gt;
      pname = &amp;quot;Lightning&amp;quot;&lt;br /&gt;
    ] 11 [&lt;br /&gt;
      pname = &amp;quot;Fire&amp;quot;&lt;br /&gt;
    ] 12 [&lt;br /&gt;
      pname = &amp;quot;Smoke&amp;quot;&lt;br /&gt;
    ] 13 [&lt;br /&gt;
      pname = &amp;quot;Water&amp;quot;&lt;br /&gt;
    ] 14 [&lt;br /&gt;
      pname = &amp;quot;Snow&amp;quot;&lt;br /&gt;
    ] 15 [&lt;br /&gt;
      pname = &amp;quot;Leaves&amp;quot;&lt;br /&gt;
    ] 32 [&lt;br /&gt;
      pname = &amp;quot;Lens Flare&amp;quot;&lt;br /&gt;
    ] 33 [&lt;br /&gt;
      pname = &amp;quot;Fixed Size Lens Flare&amp;quot;&lt;br /&gt;
    ] 34 [&lt;br /&gt;
      pname = &amp;quot;Sparkly Lens Flare&amp;quot;&lt;br /&gt;
    ] 35 [&lt;br /&gt;
      pname = &amp;quot;Sparkly Fixed Size Lens Flare&amp;quot;&lt;br /&gt;
    ] () [ //default&lt;br /&gt;
      pname = &amp;quot;A very pretty albeit unsupported particle&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
  &lt;br /&gt;
    echo The particle you have selected is of type: $pname&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Naming===&lt;br /&gt;
&lt;br /&gt;
another way of doing decisions/branches is to use paths with different names. This has limited usage though. in short it requires you to query some information to concatenate onto another word, which you would then execute. There are exceptions. Other than the number of results you can query, there is no limit here. A handy trick is to have several results execute the same alias, though this requires that they differ only slightly at most in operation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //This example demonstrates the exception&lt;br /&gt;
  //it requires you to have an entity selected&lt;br /&gt;
  //This will conflict with showquickgui&lt;br /&gt;
  newgui &amp;quot;particles&amp;quot; [guitext &amp;quot;It&amp;#039;s like a random series of nothing&amp;quot;]&lt;br /&gt;
  newgui &amp;quot;light&amp;quot; [guitext &amp;quot;SHINY!!!!&amp;quot;]&lt;br /&gt;
  newgui &amp;quot;jumppad&amp;quot; [guitext &amp;quot;boing!&amp;quot;]&lt;br /&gt;
  &lt;br /&gt;
  identify = [showgui (et)]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //shows a more standard example, at present this is exclusively used by edithud (see stdedit.cfg)&lt;br /&gt;
  //this also requires you to have an entity selected.&lt;br /&gt;
  identlight = [echo &amp;quot;it&amp;#039;s so bright...&amp;quot;]&lt;br /&gt;
  identdynlight = [identlight] // to demonstrate how different results can execute the same script&lt;br /&gt;
  identjumppad = [echo &amp;quot;boing? boing!&amp;quot;]&lt;br /&gt;
  identparticles = [echo &amp;quot;Please don&amp;#039;t change it to a lens flare!&amp;quot;]&lt;br /&gt;
  &lt;br /&gt;
  identify = [ if (enthavesel) [ident@(et)] [echo Select an entity first!]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lists==&lt;br /&gt;
&lt;br /&gt;
Ordered lists are the closest cubescript has to the likes of arrays. Their declaration is identical to any alias, as they are simply items in a string separated by white space. Using [] is recommended as the container of choice, since it allows you to use &amp;quot;&amp;quot; to include multi-word items in a list as a single unit as well as define the list over multiple lines. &amp;quot;&amp;quot; can also be used to define lists. An example can be inspected below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //declares 2 equivalent lists of 3 elements&lt;br /&gt;
  mylist1 = [one two &amp;quot;three four&amp;quot;]&lt;br /&gt;
  mylist2 = &amp;quot;one two ^&amp;quot;three four^&amp;quot;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  //prints the 3rd element&lt;br /&gt;
  echo (at $mylist 2)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;loops&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
There are at least 2 ways to loop through a list. The first method involves the use of looplist to iterate over it and the second the use of listlen to determine the list&amp;#039;s length. The difference between using looplist and listlen is that you will not have a reliable way of determining an element&amp;#039;s index and won&amp;#039;t have to manually fetch the element from the list. Basically looplist is faster at the cost of some information and should be used in all cases where the index does not need to be known.&lt;br /&gt;
An example can be inspected below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mylist = [&lt;br /&gt;
    0&lt;br /&gt;
    1&lt;br /&gt;
    3.14159265359&lt;br /&gt;
    2.71828182845&lt;br /&gt;
    sqrt(-1)&lt;br /&gt;
    1 //to demonstrate that the index cannot be determined reliably with looplist&lt;br /&gt;
  ]&lt;br /&gt;
  &lt;br /&gt;
  //demonstrates looplist&lt;br /&gt;
  looplist var $mylist [&lt;br /&gt;
    echo number (listfind item $mylist [strcmp $var $item]) : $var&lt;br /&gt;
  ]&lt;br /&gt;
  &lt;br /&gt;
  //demonstrates a loop + listlen combo&lt;br /&gt;
  loop i (listlen $mylist) [&lt;br /&gt;
    echo number $i : (at $mylist $i)&lt;br /&gt;
  ]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;concatenation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Concatenation is pretty simple, albeit not very efficient. It is basically, setting the list to itself plus the additional item. This is of course best achieved through the concat commands.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mylist = [1 2 3 4 5 6 7 8 9 10]&lt;br /&gt;
  &lt;br /&gt;
  //using concatword&lt;br /&gt;
  mylist = (concatword $mylist &amp;quot; &amp;quot; 11)&lt;br /&gt;
  &lt;br /&gt;
  //using format&lt;br /&gt;
  mylist = (format &amp;quot;%1 %2&amp;quot; $mylist 12)&lt;br /&gt;
  &lt;br /&gt;
  //using concat - we&amp;#039;re also preparing it for pretty list&lt;br /&gt;
  mylist = (concat $mylist 14)&lt;br /&gt;
  &lt;br /&gt;
  //pretty list does add an item onto the list, but it changes the format dramatically and the new item is placed before the end&lt;br /&gt;
  //it is ideal more so for making things pretty for presentation than concatenation&lt;br /&gt;
  mylist = (prettylist $mylist 13)&lt;br /&gt;
  &lt;br /&gt;
  //should print 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 14&lt;br /&gt;
  echo mylist is $mylist&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
concat returns everything given to it as a singular item, spaces and all. Concatword ignores spaces and &amp;quot;&amp;quot;&amp;#039;s must be explicitly provided. Concat is therefor ideal to add lists together. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mylist1 = [1 2 3 4 5]&lt;br /&gt;
  mylist2 = [6 7 8 9 10]&lt;br /&gt;
  mylist3 = [11 12 13 14 15]&lt;br /&gt;
  mylist4 = [16 17 18 19 20]&lt;br /&gt;
  mylist5 = [21 22 23 24 25]&lt;br /&gt;
  mylist6 = [26 27 28 29 30]&lt;br /&gt;
  finallist = &amp;quot;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  //how concatword merged three lists&lt;br /&gt;
  finallist = (concatword $mylist1 &amp;quot; &amp;quot; $mylist2 &amp;quot; &amp;quot; $mylist3)&lt;br /&gt;
  &lt;br /&gt;
  //concat unlike the above does not require&lt;br /&gt;
  finallist = (concat $finallist $mylist4 $mylist5 $mylist6)&lt;br /&gt;
  &lt;br /&gt;
  echo (prettylist $finallist)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;finding&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
there are two ways to find things, the first is to use listfind, and the second is to loop through the list. Both are demonstrated in the example below&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  mylist = [&lt;br /&gt;
    &amp;quot;Jack&amp;quot;&lt;br /&gt;
    &amp;quot;Jane&amp;quot;&lt;br /&gt;
    &amp;quot;Joseph&amp;quot;&lt;br /&gt;
  ]&lt;br /&gt;
  &lt;br /&gt;
  //This is an example of looking for a single element, note that this variant of...&lt;br /&gt;
  //strcmp unlike its C counterpart returns 1 when strings are equal&lt;br /&gt;
  //in this example, a 0 should be printed at the top of your screen - listfind returns the index&lt;br /&gt;
  echo (listfind f $mylist [strcmp $f &amp;quot;Jack&amp;quot;])&lt;br /&gt;
  &lt;br /&gt;
  //In this example, -1, as Jill is not in the list&lt;br /&gt;
  echo (listfind f $mylist [strcmp $f &amp;quot;Jill&amp;quot;])&lt;br /&gt;
  &lt;br /&gt;
  //in this example, we want to find anything which contains an e and add it into a list&lt;br /&gt;
  results = &amp;quot;&amp;quot;&lt;br /&gt;
  looplist var $mylist [&lt;br /&gt;
    if (&amp;gt;= (strstr $var &amp;quot;e&amp;quot;) 0) [&lt;br /&gt;
      results = (concatword $results &amp;quot;^&amp;quot;&amp;quot; $var &amp;quot; ^&amp;quot;&amp;quot;)&lt;br /&gt;
    ]&lt;br /&gt;
  ]&lt;br /&gt;
  &lt;br /&gt;
  //this should print: Jane Joseph&lt;br /&gt;
  echo $results&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=List of commands=&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&lt;br /&gt;
The following commands are quite often used in a lot of scripts. &lt;br /&gt;
&lt;br /&gt;
* alias N B&lt;br /&gt;
** creates an alias named N with body B, the intext version is denoted as N = B (equivalent to alias N B)&lt;br /&gt;
* at S I&lt;br /&gt;
** returns the Ith element in string S, note that counting starts from 0. If it&amp;#039;s out of range, &amp;quot;&amp;quot; is returned&lt;br /&gt;
* getalias A&lt;br /&gt;
** returns the value of A. this also does not produce a warning should an alias be undeclared, nor complains when fetching built in variables.&lt;br /&gt;
* if C T F (F is optional)&lt;br /&gt;
** if condition C is true, execute T, otherwise F is executed &lt;br /&gt;
* listlen S&lt;br /&gt;
** returns the amount of elements in list S&lt;br /&gt;
* loop V N B&lt;br /&gt;
** loops N times, and aliases the current iteration to V; B is executed every iteration.&lt;br /&gt;
* result S&lt;br /&gt;
** returns the string, useful when aliases need to be executed&lt;br /&gt;
* rnd N L&lt;br /&gt;
** chooses a random number between 0 and N-1 (inclusive). L sets the lower limit. eg rnd 12 7 will return either 7 8 9 10 or 11&lt;br /&gt;
* sleep N B&lt;br /&gt;
** executes B after a delay of N milliseconds. NOTE: even if N is &amp;lt;= 0, it&amp;#039;ll still wait till the next frame before executing it&lt;br /&gt;
* while C B&lt;br /&gt;
** executed B while C is true. NOTE: surround C in a [] container, or you risk an infinite loop due to the condition not being reevaluated.&lt;br /&gt;
&lt;br /&gt;
==Map Configuration==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;ONLY APPLIES TO FPSGAME&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The following commands are useful in level only aliases&lt;br /&gt;
&lt;br /&gt;
*triggerstate&lt;br /&gt;
*level_trigger&lt;br /&gt;
**level trigger is invoked as level_trigger_1 = [] as an example, the end number is the 4th number in the mapmodel&amp;#039;s strings&lt;br /&gt;
*level_base&lt;br /&gt;
**Used to give bases names in capture mode. This is unfortunately unused in PAS&lt;br /&gt;
&lt;br /&gt;
==Binds==&lt;br /&gt;
&lt;br /&gt;
The following commands are useful in binds.&lt;br /&gt;
&lt;br /&gt;
*onrelease&lt;br /&gt;
&lt;br /&gt;
==Gui Creation==&lt;br /&gt;
&lt;br /&gt;
For newui, please see [[new menu editing]]&lt;br /&gt;
&lt;br /&gt;
These commands are used to create various menus.&lt;br /&gt;
&lt;br /&gt;
* cleargui&lt;br /&gt;
* guibar&lt;br /&gt;
* guibutton&lt;br /&gt;
* guicheckbox&lt;br /&gt;
* guifield&lt;br /&gt;
* guikeyfield&lt;br /&gt;
* guiimage&lt;br /&gt;
* guilist&lt;br /&gt;
* guirolloveraction&lt;br /&gt;
* guirollovername&lt;br /&gt;
* guislider&lt;br /&gt;
* guilistslider&lt;br /&gt;
* guinameslider&lt;br /&gt;
* guistayopen&lt;br /&gt;
* guitab&lt;br /&gt;
* guitext&lt;br /&gt;
* guititle&lt;br /&gt;
* guistrut&lt;br /&gt;
* newgui&lt;br /&gt;
&lt;br /&gt;
==Comparisons==&lt;br /&gt;
&lt;br /&gt;
The functions here can change the values, or return a logical comparison&lt;br /&gt;
for all intents and purposes, the C version of booleans apply here; values not equal to 0 are true - and functions that return true return 1&lt;br /&gt;
&lt;br /&gt;
===Integer Arithmetic===&lt;br /&gt;
&lt;br /&gt;
* + A B&lt;br /&gt;
** returns the value of the numbers added together&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns the result of multiplying A and B&lt;br /&gt;
* - A B&lt;br /&gt;
** returns the value of A - B&lt;br /&gt;
* = A B&lt;br /&gt;
** returns true of the two are equal&lt;br /&gt;
* != A B&lt;br /&gt;
** returns true if the two aren&amp;#039;t equal&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if A is less-than B&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;gt;&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if A is greater-than B&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;=&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if A is less-than-or-equal-to B&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;gt;=&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if A is greater-than-or-equal-to B&lt;br /&gt;
* ! A&lt;br /&gt;
** if the argument is false, it returns true&lt;br /&gt;
* &amp;amp;&amp;amp;&lt;br /&gt;
** returns true if all arguments are true&lt;br /&gt;
* ||&lt;br /&gt;
** returns true it at least one argument is true&lt;br /&gt;
* div A B&lt;br /&gt;
** returns the value of A divided by B&lt;br /&gt;
* mod A B&lt;br /&gt;
** returns the modulus of the two arguments&lt;br /&gt;
* min&lt;br /&gt;
** returns the lowest valued argument of all provided arguments&lt;br /&gt;
* max&lt;br /&gt;
** returns the highest valued argument of all provided arguments&lt;br /&gt;
&lt;br /&gt;
===Bitwise Integer Operations===&lt;br /&gt;
&lt;br /&gt;
* ^ A B&lt;br /&gt;
** returns the value of A xor B ie (^ 8 4) is 12 - (^ 12 4) is 8&lt;br /&gt;
* &amp;amp; A B&lt;br /&gt;
** returns the value of the bits both A and B have&lt;br /&gt;
* | A B&lt;br /&gt;
** returns the value of the bits either A or B have&lt;br /&gt;
* ~ A&lt;br /&gt;
** returns the inverted bitwise version of A ie (&amp;amp; (~ 128) 255) is 127&lt;br /&gt;
* ^~ A B&lt;br /&gt;
** xor;s the arguments after applying an inversion on B&lt;br /&gt;
* &amp;amp;~ A B&lt;br /&gt;
** and&amp;#039;s the arguments after applying an inversion on B&lt;br /&gt;
* |~ A B&lt;br /&gt;
** or&amp;#039;s the arguments after applying an inversion on B&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;&amp;lt;&amp;lt;/nowiki&amp;gt; A N&lt;br /&gt;
** shifts A N bits&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;gt;&amp;gt;&amp;lt;/nowiki&amp;gt; A N&lt;br /&gt;
** shifts A -N bits&lt;br /&gt;
&lt;br /&gt;
===Floating Point Arithmetic===&lt;br /&gt;
&lt;br /&gt;
Generally these just have an -f suffix&lt;br /&gt;
&lt;br /&gt;
* +f A B&lt;br /&gt;
** returns the value of the numbers added together&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;*f&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns the result of multiplying A and B&lt;br /&gt;
* -f A B&lt;br /&gt;
** returns the value of A - B&lt;br /&gt;
* =f A B&lt;br /&gt;
** returns true of the two are equal&lt;br /&gt;
* !=f A B&lt;br /&gt;
** returns true if the two aren&amp;#039;t equal&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;f&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if A is less-than B&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;gt;f&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if A is greater-than B&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;=f&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if A is less-than-or-equal-to B&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;gt;=f&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if A is greater-than-or-equal-to B&lt;br /&gt;
* divf A B&lt;br /&gt;
** returns the value of A divided by B&lt;br /&gt;
* modf A B&lt;br /&gt;
** returns the modulus of the two arguments&lt;br /&gt;
* minf&lt;br /&gt;
** returns the lowest valued argument of all provided arguments&lt;br /&gt;
* maxf&lt;br /&gt;
** returns the highest valued argument of all provided arguments&lt;br /&gt;
&lt;br /&gt;
===Strings===&lt;br /&gt;
&lt;br /&gt;
* =s A B&lt;br /&gt;
** returns 1 if the string matches, 0 otherwise&lt;br /&gt;
* !=s A B&lt;br /&gt;
** returns 0 if the string matches, 1 otherwise&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;s&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if the C strcmp returns less-than 0&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;gt;s&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if the C strcmp returns greater-than 0&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;=s&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if the C strcmp returns less-than-or-equal-to 0&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;gt;=s&amp;lt;/nowiki&amp;gt; A B&lt;br /&gt;
** returns true if the C strcmp returns greater-than-or-equal-to 0&lt;br /&gt;
* strcmp A B&lt;br /&gt;
** returns 1 if the string matches, 0 otherwise (unlike the C version with returns the disparity)&lt;br /&gt;
* strstr H N&lt;br /&gt;
** returns the position of N in H - otherwise -1 is returned&lt;br /&gt;
* strlen S&lt;br /&gt;
** returns the length of the string&lt;br /&gt;
* strreplace S O N&lt;br /&gt;
** replaces all instances of O inside string S with N&lt;br /&gt;
&lt;br /&gt;
==String/text formatting==&lt;br /&gt;
&lt;br /&gt;
These commands are used to format aliases which are normally huge bits of text&lt;br /&gt;
&lt;br /&gt;
* concat C&lt;br /&gt;
** everything you type after will be returned; with expressions and substitutions performed&lt;br /&gt;
* concatword C&lt;br /&gt;
** the next 25 arguments will be executed and subsequently concatenated without any spaces between them&lt;br /&gt;
* format F S1 S2 S3 S4 S5 S6 S7 S8 S9&lt;br /&gt;
** F is a string containing %# tokens, format substitutes the arguments with their respective %# tokens (ie: S5 will replace %5)&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
*[[map_config|Map Configuration]]&lt;br /&gt;
&lt;br /&gt;
[http://cvresumewritingservices.org/ resume writing services]&lt;/div&gt;</summary>
		<author><name>Porterking</name></author>	</entry>

	</feed>