<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.hard-light.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jg18</id>
	<title>FreeSpace Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hard-light.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jg18"/>
	<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php/Special:Contributions/Jg18"/>
	<updated>2026-11-15T10:47:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64890</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64890"/>
		<updated>2023-06-17T18:40:36Z</updated>

		<summary type="html">&lt;p&gt;Jg18: clarify persistence&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow FREDders to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Containers aren&#039;t a replacement for variables but rather a supplement to them.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Since containers are related to [[Variable|variables]], FREDders should first become comfortable with using variables.&lt;br /&gt;
&lt;br /&gt;
Coding experience (in any programming language) is helpful &#039;&#039;but not required&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu in the Events Editor&#039;s SEXP tree.&lt;br /&gt;
&lt;br /&gt;
[[File:Fred right click menu.png|200px|thumb|right|FRED&#039;s Events Editor with the &amp;quot;Add/Modify Container&amp;quot; right-click menu option highlighted.]]&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708]).&lt;br /&gt;
&lt;br /&gt;
For a persistent container to be replaced with a saved container during mission load, the container type, data type (and, if a map container, key type) must all match.&lt;br /&gt;
&lt;br /&gt;
Replacing a persistent container in this way &#039;&#039;replaces&#039;&#039; the contents and does &#039;&#039;not&#039;&#039; combine them.&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the screen shots on the right, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64886</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64886"/>
		<updated>2023-06-09T22:24:46Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow FREDders to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Containers aren&#039;t a replacement for variables but rather a supplement to them.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Since containers are related to [[Variable|variables]], FREDders should first become comfortable with using variables.&lt;br /&gt;
&lt;br /&gt;
Coding experience (in any programming language) is helpful &#039;&#039;but not required&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu in the Events Editor&#039;s SEXP tree.&lt;br /&gt;
&lt;br /&gt;
[[File:Fred right click menu.png|200px|thumb|right|FRED&#039;s Events Editor with the &amp;quot;Add/Modify Container&amp;quot; right-click menu option highlighted.]]&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the screen shots on the right, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64885</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64885"/>
		<updated>2023-06-09T22:12:59Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow FREDders to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Since containers are related to [[Variable|variables]] but &#039;&#039;&#039;much&#039;&#039;&#039; more powerful, FREDders should first become comfortable with using variables.&lt;br /&gt;
&lt;br /&gt;
Coding experience (in any programming language) is helpful &#039;&#039;but not required&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu in the Events Editor&#039;s SEXP tree.&lt;br /&gt;
&lt;br /&gt;
[[File:Fred right click menu.png|200px|thumb|right|FRED&#039;s Events Editor with the &amp;quot;Add/Modify Container&amp;quot; right-click menu option highlighted.]]&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the screen shots on the right, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64884</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64884"/>
		<updated>2023-06-09T22:10:12Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow FREDders to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
Since containers are related to [[Variable|variables]] but &#039;&#039;`much&#039;&#039;` more powerful, FREDders should first become comfortable with using variables.&lt;br /&gt;
&lt;br /&gt;
Coding experience (in any programming language) is helpful &#039;&#039;but not required&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu in the Events Editor&#039;s SEXP tree.&lt;br /&gt;
&lt;br /&gt;
[[File:Fred right click menu.png|200px|thumb|right|FRED&#039;s Events Editor with the &amp;quot;Add/Modify Container&amp;quot; right-click menu option highlighted.]]&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the screen shots on the right, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64883</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64883"/>
		<updated>2023-06-09T21:46:41Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow FREDders to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Since containers allow for handling data in much more sophisticated ways than variables, it&#039;s recommended that FREDders become comfortable with using variables before trying to use containers.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu in the Events Editor&#039;s SEXP tree.&lt;br /&gt;
&lt;br /&gt;
[[File:Fred right click menu.png|200px|thumb|right|FRED&#039;s Events Editor with the &amp;quot;Add/Modify Container&amp;quot; right-click menu option highlighted.]]&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the screen shots on the right, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Fred_right_click_menu.png&amp;diff=64882</id>
		<title>File:Fred right click menu.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Fred_right_click_menu.png&amp;diff=64882"/>
		<updated>2023-06-09T21:42:30Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64881</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64881"/>
		<updated>2023-06-09T21:23:04Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow FREDders to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Since containers allow for handling data in much more sophisticated ways than variables, it&#039;s recommended that FREDders become comfortable with using variables before trying to use containers.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu in the Events Editor&#039;s SEXP tree.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the screen shots on the right, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64873</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64873"/>
		<updated>2023-05-27T19:44:02Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow FREDders to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables. Therefore, FREDders should be comfortable with using variables before trying to use containers.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu in the Events Editor&#039;s SEXP tree.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the screen shots on the right, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64872</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64872"/>
		<updated>2023-05-27T06:32:12Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu in the Events Editor&#039;s SEXP tree.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the screen shots on the right, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64871</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64871"/>
		<updated>2023-05-27T06:16:31Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu in the Events Editor&#039;s SEXP tree.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64870</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64870"/>
		<updated>2023-05-27T05:41:34Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|FRED&#039;s Events Editor with many different examples of how SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim.png|200px|thumb|right|Example of multidimensionality with containers (part 1). The last three lines mean, &amp;quot;From the (map) container named Traitors, get the value whose key is the special argument. The value should be the name of a container with &#039;&amp;amp;&#039; added to the front and end of the name. Then, from that container, get the value whose key is &#039;MESSAGE - Treason&#039;.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim2.png|200px|thumb|right|Example of multidimensionality with containers (part 2). This shows the contents of the &amp;quot;Traitors&amp;quot; container. If the selected special argument is &amp;quot;Taurus&amp;quot;, then the associated value is &amp;quot;&amp;amp;Taurus&amp;amp;&amp;quot;, which refers to getting data from the container named &amp;quot;Taurus&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim3.png|200px|thumb|right|Example of multidimensionality with containers (part 3). This shows the contents of the container named &amp;quot;Taurus&amp;quot;. It shows that the key &amp;quot;MESSGE-Treason&amp;quot; is mapped to the string &amp;quot;Taurus - Treason&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample multidim4.png|200px|thumb|right|Example of multidimensionality with containers (part 4). This shows that &amp;quot;Taurus - Treason&amp;quot; is the name of a message whose text is &amp;quot;Ah! A plot is revealed&amp;quot;.]]&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent feature for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_sample_multidim4.png&amp;diff=64869</id>
		<title>File:Containers sample multidim4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_sample_multidim4.png&amp;diff=64869"/>
		<updated>2023-05-27T05:38:04Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_sample_multidim3.png&amp;diff=64868</id>
		<title>File:Containers sample multidim3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_sample_multidim3.png&amp;diff=64868"/>
		<updated>2023-05-27T05:35:27Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_sample_multidim2.png&amp;diff=64867</id>
		<title>File:Containers sample multidim2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_sample_multidim2.png&amp;diff=64867"/>
		<updated>2023-05-27T05:31:31Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_sample_multidim.png&amp;diff=64866</id>
		<title>File:Containers sample multidim.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_sample_multidim.png&amp;diff=64866"/>
		<updated>2023-05-27T05:22:29Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64865</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64865"/>
		<updated>2023-05-27T05:16:26Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|A screen shot of FRED&#039;s Events Editor demonstrating many different ways in which SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers persistence options.png|200px|thumb|right|FRED&#039;s Add/Modify Container dialog with the Persistence options highlighted.]]&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_persistence_options.png&amp;diff=64864</id>
		<title>File:Containers persistence options.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_persistence_options.png&amp;diff=64864"/>
		<updated>2023-05-27T05:13:44Z</updated>

		<summary type="html">&lt;p&gt;Jg18: Screenshot of FRED&amp;#039;s Add/Modify Container dialog with Persistence options highlighted.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Screenshot of FRED&#039;s Add/Modify Container dialog with Persistence options highlighted.&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64863</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=64863"/>
		<updated>2023-05-27T05:11:54Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|A screen shot of FRED&#039;s Events Editor demonstrating many different ways in which SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample sexps.png|200px|thumb|right|Example of using SEXPs and Replace Container Name with containers.]]&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_sample_sexps.png&amp;diff=64862</id>
		<title>File:Containers sample sexps.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_sample_sexps.png&amp;diff=64862"/>
		<updated>2023-05-27T05:09:43Z</updated>

		<summary type="html">&lt;p&gt;Jg18: Example using SEXPs with SEXP containers.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Example using SEXPs with SEXP containers.&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63908</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63908"/>
		<updated>2022-08-13T00:24:54Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;This page is about the FRED feature. For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|A screen shot of FRED&#039;s Events Editor demonstrating many different ways in which SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63903</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63903"/>
		<updated>2022-08-07T03:59:23Z</updated>

		<summary type="html">&lt;p&gt;Jg18: add another image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|A screen shot of FRED&#039;s Events Editor demonstrating many different ways in which SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers sample special arg.png|200px|thumb|right|Example of using containers in special argument lists.]]&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_sample_special_arg.png&amp;diff=63902</id>
		<title>File:Containers sample special arg.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_sample_special_arg.png&amp;diff=63902"/>
		<updated>2022-08-07T03:55:48Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63901</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63901"/>
		<updated>2022-08-07T03:40:00Z</updated>

		<summary type="html">&lt;p&gt;Jg18: add main sample image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample.png|200px|thumb|right|A screen shot of FRED&#039;s Events Editor demonstrating many different ways in which SEXP containers can be used.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_sample.png&amp;diff=63900</id>
		<title>File:Containers sample.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_sample.png&amp;diff=63900"/>
		<updated>2022-08-07T03:35:07Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63899</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63899"/>
		<updated>2022-08-07T03:33:03Z</updated>

		<summary type="html">&lt;p&gt;Jg18: add some images&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_replace.png|200px|thumb|right|Example of Replace Container Data.]]&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
[[File:Containers_sample_text.png|200px|thumb|right|Example of text replacement with containers.]]&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_sample_text.png&amp;diff=63898</id>
		<title>File:Containers sample text.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_sample_text.png&amp;diff=63898"/>
		<updated>2022-08-07T03:26:15Z</updated>

		<summary type="html">&lt;p&gt;Jg18: Example of text replacement with containers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Example of text replacement with containers&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=File:Containers_sample_replace.png&amp;diff=63897</id>
		<title>File:Containers sample replace.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=File:Containers_sample_replace.png&amp;diff=63897"/>
		<updated>2022-08-07T03:21:57Z</updated>

		<summary type="html">&lt;p&gt;Jg18: Example of Replace Container Data using a screenshot from FRED&amp;#039;s Events Editor.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Example of Replace Container Data using a screenshot from FRED&#039;s Events Editor.&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Variable&amp;diff=63896</id>
		<title>Variable</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Variable&amp;diff=63896"/>
		<updated>2022-08-07T03:12:29Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Variables&#039;&#039;&#039; (also called &#039;&#039;&#039;SEXP variables&#039;&#039;&#039;) allow you to store pieces of information for later use. Normally, SEXP trees use fixed values. Consider this basic one:&lt;br /&gt;
&lt;br /&gt;
 is-destroyed-delay&lt;br /&gt;
  2&lt;br /&gt;
  GTT Spomer&lt;br /&gt;
 send-message&lt;br /&gt;
  #Command&lt;br /&gt;
  High&lt;br /&gt;
  Spomer destroyed&lt;br /&gt;
&lt;br /&gt;
All these values are fixed. If you wanted Command to send a message five (not two) seconds after the Spomer is destroyed, you would need a second Event with 5 instead of 2. If, however, the &amp;quot;delay&amp;quot; value (2) were a variable, you could manipulate the delay between the Spomer&#039;s death and Command sending the message in a more convenient and flexible way in one Event. Variables are dynamic values that can be changed during the course of the mission.&lt;br /&gt;
&lt;br /&gt;
==Basics==&lt;br /&gt;
Right-click on any argument in the Events list and look at the three options at the bottom of the menu, &#039;&#039;&#039;Add Variable&#039;&#039;&#039;, &#039;&#039;&#039;Modify Variable&#039;&#039;&#039;, and &#039;&#039;&#039;Replace Variable&#039;&#039;&#039;. If your Events window is empty, create an Event.&lt;br /&gt;
&lt;br /&gt;
[[Image:VariableBox.png|center|The Add Variable window]]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Add Variable&#039;&#039;&#039; allows you to create a new variable. If you&#039;re using FreeSpace Open, your Add Variable window looks like the image above. You can add a number or a string-based variable. Number-based variables must contain numbers only, while string-based values can use letters. From a technical point of view, it&#039;s unimportant how you name your variable. Then set your variable&#039;s default value.&lt;br /&gt;
**In our example, let&#039;s create a number-based variable that is named &amp;quot;TurretsDown&amp;quot; and its default value is 0.&lt;br /&gt;
*&#039;&#039;&#039;Modify Variable&#039;&#039;&#039; allows you to change a variable that you&#039;ve already created. You can modify only one variable at a time. This feature is not to be confused with the [[modify-variable]] one.&lt;br /&gt;
*&#039;&#039;&#039;Replace Variable&#039;&#039;&#039; replaces the currently selected SEXP argument with the variable of your choice.&lt;br /&gt;
**If you clicked on &amp;quot;0&amp;quot; in the example, you could change it to TurretsDown using Replace Variable --&amp;gt; TurretsDown. If the &amp;quot;0&amp;quot; is changed to TurretsDown (which receives a red icon), then you&#039;ve been successful. Now the Event will come true if TurretsDown equals 3.&lt;br /&gt;
&lt;br /&gt;
Variable values can be changed using the [[modify-variable]] SEXP, which you can find under Add Operator --&amp;gt; Change --&amp;gt; Special. A sample Event that adds 1 to a number-based variable looks like:&lt;br /&gt;
&lt;br /&gt;
[[Image:VariableEvent.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
== Four Types of Variables ==&lt;br /&gt;
&lt;br /&gt;
There are five types of variables. Hover the mouse over each variable name in the variable window to display additional information. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Standard variables:&#039;&#039;&#039; This type of variables are used in one mission only. If the player ends the mission in any way (jumping out, dying, restarting, etc.), all the standard variables will be reset to their default values. Whether the player is allowed to progress in the campaign or not is inconclusive (compare campaign-persistent variables). This is the default variable type, and requires no boxes to be checked in the variable window. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Network variables:&#039;&#039;&#039; are only relevant in a multiplayer game. Non-network variables are only ever altered on the server. This means that they can not be used in messages or scripting because all the client machines will only ever have the default value. If you need to have the value of a variable display in a message you will need to mark it as a network variable. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Save on Mission Complete:&#039;&#039;&#039; A type of persistent variable that will save when the player clicks Accept to go to the next mission. If the player is killed or quits during a mission, and changes made to this variable are not stored. They are reset upon the reset of the current campaign, or the selection of a new campaign.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Save on Mission Close:&#039;&#039;&#039; A type of persistent variable that will save when the player leaves the mission. If the player is killed or quits during a mission, and changes made to this variable are stored. They are reset upon the reset of the current campaign, or the selection of a new campaign.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eternal:&#039;&#039;&#039; Eternal is a flag you can add to BOTH &#039;Save on Mission Complete&#039; and &#039;Save on Mission Close&#039; to tell the game to not delete that variable even if the campaign ends or a different campaign is started. It does not reset upon the end of the current campaign, or the selection of a new campaign. Thus it can be used and referred to by other campaigns.&lt;br /&gt;
&lt;br /&gt;
== Variables and Messages ==&lt;br /&gt;
Variables can also be used in messages. To do this, use the variable&#039;s name preceded by the &#039;$&#039; token (for example &amp;quot;$killcount&amp;quot;), and in-game this will be replaced with the value of the variable. Input is case-sensitive. It works for both numeric and string variables.&lt;br /&gt;
&lt;br /&gt;
==Example Mission==&lt;br /&gt;
:&#039;&#039;Main Article: [[Variables example mission]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a mission in which the player must take down all four of the Sathanas&#039;s main beam weapons to win the mission. This is like [[Bearbaiting]], except this mission is solely made as a variables tutorial. The juggernaut will not fire at you or jump out.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Counting with variables]]&lt;br /&gt;
*[[SEXP Container]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
*[http://homepage.ntlworld.com/karajorma/FAQ/fredretail.html#variables Karajorma&#039;s FreeSpace FAQ on variables]&lt;br /&gt;
* Fred Zone examples for variables [http://fredzone.hard-light.net/cetanu_adv-fred-lessons.shtml] [http://fredzone.hard-light.net/cetanu_adv-fred-lessons-2.shtml] &lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63895</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63895"/>
		<updated>2022-08-07T03:10:31Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new [[#SEXPs and Replace Container Name|Replace Container Name]] and [[#Replace Container Data|Replace Container Data]] submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining Features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Containers&amp;diff=63894</id>
		<title>Containers</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Containers&amp;diff=63894"/>
		<updated>2022-08-07T03:06:51Z</updated>

		<summary type="html">&lt;p&gt;Jg18: add link to SEXP Container page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For the FRED feature, see [[SEXP Container]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cargo containers&#039;&#039;&#039; are &amp;quot;ships&amp;quot; in [[FS1]] and [[FS2]] that are used to carry supplies. They are transported by various freighters, usually matching one type of container to one type of freighter, (with the exception of the [[GTFr Poseidon]]) though most freighters can carry any container without issue.&lt;br /&gt;
&lt;br /&gt;
More information about the [[Great_War-era_craft|FS1 containers]] and [[FreeSpace_2-era_craft|FS2 containers]] can be found in their respective ship databases.&lt;br /&gt;
&lt;br /&gt;
Below is a quick image reference to all FS1 and FS2 cargo containers.&lt;br /&gt;
&lt;br /&gt;
==Terran Cargo Containers==&lt;br /&gt;
&lt;br /&gt;
===TC-TRI===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Tctri-old.jpg|center|TC-TRI]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[TC-TRI]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |300&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 249 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===TC 2===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Tc2_Tsc2-old.jpg|center|TC 2]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[TC 2]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |300&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 35 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===TSC 2===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Tc2_Tsc2-old.jpg|center|TSC 2]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[TSC 2]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |600&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 35 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===TAC 1===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Tac1-old.jpg|center|TAC 1]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[TAC 1]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |1200&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 58 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===TTC 1===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Ttc1-old.jpg|center|TTC 1]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[TTC 1]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |800&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 26 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Vasudan Cargo Containers==&lt;br /&gt;
&lt;br /&gt;
===VC 3===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Vc_3_320x240.jpg|center|VC 3]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[VC 3]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |300&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 12 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===VAC 4===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Vac4-old.jpg|center|VAC 4]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[VAC 4]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |1200&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 25 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===VAC 5===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Vac5-old.jpg|center|VAC 5]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[VAC 5]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |1200&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 53 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Shivan Cargo Containers==&lt;br /&gt;
&lt;br /&gt;
===SAC 3===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Sac3-old.jpg|center|SAC 3]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[SAC 3]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |300&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 243 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SC 5===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Sc5-old.jpg|center|SC 5]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[SC 5]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |300&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 20 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===SAC 2===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:400px;background: #000000&amp;quot; colspan=2 |[[Image:Sac2-old.jpg|center|SAC 2]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px;text-align: right&amp;quot;|[[SAC 2]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |[[Technical_Terms_and_Definitions#Hitpoints|Hitpoints]]&lt;br /&gt;
| style=&amp;quot;width:200px&amp;quot; |1200&lt;br /&gt;
|-&lt;br /&gt;
| [[Technical_Terms_and_Definitions#Length|Length]]&lt;br /&gt;
| 33 m&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Ship]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63893</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63893"/>
		<updated>2022-08-07T03:05:37Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
Containers first appeared in FS2 Open 22.2.0.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new Replace Container Name/Data submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining Features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63892</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63892"/>
		<updated>2022-08-07T03:03:10Z</updated>

		<summary type="html">&lt;p&gt;Jg18: add FRED category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new Replace Container Name/Data submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining Features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Variable&amp;diff=63891</id>
		<title>Variable</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Variable&amp;diff=63891"/>
		<updated>2022-08-07T03:02:43Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Variables&#039;&#039;&#039; (also called &#039;&#039;&#039;SEXP variables&#039;&#039;&#039;) allow you to store pieces of information for later use. Normally, SEXP trees use fixed values. Consider this basic one:&lt;br /&gt;
&lt;br /&gt;
 is-destroyed-delay&lt;br /&gt;
  2&lt;br /&gt;
  GTT Spomer&lt;br /&gt;
 send-message&lt;br /&gt;
  #Command&lt;br /&gt;
  High&lt;br /&gt;
  Spomer destroyed&lt;br /&gt;
&lt;br /&gt;
All these values are fixed. If you wanted Command to send a message five (not two) seconds after the Spomer is destroyed, you would need a second Event with 5 instead of 2. If, however, the &amp;quot;delay&amp;quot; value (2) were a variable, you could manipulate the delay between the Spomer&#039;s death and Command sending the message in a more convenient and flexible way in one Event. Variables are dynamic values that can be changed during the course of the mission.&lt;br /&gt;
&lt;br /&gt;
==Basics==&lt;br /&gt;
Right-click on any argument in the Events list and look at the three options at the bottom of the menu, &#039;&#039;&#039;Add Variable&#039;&#039;&#039;, &#039;&#039;&#039;Modify Variable&#039;&#039;&#039;, and &#039;&#039;&#039;Replace Variable&#039;&#039;&#039;. If your Events window is empty, create an Event.&lt;br /&gt;
&lt;br /&gt;
[[Image:VariableBox.png|center|The Add Variable window]]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Add Variable&#039;&#039;&#039; allows you to create a new variable. If you&#039;re using FreeSpace Open, your Add Variable window looks like the image above. You can add a number or a string-based variable. Number-based variables must contain numbers only, while string-based values can use letters. From a technical point of view, it&#039;s unimportant how you name your variable. Then set your variable&#039;s default value.&lt;br /&gt;
**In our example, let&#039;s create a number-based variable that is named &amp;quot;TurretsDown&amp;quot; and its default value is 0.&lt;br /&gt;
*&#039;&#039;&#039;Modify Variable&#039;&#039;&#039; allows you to change a variable that you&#039;ve already created. You can modify only one variable at a time. This feature is not to be confused with the [[modify-variable]] one.&lt;br /&gt;
*&#039;&#039;&#039;Replace Variable&#039;&#039;&#039; replaces the currently selected SEXP argument with the variable of your choice.&lt;br /&gt;
**If you clicked on &amp;quot;0&amp;quot; in the example, you could change it to TurretsDown using Replace Variable --&amp;gt; TurretsDown. If the &amp;quot;0&amp;quot; is changed to TurretsDown (which receives a red icon), then you&#039;ve been successful. Now the Event will come true if TurretsDown equals 3.&lt;br /&gt;
&lt;br /&gt;
Variable values can be changed using the [[modify-variable]] SEXP, which you can find under Add Operator --&amp;gt; Change --&amp;gt; Special. A sample Event that adds 1 to a number-based variable looks like:&lt;br /&gt;
&lt;br /&gt;
[[Image:VariableEvent.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
== Four Types of Variables ==&lt;br /&gt;
&lt;br /&gt;
There are five types of variables. Hover the mouse over each variable name in the variable window to display additional information. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Standard variables:&#039;&#039;&#039; This type of variables are used in one mission only. If the player ends the mission in any way (jumping out, dying, restarting, etc.), all the standard variables will be reset to their default values. Whether the player is allowed to progress in the campaign or not is inconclusive (compare campaign-persistent variables). This is the default variable type, and requires no boxes to be checked in the variable window. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Network variables:&#039;&#039;&#039; are only relevant in a multiplayer game. Non-network variables are only ever altered on the server. This means that they can not be used in messages or scripting because all the client machines will only ever have the default value. If you need to have the value of a variable display in a message you will need to mark it as a network variable. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Save on Mission Complete:&#039;&#039;&#039; A type of persistent variable that will save when the player clicks Accept to go to the next mission. If the player is killed or quits during a mission, and changes made to this variable are not stored. They are reset upon the reset of the current campaign, or the selection of a new campaign.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Save on Mission Close:&#039;&#039;&#039; A type of persistent variable that will save when the player leaves the mission. If the player is killed or quits during a mission, and changes made to this variable are stored. They are reset upon the reset of the current campaign, or the selection of a new campaign.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eternal:&#039;&#039;&#039; Eternal is a flag you can add to BOTH &#039;Save on Mission Complete&#039; and &#039;Save on Mission Close&#039; to tell the game to not delete that variable even if the campaign ends or a different campaign is started. It does not reset upon the end of the current campaign, or the selection of a new campaign. Thus it can be used and referred to by other campaigns.&lt;br /&gt;
&lt;br /&gt;
== Variables and Messages ==&lt;br /&gt;
Variables can also be used in messages. To do this, use the variable&#039;s name preceded by the &#039;$&#039; token (for example &amp;quot;$killcount&amp;quot;), and in-game this will be replaced with the value of the variable. Input is case-sensitive. It works for both numeric and string variables.&lt;br /&gt;
&lt;br /&gt;
==Example Mission==&lt;br /&gt;
:&#039;&#039;Main Article: [[Variables example mission]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a mission in which the player must take down all four of the Sathanas&#039;s main beam weapons to win the mission. This is like [[Bearbaiting]], except this mission is solely made as a variables tutorial. The juggernaut will not fire at you or jump out.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Counting with variables]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
* [[SEXP Container]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
*[http://homepage.ntlworld.com/karajorma/FAQ/fredretail.html#variables Karajorma&#039;s FreeSpace FAQ on variables]&lt;br /&gt;
* Fred Zone examples for variables [http://fredzone.hard-light.net/cetanu_adv-fred-lessons.shtml] [http://fredzone.hard-light.net/cetanu_adv-fred-lessons-2.shtml] &lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63890</id>
		<title>SEXP Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Container&amp;diff=63890"/>
		<updated>2022-08-07T02:59:35Z</updated>

		<summary type="html">&lt;p&gt;Jg18: First draft, no images yet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;For cargo containers, see [[Containers]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SEXP containers&#039;&#039;&#039; allow you to store groups of pieces of information for later use.&lt;br /&gt;
&lt;br /&gt;
As opposed to a [[Variable|SEXP variable]], which stores only one value, a SEXP container stores a collection of values.&lt;br /&gt;
&lt;br /&gt;
Consequently, containers allow for handling data in much more sophisticated ways than variables.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Get started with containers using FRED&#039;s &amp;quot;Add/Modify Container&amp;quot; dialog, which you can reach from the right-click menu:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The new Replace Container Name/Data submenus are explained below.&lt;br /&gt;
&lt;br /&gt;
Containers come in two types:&lt;br /&gt;
* &#039;&#039;&#039;List container&#039;&#039;&#039; - an ordered sequence of values, sort of a cross between Python lists and deques&lt;br /&gt;
* &#039;&#039;&#039;Map container&#039;&#039;&#039; - pairs of keys associated with data, like Lua tables or Python dictionaries&lt;br /&gt;
&lt;br /&gt;
Just as variables have a type of either string or number, a container&#039;s data and a map container&#039;s keys have a type of either string or number.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Replace Container Data===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similar to how Replace Variable allows you to access data stored in variables, Replace Container Data allows you to access data stored in containers.&lt;br /&gt;
&lt;br /&gt;
Use one of the following list modifiers to access data in list containers:&lt;br /&gt;
* Get_First&lt;br /&gt;
* Remove_First&lt;br /&gt;
* Get_Last&lt;br /&gt;
* Remove_Last&lt;br /&gt;
* Get_Random&lt;br /&gt;
* Remove_Random&lt;br /&gt;
* At&lt;br /&gt;
&lt;br /&gt;
The list modifier options appear in the Replace Data submenu in FRED.&lt;br /&gt;
&lt;br /&gt;
The At list modifier allows you to access data at a specific position in the list. Specify the index using Number under the Add Data submenu. The first item is at index 0.&lt;br /&gt;
&lt;br /&gt;
The Get_First, Get_Last, and At list modifiers just retrieve the data, but the Remove_First and Remove_Last modifiers both retrieve the data and remove it from the container.&lt;br /&gt;
&lt;br /&gt;
To access map container data, specify the key using Edit Data.&lt;br /&gt;
&lt;br /&gt;
The container modifier can also be the value of a variable (use Replace Variable), the &amp;quot;special argument&amp;quot; if relevant (use Replace Data), or even a nested usage of Replace Container Data.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on Replace Container Data usage====&lt;br /&gt;
&lt;br /&gt;
You can&#039;t use Replace Container Data in the &amp;quot;argument list&amp;quot; of special argument SEXPs, such as any-of, but you can use it in the &amp;quot;condition&amp;quot; or &amp;quot;actions&amp;quot; parts of those SEXPs. This applies for all special argument SEXPs, not just the ones that now take containers as arguments (see [[#Special argument list options|Special argument list options]] below).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Text replacement===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Similar to text replacement for variables with $VariableName$, you can access container data in the text used in&lt;br /&gt;
* Command briefings&lt;br /&gt;
* Briefings&lt;br /&gt;
* Debriefings&lt;br /&gt;
* Messages&lt;br /&gt;
* Scripting&lt;br /&gt;
* Subtitles&lt;br /&gt;
* Debug SEXP&lt;br /&gt;
&lt;br /&gt;
For list containers, use the format &#039;&#039;&#039;&amp;amp;ListContainerName&amp;amp;ListModifier&amp;amp;&#039;&#039;&#039;, where &#039;&#039;&#039;ListModifier&#039;&#039;&#039; is one of the modifiers listed above. To access the first data item in the list, use the modifier &#039;&#039;&#039;At0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For map containers, use the format &#039;&#039;&#039;&amp;amp;MapContainerName&amp;amp;MapKey&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Container data and map keys &#039;&#039;are&#039;&#039; case-sensitive, but container names and list modifiers &#039;&#039;are not&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SEXPs and Replace Container Name===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can access the Status and Change SEXPs from the new Containers subcategory in the Status and Change categories for Replace/Insert/Add Operator.&lt;br /&gt;
&lt;br /&gt;
====Status SEXPs====&lt;br /&gt;
* is-container-empty&lt;br /&gt;
* get-container-size&lt;br /&gt;
* list-has-data&lt;br /&gt;
* list-data-index&lt;br /&gt;
* map-has-key&lt;br /&gt;
* map-has-data-item&lt;br /&gt;
&lt;br /&gt;
====Change SEXPs====&lt;br /&gt;
* add-to-list&lt;br /&gt;
* remove-from-list&lt;br /&gt;
* add-to-map&lt;br /&gt;
* remove-from-map&lt;br /&gt;
* get-map-keys&lt;br /&gt;
* clear-container&lt;br /&gt;
* copy-container&lt;br /&gt;
* apply-container-filter&lt;br /&gt;
&lt;br /&gt;
====Conditional SEXPs====&lt;br /&gt;
* for-container-data&lt;br /&gt;
* for-map-container-keys&lt;br /&gt;
&lt;br /&gt;
FRED&#039;s built-in SEXP help explains how they work.&lt;br /&gt;
&lt;br /&gt;
To specify the SEXP arguments that are container names, use the Replace Container Name submenu from FRED&#039;s right-click menu. You can specify those arguments using Replace Variable or Replace Container Data, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Persistence===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Containers support the same persistence options that variables do, except for &amp;quot;Network&amp;quot; (Issue #3708).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Multidimensionality===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both text replacement and Replace Container Data, you can chain accesses to container data. The data stored in the first container should be formatted as &amp;amp;ContainerName&amp;amp;.&lt;br /&gt;
&lt;br /&gt;
Unlike the other containers features, there is no equivalent for variables.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 1====&lt;br /&gt;
&lt;br /&gt;
In the above screen shots, if the random-of in the first screen shot happens to select &amp;quot;Taurus&amp;quot; as the special argument, then the ship &amp;quot;Taurus&amp;quot; will send the message &amp;quot;Ah! A plot is revealed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Multidimensionality example 2====&lt;br /&gt;
&lt;br /&gt;
If I have two map containers, Map1 and Map2, and I want to display the data associated with the key &amp;quot;Key 1&amp;quot; from one of the two map containers, selected at random, I&#039;d have a list container called Maps whose entries are &#039;&#039;&#039;&amp;amp;Map1&amp;amp;&#039;&#039;&#039; and &#039;&#039;&#039;&amp;amp;Map2&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The expression to use in text replacement is &#039;&#039;&#039;&amp;amp;Maps&amp;amp;Get_Random&amp;amp;Key 1&amp;amp;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To do the same thing in FRED&#039;s SEXP tree, I&#039;d first use Replace Container Data with Maps using the list modifier Get_Random, and then I&#039;d add &amp;quot;Key 1&amp;quot; using the String option under the Add Data submenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Special argument list options===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For some SEXPs that are used with when-argument, you can use a mix of strings, list containers of string data, and/or map containers of string keys (map data can be any type) as arguments.&lt;br /&gt;
&lt;br /&gt;
The string data/keys will then be included among the options for the special argument in that SEXP.&lt;br /&gt;
&lt;br /&gt;
When the containers&#039; contents change, the special argument options they provide will change as well.&lt;br /&gt;
&lt;br /&gt;
These SEXPs are supported:&lt;br /&gt;
* any-of&lt;br /&gt;
* every-of&lt;br /&gt;
* number-of&lt;br /&gt;
* first-of&lt;br /&gt;
* random-multiple-of&lt;br /&gt;
&lt;br /&gt;
Use the &amp;quot;Replace Container Name&amp;quot; submenu to include containers as arguments.&lt;br /&gt;
&lt;br /&gt;
====Restrictions on usage in special argument list====&lt;br /&gt;
&lt;br /&gt;
# You can&#039;t use validate-argument or invalidate-argument with containers. However, validate-all-arguments and invalidate-all-arguments will apply to container arguments as well.&lt;br /&gt;
# You also can&#039;t use validate-argument or invalidate-argument with arguments retrieved from containers.&lt;br /&gt;
# You can&#039;t use change SEXPs or Remove_* list modifiers on a container as part of a when-argument SEXP if the container is one of the arguments. However, it&#039;s OK to use the container with Get_*/At list modifiers or as an argument to any status SEXP or to a change SEXP that doesn&#039;t modify it, such as the map container in get-map-keys. It&#039;s also OK to modify containers that aren&#039;t among the arguments.&lt;br /&gt;
&lt;br /&gt;
==Remaining Features==&lt;br /&gt;
&lt;br /&gt;
# Network persistence ([https://github.com/scp-fs2open/fs2open.github.com/issues/3708 Issue #3708])&lt;br /&gt;
# Add/Modify Container dialog for qtFRED ([https://github.com/scp-fs2open/fs2open.github.com/issues/3818 Issue #3818]) but qtFRED&#039;s SEXP tree should fully support containers.&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Containers&amp;diff=63889</id>
		<title>SEXP Containers</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Containers&amp;diff=63889"/>
		<updated>2022-08-07T02:04:20Z</updated>

		<summary type="html">&lt;p&gt;Jg18: Redirected page to SEXP Container&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[SEXP Container]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=SEXP_Variable&amp;diff=63888</id>
		<title>SEXP Variable</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=SEXP_Variable&amp;diff=63888"/>
		<updated>2022-08-07T02:00:52Z</updated>

		<summary type="html">&lt;p&gt;Jg18: Redirected page to Variable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Variable]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Variable&amp;diff=63887</id>
		<title>Variable</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Variable&amp;diff=63887"/>
		<updated>2022-08-07T02:00:29Z</updated>

		<summary type="html">&lt;p&gt;Jg18: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Variables&#039;&#039;&#039; (also called &#039;&#039;&#039;SEXP variables&#039;&#039;&#039;) allow you to store pieces of information for later use. Normally, SEXP trees use fix values. Consider this basic one:&lt;br /&gt;
&lt;br /&gt;
 is-destroyed-delay&lt;br /&gt;
  2&lt;br /&gt;
  GTT Spomer&lt;br /&gt;
 send-message&lt;br /&gt;
  #Command&lt;br /&gt;
  High&lt;br /&gt;
  Spomer destroyed&lt;br /&gt;
&lt;br /&gt;
All these values are fixed. If you wanted Command to send a message five (not two) seconds after the Spomer is destroyed, you would need a second Event with 5 instead of 2. If, however, the &amp;quot;delay&amp;quot; value (2) were a variable, you could manipulate the delay between the Spomer&#039;s death and Command sending the message in a more convenient and flexible way in one Event. Variables are dynamic values that can be changed during the course of the mission.&lt;br /&gt;
&lt;br /&gt;
==Basics==&lt;br /&gt;
Right-click on any argument in the Events list and look at the three options at the bottom of the menu, &#039;&#039;&#039;Add Variable&#039;&#039;&#039;, &#039;&#039;&#039;Modify Variable&#039;&#039;&#039;, and &#039;&#039;&#039;Replace Variable&#039;&#039;&#039;. If your Events window is empty, create an Event.&lt;br /&gt;
&lt;br /&gt;
[[Image:VariableBox.png|center|The Add Variable window]]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Add Variable&#039;&#039;&#039; allows you to create a new variable. If you&#039;re using FreeSpace Open, your Add Variable window looks like the image above. You can add a number or a string-based variable. Number-based variables must contain numbers only, while string-based values can use letters. From a technical point of view, it&#039;s unimportant how you name your variable. Then set your variable&#039;s default value.&lt;br /&gt;
**In our example, let&#039;s create a number-based variable that is named &amp;quot;TurretsDown&amp;quot; and its default value is 0.&lt;br /&gt;
*&#039;&#039;&#039;Modify Variable&#039;&#039;&#039; allows you to change a variable that you&#039;ve already created. You can modify only one variable at a time. This feature is not to be confused with the [[modify-variable]] one.&lt;br /&gt;
*&#039;&#039;&#039;Replace Variable&#039;&#039;&#039; replaces the currently selected SEXP argument with the variable of your choice.&lt;br /&gt;
**If you clicked on &amp;quot;0&amp;quot; in the example, you could change it to TurretsDown using Replace Variable --&amp;gt; TurretsDown. If the &amp;quot;0&amp;quot; is changed to TurretsDown (which receives a red icon), then you&#039;ve been successful. Now the Event will come true if TurretsDown equals 3.&lt;br /&gt;
&lt;br /&gt;
Variable values can be changed using the [[modify-variable]] SEXP, which you can find under Add Operator --&amp;gt; Change --&amp;gt; Special. A sample Event that adds 1 to a number-based variable looks like:&lt;br /&gt;
&lt;br /&gt;
[[Image:VariableEvent.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
== Four Types of Variables ==&lt;br /&gt;
&lt;br /&gt;
There are five types of variables. Hover the mouse over each variable name in the variable window to display additional information. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Standard variables:&#039;&#039;&#039; This type of variables are used in one mission only. If the player ends the mission in any way (jumping out, dying, restarting, etc.), all the standard variables will be reset to their default values. Whether the player is allowed to progress in the campaign or not is inconclusive (compare campaign-persistent variables). This is the default variable type, and requires no boxes to be checked in the variable window. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Network variables:&#039;&#039;&#039; are only relevant in a multiplayer game. Non-network variables are only ever altered on the server. This means that they can not be used in messages or scripting because all the client machines will only ever have the default value. If you need to have the value of a variable display in a message you will need to mark it as a network variable. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Save on Mission Complete:&#039;&#039;&#039; A type of persistent variable that will save when the player clicks Accept to go to the next mission. If the player is killed or quits during a mission, and changes made to this variable are not stored. They are reset upon the reset of the current campaign, or the selection of a new campaign.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Save on Mission Close:&#039;&#039;&#039; A type of persistent variable that will save when the player leaves the mission. If the player is killed or quits during a mission, and changes made to this variable are stored. They are reset upon the reset of the current campaign, or the selection of a new campaign.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eternal:&#039;&#039;&#039; Eternal is a flag you can add to BOTH &#039;Save on Mission Complete&#039; and &#039;Save on Mission Close&#039; to tell the game to not delete that variable even if the campaign ends or a different campaign is started. It does not reset upon the end of the current campaign, or the selection of a new campaign. Thus it can be used and referred to by other campaigns.&lt;br /&gt;
&lt;br /&gt;
== Variables and Messages ==&lt;br /&gt;
Variables can also be used in messages. To do this, use the variable&#039;s name preceded by the &#039;$&#039; token (for example &amp;quot;$killcount&amp;quot;), and in-game this will be replaced with the value of the variable. Input is case-sensitive. It works for both numeric and string variables.&lt;br /&gt;
&lt;br /&gt;
==Example Mission==&lt;br /&gt;
:&#039;&#039;Main Article: [[Variables example mission]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is a mission in which the player must take down all four of the Sathanas&#039;s main beam weapons to win the mission. This is like [[Bearbaiting]], except this mission is solely made as a variables tutorial. The juggernaut will not fire at you or jump out.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Counting with variables]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
*[http://homepage.ntlworld.com/karajorma/FAQ/fredretail.html#variables Karajorma&#039;s FreeSpace FAQ on variables]&lt;br /&gt;
* Fred Zone examples for variables [http://fredzone.hard-light.net/cetanu_adv-fred-lessons.shtml] [http://fredzone.hard-light.net/cetanu_adv-fred-lessons-2.shtml] &lt;br /&gt;
&lt;br /&gt;
[[Category:FRED]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Enhanced_sound&amp;diff=44757</id>
		<title>Enhanced sound</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Enhanced_sound&amp;diff=44757"/>
		<updated>2015-06-17T23:34:01Z</updated>

		<summary type="html">&lt;p&gt;Jg18: Added link to OS X OpenAL Soft test builds&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|Enhanced sound requires the [http://kcat.strangesoft.net/openal.html OpenAL Soft] driver. See [[#How to get OpenAL Soft|How to get OpenAL Soft]] below.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enhanced sound was merged into master on June 1, 2015, as of Git commit d7f54dd.&lt;br /&gt;
&lt;br /&gt;
Enhanced sound adds&lt;br /&gt;
*Support for 128 audio channels instead of 32&lt;br /&gt;
*Support for more control over how the game prioritizes sounds in a mission&lt;br /&gt;
&lt;br /&gt;
Enhanced sound is enabled by default, but it&#039;s disabled if you are not using [http://kcat.strangesoft.net/openal.html OpenAL Soft]. See [[#How to get OpenAL Soft|How to get OpenAL Soft]] below.&lt;br /&gt;
&lt;br /&gt;
You can also manually disable enhanced sound with the &amp;quot;Disable enhanced sound&amp;quot; launcher flag under the &amp;quot;Audio&amp;quot; flags.&lt;br /&gt;
&lt;br /&gt;
==How to get OpenAL Soft==&lt;br /&gt;
===Windows===&lt;br /&gt;
#First, you need to get the OpenAL32.dll file. You can download version 1.16.0 [http://www.mediafire.com/download/csdkp5psozmq2b1/OpenAL32.dll here].&lt;br /&gt;
#Alternatively, to get OpenAL32.dll from its original source:&lt;br /&gt;
##Download from the [http://kcat.strangesoft.net/openal.html#download OpenAL Soft site] the file whose name ends with &amp;quot;-bin.zip&amp;quot;, such as openal-soft-1.16.0-bin.zip.&lt;br /&gt;
##Open the .zip file and rename  soft_oal.dll found in the bin\Win32\ folder to OpenAL32.dll.&lt;br /&gt;
#Once you have OpenAL32.dll:&lt;br /&gt;
#Copy it to your FreeSpace 2 or TC folder.&lt;br /&gt;
#Make sure to put a copy of OpenAL32.dll in both your FreeSpace 2 folder and the root folders of any TCs you have.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
Linux uses OpenAL Soft, so you don&#039;t need to do anything.&lt;br /&gt;
&lt;br /&gt;
However, you may wish to build from source either the most recent stable release from the [http://kcat.strangesoft.net/openal.html#download OpenAL Soft site] or even the latest commit from their Git repository.&lt;br /&gt;
&lt;br /&gt;
===OS X===&lt;br /&gt;
See [http://www.hard-light.net/forums/index.php?topic=89919.0 this thread] for OS X builds that use OpenAL Soft.&lt;br /&gt;
&lt;br /&gt;
==For modders==&lt;br /&gt;
===Overview===&lt;br /&gt;
Enhanced sound provides control through two values that you can set through extensions of sounds.tbl:&lt;br /&gt;
*&#039;&#039;&#039;Priority&#039;&#039;&#039;: how important the sound is&lt;br /&gt;
*&#039;&#039;&#039;Limit&#039;&#039;&#039;: how many instances of the sound can  be playing at hte same time&lt;br /&gt;
&lt;br /&gt;
The engine has hardcoded default priorities and limits, as described [[#More on default prioritiies/limits|below]].&lt;br /&gt;
&lt;br /&gt;
You can set custom values for priorities limits using a .tbm file extending sounds.tbl. The [[Sounds.tbl]] page has details on how to specify custom [[Sounds.tbl#+Priority:|priorities]] and [[Sounds.tbl#+Limit:|limits]].&lt;br /&gt;
&lt;br /&gt;
{{Warning|If you create a TC and want to use enhanced sound, then you &#039;&#039;&#039;MUST&#039;&#039;&#039; set custom priorities/limits for your TC&#039;s gameplay sounds. Otherwise the game may sound strange, because the game will use the default values for FS2 retail.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note|If you create an FS2 mod that adds new gameplay sounds, then it is &#039;&#039;&#039;strongly&#039;&#039;&#039; recommended that you specify priorities/limits for those sounds.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===More on default prioritiies/limits===&lt;br /&gt;
The FSO engine has hardcoded default priorities limits for the 192 gameplay sound entries in the FS2 retail sounds.tbl. You can see the current list in the source code&#039;s [https://github.com/scp-fs2open/fs2open.github.com/blob/master/code/gamesnd/gamesnd.cpp code\gamesnd\gamesnd.cpp] file.&lt;br /&gt;
Look for the line starting with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static EnhancedSoundData Default_sound_priorities[NUM_RETAIL_GAMEPLAY_SOUNDS] =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sounds outside this range are assigned a generic default priority of Medium-High and limit 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tips on selecting priorities/limits===&lt;br /&gt;
&lt;br /&gt;
The first answer in [http://gamedev.stackexchange.com/questions/2253/audio-design-and-xaudio2-performance-issues this thread] has some details:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The methods to prioritise [sounds] can include :&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a) Volume - the lowest being the least important.&lt;br /&gt;
[&#039;&#039;FSO already takes volume into account when deciding whether to replace a currently playing sound.&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;b) Priority - a value you set yourself based on the importance of the sound and the likely hood that the user will notice the sound dropping out. Background music, for example, should be set to never be dropped. A random cricket sound for ambience should be high on the list.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;c) Grouping [or &#039;&#039;limit&#039;&#039;] - If you have gunshot sounds for example, once they have hit a hard limit (say 15) you would stop adding new gunshot sounds as they wouldn&#039;t add to the overall mix.&lt;br /&gt;
[&#039;&#039;Grouping/limits is also needed to prevent clipping, which is why in FSO, the warp-in sound has a low limit of 2. The super-loud  warp-ins were occurring because this limit wasn&#039;t being enforced, meaning there was no limit at all.&#039;&#039;]&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Enhanced_sound&amp;diff=44621</id>
		<title>Enhanced sound</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Enhanced_sound&amp;diff=44621"/>
		<updated>2015-06-03T22:34:38Z</updated>

		<summary type="html">&lt;p&gt;Jg18: First draft of enhanced sound page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|Enhanced sound requires the [http://kcat.strangesoft.net/openal.html OpenAL Soft] driver. See [[#How to get OpenAL Soft|How to get OpenAL Soft]] below.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enhanced sound was merged into master on June 1, 2015, as of Git commit d7f54dd.&lt;br /&gt;
&lt;br /&gt;
Enhanced sound adds&lt;br /&gt;
*Support for 128 audio channels instead of 32&lt;br /&gt;
*Support for more control over how the game prioritizes sounds in a mission&lt;br /&gt;
&lt;br /&gt;
Enhanced sound is enabled by default, but it&#039;s disabled if you are not using [http://kcat.strangesoft.net/openal.html OpenAL Soft]. See [[#How to get OpenAL Soft|How to get OpenAL Soft]] below.&lt;br /&gt;
&lt;br /&gt;
You can also manually disable enhanced sound with the &amp;quot;Disable enhanced sound&amp;quot; launcher flag under the &amp;quot;Audio&amp;quot; flags.&lt;br /&gt;
&lt;br /&gt;
==How to get OpenAL Soft==&lt;br /&gt;
===Windows===&lt;br /&gt;
#First, you need to get the OpenAL32.dll file. You can download version 1.16.0 [http://www.mediafire.com/download/csdkp5psozmq2b1/OpenAL32.dll here].&lt;br /&gt;
#Alternatively, to get OpenAL32.dll from its original source:&lt;br /&gt;
##Download from the [http://kcat.strangesoft.net/openal.html#download OpenAL Soft site] the file whose name ends with &amp;quot;-bin.zip&amp;quot;, such as openal-soft-1.16.0-bin.zip.&lt;br /&gt;
##Open the .zip file and rename  soft_oal.dll found in the bin\Win32\ folder to OpenAL32.dll.&lt;br /&gt;
#Once you have OpenAL32.dll:&lt;br /&gt;
#Copy it to your FreeSpace 2 or TC folder.&lt;br /&gt;
#Make sure to put a copy of OpenAL32.dll in both your FreeSpace 2 folder and the root folders of any TCs you have.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
Linux uses OpenAL Soft, so you don&#039;t need to do anything.&lt;br /&gt;
&lt;br /&gt;
However, you may wish to build from source either the most recent stable release from the [http://kcat.strangesoft.net/openal.html#download OpenAL Soft site] or even the latest commit from their Git repository.&lt;br /&gt;
&lt;br /&gt;
===OS X===&lt;br /&gt;
OS X requires special FSO builds that use OpenAL Soft.&lt;br /&gt;
&lt;br /&gt;
At this time, no such builds are available. The SCP is working on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==For modders==&lt;br /&gt;
===Overview===&lt;br /&gt;
Enhanced sound provides control through two values that you can set through extensions of sounds.tbl:&lt;br /&gt;
*&#039;&#039;&#039;Priority&#039;&#039;&#039;: how important the sound is&lt;br /&gt;
*&#039;&#039;&#039;Limit&#039;&#039;&#039;: how many instances of the sound can  be playing at hte same time&lt;br /&gt;
&lt;br /&gt;
The engine has hardcoded default priorities and limits, as described [[#More on default prioritiies/limits|below]].&lt;br /&gt;
&lt;br /&gt;
You can set custom values for priorities limits using a .tbm file extending sounds.tbl. The [[Sounds.tbl]] page has details on how to specify custom [[Sounds.tbl#+Priority:|priorities]] and [[Sounds.tbl#+Limit:|limits]].&lt;br /&gt;
&lt;br /&gt;
{{Warning|If you create a TC and want to use enhanced sound, then you &#039;&#039;&#039;MUST&#039;&#039;&#039; set custom priorities/limits for your TC&#039;s gameplay sounds. Otherwise the game may sound strange, because the game will use the default values for FS2 retail.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Note|If you create an FS2 mod that adds new gameplay sounds, then it is &#039;&#039;&#039;strongly&#039;&#039;&#039; recommended that you specify priorities/limits for those sounds.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===More on default prioritiies/limits===&lt;br /&gt;
The FSO engine has hardcoded default priorities limits for the 192 gameplay sound entries in the FS2 retail sounds.tbl. You can see the current list in the source code&#039;s [https://github.com/scp-fs2open/fs2open.github.com/blob/master/code/gamesnd/gamesnd.cpp code\gamesnd\gamesnd.cpp] file.&lt;br /&gt;
Look for the line starting with&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static EnhancedSoundData Default_sound_priorities[NUM_RETAIL_GAMEPLAY_SOUNDS] =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sounds outside this range are assigned a generic default priority of Medium-High and limit 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tips on selecting priorities/limits===&lt;br /&gt;
&lt;br /&gt;
The first answer in [http://gamedev.stackexchange.com/questions/2253/audio-design-and-xaudio2-performance-issues this thread] has some details:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The methods to prioritise [sounds] can include :&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a) Volume - the lowest being the least important.&lt;br /&gt;
[&#039;&#039;FSO already takes volume into account when deciding whether to replace a currently playing sound.&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;b) Priority - a value you set yourself based on the importance of the sound and the likely hood that the user will notice the sound dropping out. Background music, for example, should be set to never be dropped. A random cricket sound for ambience should be high on the list.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;c) Grouping [or &#039;&#039;limit&#039;&#039;] - If you have gunshot sounds for example, once they have hit a hard limit (say 15) you would stop adding new gunshot sounds as they wouldn&#039;t add to the overall mix.&lt;br /&gt;
[&#039;&#039;Grouping/limits is also needed to prevent clipping, which is why in FSO, the warp-in sound has a low limit of 2. The super-loud  warp-ins were occurring because this limit wasn&#039;t being enforced, meaning there was no limit at all.&#039;&#039;]&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Enhanced_sound&amp;diff=44620</id>
		<title>Enhanced sound</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Enhanced_sound&amp;diff=44620"/>
		<updated>2015-06-02T22:51:44Z</updated>

		<summary type="html">&lt;p&gt;Jg18: Aded placeholder&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Coming soon...&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Sounds.tbl&amp;diff=44619</id>
		<title>Sounds.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Sounds.tbl&amp;diff=44619"/>
		<updated>2015-06-02T21:16:42Z</updated>

		<summary type="html">&lt;p&gt;Jg18: Update for enhanced sound&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TableVersion| d7f54dd (Git commit)}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;sounds.tbl&#039;&#039;&#039; is a file for defining the various sounds played ingame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This table is one of the [[Modular Tables]] and can be extended with xxx-snd.tbm&lt;br /&gt;
&lt;br /&gt;
[[Tables|List of Tables]]&lt;br /&gt;
&lt;br /&gt;
==Format==&lt;br /&gt;
*Table file consists of several sections&lt;br /&gt;
*First section defines the sound for the actual game play. It begins at &#039;&#039;&#039;#Game Sounds Start&#039;&#039;&#039; and ends at&#039;&#039;&#039;#Game Sounds End&#039;&#039;&#039;&lt;br /&gt;
*Second section defines the interface sounds. It starts at &#039;&#039;&#039;#Interface Sounds Start&#039;&#039;&#039; and ends at &#039;&#039;&#039;#Interface Sounds End&#039;&#039;&#039;&lt;br /&gt;
*Third section defines the flyby sounds for different species. It begins at &#039;&#039;&#039;#Flyby Sounds Start&#039;&#039;&#039; and ends at &#039;&#039;&#039;#Flyby Sounds End&#039;&#039;&#039;&lt;br /&gt;
*This table has two possible syntax&#039;s, the first being the SCP Syntax and the second being the Retail Syntax&lt;br /&gt;
**The SCP Syntax is newer, easier to read, and likely preferred for modular tables and extendability&lt;br /&gt;
**The Retail Syntax is the syntax used by the retail tables which was kept in place to keep retail compatibility&lt;br /&gt;
*Most of the sounds are hardcoded in the engine (that is, the engine expects sound 33 to be the missile rearm sound, as an example). Modders should follow the retail table layout, and not assign sound numbers smaller than 250 to their custom sounds. This avoids index collisions.&lt;br /&gt;
&lt;br /&gt;
==SCP Syntax==&lt;br /&gt;
{{Note|Many retail sound names are hardcoded to a specific type of sound, so removing entries is not recommended. However adding new ones or altering existing ones is possible.  See the [[Hardcoded sounds|hardcoded sounds]] for a list of which sounds have hardcoded names.}}&lt;br /&gt;
&lt;br /&gt;
In most entries, the name of the file (&#039;&#039;&#039;Second&#039;&#039;&#039; value) can be replaced with &#039;empty&#039; if the particular sound index is not in use.&lt;br /&gt;
&lt;br /&gt;
===#Game Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Cockpit sounds are in general non-3D sounds&lt;br /&gt;
*All the other in-flight sounds are, in general, 3D sounds&lt;br /&gt;
*Non-3D sounds do not require the &#039;&#039;&#039;+3D Sound&#039;&#039;&#039; entries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$Name: 6&lt;br /&gt;
    +Filename: breakup&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.60&lt;br /&gt;
    +3D Sound:&lt;br /&gt;
        +Attenuation start: 100&lt;br /&gt;
        +Attenuation end: 800&lt;br /&gt;
    +Priority: High&lt;br /&gt;
    +Limit: 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*Specifies the sound handle which FSO will use to identify the sound from other tables&lt;br /&gt;
*If +nocreate is to be used, it must come after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
{{Warning|&lt;br /&gt;
The name may not contain any whitespace (space or tab characters) or the old parsing code will be used.}}&lt;br /&gt;
&lt;br /&gt;
====+nocreate====&lt;br /&gt;
*Allows editing of the sound without creating a new sound handle&lt;br /&gt;
*Must be placed after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Example&lt;br /&gt;
**&amp;lt;pre&amp;gt;$Name: +nocreate SoundName&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====+Filename:====&lt;br /&gt;
*The name of the actual sound file to play&lt;br /&gt;
*Always required, even if +nocreate is used.&lt;br /&gt;
*To specify no sound file, use &amp;quot;empty&amp;quot; (without the quotes)&lt;br /&gt;
*If +nocreate is used and you don&#039;t want to change the original filename, then use &amp;lt;same&amp;gt; (including the &amp;lt;&amp;gt;)&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Preload:====&lt;br /&gt;
*Specifies whether FSO should always preload the sound before the mission or not&lt;br /&gt;
*Optional if +nocreate is used, required otherwise&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Boolean&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Volume:====&lt;br /&gt;
*Specifies the volume the sound should be played at as a percentage&lt;br /&gt;
*Optional if +nocreate is used, required otherwise&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Float&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+3D Sound:====&lt;br /&gt;
*Sets up table syntax for specifying 3D sound options&lt;br /&gt;
*If present the sound will be loaded as a 3D sound&lt;br /&gt;
*No argument should be specified&lt;br /&gt;
*Must be accompanied by &#039;&#039;&#039;+Attenuation Start:&#039;&#039;&#039; and &#039;&#039;&#039;+Attenuation End:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation Start:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it begins to attenuate&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation End:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it is inaudible&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Priority:====&lt;br /&gt;
*Optional, for use with [[Enhanced sound|enhanced sound]]&lt;br /&gt;
*Can be used with or without an accompanying +Limit:&lt;br /&gt;
*Specifies the priority of this sound when enhanced sound is used&lt;br /&gt;
*Should be based on how important this sound is and also how likely the player will notice if the sound drops out&lt;br /&gt;
*overrides the engine default value&lt;br /&gt;
*For valid values, see the table below. Values are not case-sensitive.&lt;br /&gt;
*See the [[Enhanced sound]] page for more information.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Value         Meaning&lt;br /&gt;
-----         -------&lt;br /&gt;
Must Play     Absolutely must play&lt;br /&gt;
High          Very important&lt;br /&gt;
Medium-High   Important&lt;br /&gt;
Medium        Somewhat important&lt;br /&gt;
Medium-Low    Only a little important&lt;br /&gt;
Low           Not important&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====+Limit:====&lt;br /&gt;
*Optional, for use with [[Enhanced sound|enhanced sound]]&lt;br /&gt;
*Can be used with or without an accompanying +Priority:&lt;br /&gt;
*Specifies how many instances of the sound can play at the same time&lt;br /&gt;
*overrides the engine default value&lt;br /&gt;
*Must be in the range 1 - 15&lt;br /&gt;
*See the [[Enhanced sound]] page for more information,&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Game Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Interface Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Interface sounds are not 3D sounds. You may specify &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039; properties, but they will be ignored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$Name: CraneSound1&lt;br /&gt;
    +Filename: Crane_1&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*Specifies the sound handle which FSO will use to identify the sound from other tables&lt;br /&gt;
*If +nocreate is to be used, it must come after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
{{Warning|&lt;br /&gt;
The name may not contain any whitespace (space or tab characters) or the old parsing code will be used.}}&lt;br /&gt;
&lt;br /&gt;
====+nocreate====&lt;br /&gt;
*Allows editing of the sound without creating a new sound handle&lt;br /&gt;
*Must be placed after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Example&lt;br /&gt;
**&amp;lt;pre&amp;gt;$Name: +nocreate SoundName&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====+Filename:====&lt;br /&gt;
*The name of the actual sound file to play&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Preload:====&lt;br /&gt;
*Specifies whether FSO should always preload the sound before the mission or not&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Boolean&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Volume:====&lt;br /&gt;
*Specifies the volume the sound should be played at as a percentage&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Float&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Interface Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Flyby Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Each species has two flyby sounds. One for the fighters and one for the bombers.&lt;br /&gt;
*Flyby sounds are all 3D sounds.&lt;br /&gt;
*Each flyby sound is defined on a line that begins with the species name (&#039;&#039;&#039;String&#039;&#039;&#039;, species name, eg. &#039;&#039;&#039;$Terran:&#039;&#039;&#039;).&lt;br /&gt;
*&#039;&#039;&#039;THE FLYBY SECTION CANNOT USE +nocreate&#039;&#039;&#039;&lt;br /&gt;
If you want to modify a flyby sound entry of a species in a modular table then you will need to have entries for both types.&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;&#039;$SPECIES:&#039;&#039;&#039; in the place of &#039;&#039;&#039;$Name:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example Terran Section&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$Terran: 0&lt;br /&gt;
    +Filename: T_flyby1&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.75&lt;br /&gt;
    +3D Sound:&lt;br /&gt;
        +Attenuation start: 200&lt;br /&gt;
        +Attenuation end: 400&lt;br /&gt;
&lt;br /&gt;
$Terran: 1&lt;br /&gt;
    +Filename: T_flyby2&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.75&lt;br /&gt;
    +3D Sound:&lt;br /&gt;
        +Attenuation start: 200&lt;br /&gt;
        +Attenuation end: 400&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*&#039;&#039;&#039;$Name&#039;&#039;&#039; must be replaced with &#039;&#039;&#039;$SPECIES&#039;&#039;&#039; as from the [[Species_defs.tbl]]&lt;br /&gt;
*Specifies the sound handle which FSO will use to identify the sound from other tables&lt;br /&gt;
*In this case it will usually be a &#039;&#039;&#039;1&#039;&#039;&#039; or a &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
{{Warning|&lt;br /&gt;
The name may not contain any whitespace (space or tab characters) or the old parsing code will be used.}}&lt;br /&gt;
&lt;br /&gt;
====+Filename:====&lt;br /&gt;
*The name of the actual sound file to play&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Preload:====&lt;br /&gt;
*Specifies whether FSO should always preload the sound before the mission or not&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Boolean&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Volume:====&lt;br /&gt;
*Specifies the volume the sound should be played at as a percentage&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Float&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+3D Sound:====&lt;br /&gt;
*Sets up table syntax for specifying 3D sound options&lt;br /&gt;
*If present the sound will be loaded as a 3D sound&lt;br /&gt;
*No argument should be specified&lt;br /&gt;
*Must be accompanied by &#039;&#039;&#039;+Attenuation Start:&#039;&#039;&#039; and &#039;&#039;&#039;+Attenuation End:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation Start:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it begins to attenuate&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation End:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it is inaudible&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Flyby Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Retail Syntax==&lt;br /&gt;
{{Note|Many retail sound names are hardcoded to a specific type of sound, so removing entries is not recommended. However adding new ones or altering existing ones is possible.  See the [[Hardcoded sounds|hardcoded sounds]] for a list of which sounds have hardcoded names.}}&lt;br /&gt;
&lt;br /&gt;
In most entries, the name of the file (&#039;&#039;&#039;Second&#039;&#039;&#039; value) can be replaced with &#039;empty&#039; if the particular sound index is not in use.&lt;br /&gt;
&lt;br /&gt;
===#Game Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Cockpit sounds are in general non-3D sounds that ought to be of type &#039;0&#039;, however all the other in-flight sounds are in general 3D sounds and ought to of type &#039;1&#039; (or type &#039;2&#039;).&lt;br /&gt;
*Type 0 sounds do not require the &#039;&#039;&#039;Sixth&#039;&#039;&#039; and &#039;&#039;&#039;Seventh&#039;&#039;&#039; entries.&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;$Name: 6 breakup.wav, 0, 0.60, 1, 100, 800&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;$Name:&#039;&#039; and has seven entries separated by commas except for the first and second entries.&lt;br /&gt;
&lt;br /&gt;
**&#039;&#039;&#039;First&#039;&#039;&#039; value is the index number of the sound (&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
**&#039;&#039;&#039;Second&#039;&#039;&#039; value is the name of actual sound file (&#039;&#039;&#039;String&#039;&#039;&#039;, filename).&lt;br /&gt;
**&#039;&#039;&#039;Third&#039;&#039;&#039; value sets the file to always preloaded before the mission (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0 or 1)&lt;br /&gt;
**&#039;&#039;&#039;Fourth&#039;&#039;&#039; value defines the playing volume of the sound in percentages (&#039;&#039;&#039;Float&#039;&#039;&#039;, from 0 to 1)&lt;br /&gt;
**&#039;&#039;&#039;Fifth&#039;&#039;&#039; value sets the sound type to either standard sound (type &#039;0&#039;), 3D stereo sound (type &#039;1&#039;), or Aureal A3D (type &#039;2&#039;). This defaults to 3D stereo if it is not available (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0, 1 or 2)&lt;br /&gt;
***&#039;&#039;&#039;Sixth&#039;&#039;&#039; value defines the distance from the origin of 3D sound where it begins to attenuate and is not used with normal non-3D sounds (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
***&#039;&#039;&#039;Seventh&#039;&#039;&#039; value sets the distance from the origin of the 3D sound where it is inaudible and is not used with normal non-3D sounds (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Game Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Interface Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Interface sounds are not 3D sounds. Use type &#039;0&#039; sounds. The &#039;&#039;&#039;Sixth&#039;&#039;&#039; and &#039;&#039;&#039;Seventh&#039;&#039;&#039; entries can be left out of sounds in this section.&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;$Name: 26 Crane_1.wav, 0, 0.50, 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;$Name:&#039;&#039; and has five entries separated by commas except for the first and second entries.&lt;br /&gt;
&lt;br /&gt;
**&#039;&#039;&#039;First&#039;&#039;&#039; value is the index number of the sound (&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
**&#039;&#039;&#039;Second&#039;&#039;&#039; value is the name of actual sound file (&#039;&#039;&#039;String&#039;&#039;&#039;, filename).&lt;br /&gt;
**&#039;&#039;&#039;Third&#039;&#039;&#039; value sets the file to always preloaded before the mission (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0 or 1)&lt;br /&gt;
**&#039;&#039;&#039;Fourth&#039;&#039;&#039; value defines the playing volume of the sound in percentages (&#039;&#039;&#039;Float&#039;&#039;&#039;, from 0 to 1)&lt;br /&gt;
**&#039;&#039;&#039;Fifth&#039;&#039;&#039; value sets the sound type to either standard sound (type &#039;0&#039;), 3D stereo sound (type &#039;1&#039;), or Aureal A3D (type &#039;2&#039;). This defaults to 3D stereo if it is not available (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0, 1 or 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Interface Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Flyby Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Each species has two flyby sounds. One for the fighters and one for the bombers.&lt;br /&gt;
*Flyby sounds are all 3D sounds of type &#039;1&#039; for the &#039;&#039;&#039;Fifth&#039;&#039;&#039; value.&lt;br /&gt;
*Each flyby sound is defined on a single line that begins with the species name (&#039;&#039;&#039;String&#039;&#039;&#039;, species name, eg. &#039;&#039;&#039;$Terran:&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Retail flyby section&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Flyby Sounds Start&lt;br /&gt;
&lt;br /&gt;
$Terran:	0	T_flyby1.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
$Terran:	1	T_flyby2.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Vasudan:	0	V_flyby1.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
$Vasudan:	1	V_flyby2.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Shivan:	0	S_flyby1.wav,	0, 0.75, 1, 200, 400	; * Shivan ship1 flyby player sound (3d sound)&lt;br /&gt;
$Shivan:	1	S_flyby2.wav,	0, 0.75, 1, 200, 400	; * Shivan ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
#Flyby Sounds End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;$SPECIES:&#039;&#039; and has seven entries separated by commas except for the first and second entries.&lt;br /&gt;
&lt;br /&gt;
**&#039;&#039;&#039;First&#039;&#039;&#039; value is the label of the flyby sound, usually 0 for the first (small-ship) entry and 1 for the second (large-ship)entry. (&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
**&#039;&#039;&#039;Second&#039;&#039;&#039; value is the name of actual sound file (&#039;&#039;&#039;String&#039;&#039;&#039;, filename).&lt;br /&gt;
**&#039;&#039;&#039;Third&#039;&#039;&#039; value sets the file to always preloaded before the mission (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0 or 1)&lt;br /&gt;
**&#039;&#039;&#039;Fourth&#039;&#039;&#039; value defines the playing volume of the sound in percentages (&#039;&#039;&#039;Float&#039;&#039;&#039;, from 0 to 1)&lt;br /&gt;
**&#039;&#039;&#039;Fifth&#039;&#039;&#039; value sets the sound type and should be set to 3D stereo sound (type &#039;1&#039;) (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0, 1 or 2)&lt;br /&gt;
***&#039;&#039;&#039;Sixth&#039;&#039;&#039; value defines the distance from the origin of 3D sound where it begins to attenuate (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
***&#039;&#039;&#039;Seventh&#039;&#039;&#039; value sets the distance from the origin of the 3D sound where it is inaudible (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Flyby Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sample==&lt;br /&gt;
*Retail FreeSpace 2 table&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;  sounds.tbl *&lt;br /&gt;
;&lt;br /&gt;
;  file to specify general game sounds&lt;br /&gt;
;&lt;br /&gt;
;                     I M P O R T A N T&lt;br /&gt;
;  **********************************************************&lt;br /&gt;
;  *                                                        *&lt;br /&gt;
;  ====&amp;gt;  DO NOT MODIFY THE ORDER OF THE LISTED SOUNDS &amp;lt;====*&lt;br /&gt;
;  *                                                        *&lt;br /&gt;
;  **********************************************************&lt;br /&gt;
;                     I M P O R T A N T&lt;br /&gt;
;&lt;br /&gt;
;  If a sound entry appears in this file, there is a hook into the game to&lt;br /&gt;
;  play the sound.  This file can only be modified to change *existing* sounds.&lt;br /&gt;
;  Talk to a programmer if you want to add brand new sounds.  Adding a line to&lt;br /&gt;
;  this file will not make your sound appear in the game, it will more than&lt;br /&gt;
;  likely break something.&lt;br /&gt;
;&lt;br /&gt;
; 	If you don&#039;t want the sound to play, put none.wav as the sound to play.&lt;br /&gt;
;&lt;br /&gt;
;	The fields for a sound entry are:&lt;br /&gt;
;	1) unqiue sound signature&lt;br /&gt;
;	2) filename of the sound&lt;br /&gt;
;	3) flag to indicate sound should always be pre-loaded before a mission&lt;br /&gt;
;	4) the default volume (from 0.0 -&amp;gt; 1.0)&lt;br /&gt;
;	5) 0 - not 3d  1 - stereo 3D  2 - Aureal A3D (if available), otherwise use stereo 3D&lt;br /&gt;
;	6) distance at which sound starts to attenuate (for 3d sounds only)&lt;br /&gt;
;	7) distance at which sound is inaudible (for 3d sounds only)&lt;br /&gt;
;&lt;br /&gt;
#Game Sounds Start&lt;br /&gt;
; Misc sounds section						** = Aureal 3d support | * = FS = 3D support&lt;br /&gt;
$Name:	0	trk-loop.wav,		0, 0.40, 0		; Missle tracking to acquire a lock (looped)&lt;br /&gt;
$Name:	1	lock.wav,		0, 0.40, 0		; Missle lock (non-looping)&lt;br /&gt;
$Name:	2	cycle.wav,		0, 0.60, 0		; cycle primary weapon&lt;br /&gt;
$Name:	3	cycle.wav,		0, 0.60, 0		; cycle secondary weapon&lt;br /&gt;
$Name:	4	ship_p.wav,		0, 0.30, 0		; engine sound (as heard in cockpit)&lt;br /&gt;
$Name:	5	reveal.wav,		0, 0.40, 0		; cargo revealed &lt;br /&gt;
$Name:	6	breakup.wav,		0, 0.60, 1, 100, 800	; ship death roll (3d sound)&lt;br /&gt;
$Name:	7	boom_3.wav,		0, 0.90, 2, 600, 1200	; * ship explosion 1 (3d sound)&lt;br /&gt;
$Name:	8	beep_2.wav,		0, 0.40, 0		; target acquried&lt;br /&gt;
$Name:	9	switch_1.wav,		0, 0.50, 0		; energy level change success&lt;br /&gt;
$Name:	10	beep_5.wav,		0, 0.50, 0		; energy level change fail&lt;br /&gt;
$Name:	11	switch_2.wav,		0, 0.50, 0		; energy transfer success&lt;br /&gt;
$Name:	12	beep_5.wav,		0, 0.50, 0		; energy transfer faile&lt;br /&gt;
$Name:	13	thr_full.wav,		0, 0.40, 0		; set full throttle&lt;br /&gt;
$Name:	14	thr_off.wav,		0, 0.40, 0		; set zero throttle&lt;br /&gt;
$Name:	15	thr_up.wav,		0, 0.40, 0		; set 1/3 or 2/3 throttle (up)&lt;br /&gt;
$Name:	16	thr_dwn.wav,		0, 0.40, 0		; set 1/3 or 2/3 throttle (down)&lt;br /&gt;
$Name:	17	approach.wav,		0, 0.60, 1, 10, 800	; dock approach retros (3d sound)&lt;br /&gt;
$Name:	18	attach.wav,		0, 0.60, 1, 10, 800	; dock attach (3d sound)&lt;br /&gt;
$Name:	19	detach.wav,		0, 0.60, 1, 10, 800	; dock detach (3d sound)&lt;br /&gt;
$Name:	20	depart.wav,		0, 0.60, 1, 10, 800	; dock depart retros (3d sound)&lt;br /&gt;
$Name:	21	aburn_1.wav,		0, 0.70, 0		; afterburner engage (3d sound)&lt;br /&gt;
$Name:	22	aburn_2.wav,		0, 0.90, 0		; afterburner burn sound (looped)&lt;br /&gt;
$Name:	23	vaporize2.wav,		0, 0.90, 0		; Destroyed by a beam (vaporized)&lt;br /&gt;
$Name:	24	aburn_1f.wav,		0, 0.50, 0		; afterburner fail (no fuel when aburn pressed)&lt;br /&gt;
$Name:	25	alert_2.wav,		0, 0.40, 0		; heat-seeker launch warning&lt;br /&gt;
$Name:	26	m_fail.wav,		0, 0.60, 0		; tried to fire a missle when none are left&lt;br /&gt;
$Name:	27	l_fail.wav,		0, 0.60, 0		; tried to fire lasers when not enough energy left&lt;br /&gt;
$Name:	28	fail.wav,		0, 0.50, 0		; target fail sound (i.e. press targeting key, but nothing happens)&lt;br /&gt;
$Name:	29	beep_1.wav,		0, 0.50, 0		; squadmate message menu appears&lt;br /&gt;
$Name:	30	beep_1.wav,		0, 0.50, 0		; squadmate message menu disappears&lt;br /&gt;
$Name:	31	debris.wav,		0, 0.40, 2, 100, 300	; ** debris sound (persistant, looping) (3d sound)&lt;br /&gt;
$Name:	32	subhit.wav,		0, 0.60, 0		; subsystem gets destroyed on player ship&lt;br /&gt;
$Name:	33	m_load.wav,		0, 0.60, 1, 10, 50	; missle start load (during rearm/repair) (3d sound)&lt;br /&gt;
$Name:	34	m_lock.wav,		0, 0.50, 1, 10, 50	; missle load (during rearm/repair) (3d sound)&lt;br /&gt;
$Name:	35	repair.wav,		0, 0.50, 0		; ship is being repaired (during rearm/repair) (looped)&lt;br /&gt;
$Name:	36	l_hit.wav,		0, 0.90, 0, 30, 100	; * player ship is hit by laser fire (3d sound)&lt;br /&gt;
$Name:	37	m_hit.wav,		0, 0.90, 0, 30, 100	; * player ship is hit by missile (3d sound)&lt;br /&gt;
$Name:	38	cycle.wav,		0, 0.80, 0		; countermeasure cycle&lt;br /&gt;
$Name:	39	s_hit_4.wav,		0, 0.60, 1, 200, 600	; * shield hit (3d sound)&lt;br /&gt;
$Name:	40	s_hit_2.wav,		0, 0.80, 1, 10, 100	; * player shield is hit (3d sound)&lt;br /&gt;
$Name:	41	select.wav,		0, 0.60, 0		; mouse click&lt;br /&gt;
$Name:	42	alert_3.wav,		0, 0.60, 0		; aspect launch warning&lt;br /&gt;
$Name:	43	beep_4.wav,		0, 0.60, 0		; shield quadrant transfer successful&lt;br /&gt;
$Name:	44	wash.wav,		0, 0.80, 1, 200, 400	; Engine wash looping sound&lt;br /&gt;
$Name:	45	warp_1.wav,		0, 0.60, 2, 750, 1500	; ** warp hole opening up for arriving (3d sound)&lt;br /&gt;
$Name:	46	warp_1.wav,		0, 0.60, 2, 750, 1500	; ** warp hole opening up for departing (3d sound)&lt;br /&gt;
$Name:	47	aburn_1f.wav,		0, 0.50, 0		; player warp has failed&lt;br /&gt;
$Name:	48	static.wav,		0, 0.60, 0		; hud gauge static&lt;br /&gt;
$Name:	49	boom_1.wav,		0, 0.90, 1, 600, 1200	; * ship explosion 2 (3d sound)&lt;br /&gt;
$Name:	50	rev1.wav,		0, 0.70, 0		; ship is warping out in 3rd person&lt;br /&gt;
$Name:	51	s_hit_0.wav,		0, 0.70, 1, 100, 200	; * heavy ship-ship collide sound (3d sound)&lt;br /&gt;
$Name:	52	collide.wav,		0, 0.70, 1, 100, 200	; * light ship-ship collide sound (3d sound)&lt;br /&gt;
$Name:	53	s_hit_1.wav,		0, 0.70, 1, 100, 200	; * shield ship-ship collide overlay sound (3d sound)&lt;br /&gt;
$Name:	54	alert_1.wav,		0, 0.50, 0		; missile threat indicator flashes&lt;br /&gt;
$Name:	55	proximity1.wav,		0, 0.70, 0		; proximity warning (heat seeker)&lt;br /&gt;
$Name:	56	proximity2.wav,		0, 0.70, 0		; proximity warning (aspect)&lt;br /&gt;
$Name:	57	directive.wav,		0, 0.70, 0		; directive complete&lt;br /&gt;
$Name:	58	subhit2.wav,		0, 0.90, 1, 250,  800	; * other ship subsystem destroyed (3d sound)&lt;br /&gt;
$Name:	59	atomic.wav,		0, 0.90, 1, 2000, 4000	; * captial ship explosion (3d sound)&lt;br /&gt;
$Name:	60	subhit2.wav,		0, 0.90, 1, 250,  1500	; * captial ship subsystem destroyed (3d sound)&lt;br /&gt;
$Name:	61	warp2.wav,		0, 1.00, 1, 1500, 2000	; [obsolete] large ship warps out (looping 3d sound)&lt;br /&gt;
$Name:	62	ast_lghit.wav,		0, 0.80, 1, 750, 1500	; ** large asteroid blows up (3d sound)&lt;br /&gt;
$Name:	63	ast_smhit.wav,		0, 0.80, 1, 500, 1000	; ** small asteroid blows up (3d sound)&lt;br /&gt;
$Name:	64	cue_voice.wav,		0, 0.90, 0		; sound to indicate voice is about to start&lt;br /&gt;
$Name:	65	end_voice.wav,		0, 0.90, 0		; sound to indicate voice has ended&lt;br /&gt;
$Name:	66	scan.wav,		0, 0.50, 0		; cargo scanning (looping)&lt;br /&gt;
$Name:	67	l_flyby.wav,		0, 0.80, 1, 50, 250	; * weapon flyby sound&lt;br /&gt;
$Name:	68	asteroid.wav,		0, 0.50, 1, 200, 700	; [obsolete] asteroid sound (persistant, looping) (3d sound)&lt;br /&gt;
$Name:	69	warp_open.wav,		0, 1.00, 2, 2000, 4000	; capital warp hole opening (3d sound)&lt;br /&gt;
$Name:	70	warp_close.wav,		0, 1.00, 2, 2000, 4000	; capital warp hole closing (3d sound)&lt;br /&gt;
$Name:	71	rumble.wav,		0, 0.70, 1, 600, 1000	; LARGE engine ambient&lt;br /&gt;
$Name:	72	subspace_left.wav,	0, 0.30, 0		; subspace ambient sound (left channel) (looping)&lt;br /&gt;
$Name:	73	subspace_right.wav,	0, 0.30, 0		; subspace ambient sound (right channel) (looping)&lt;br /&gt;
$Name:	74	Evaded.wav,		0, 0.70, 0		; &amp;quot;evaded&amp;quot; HUD popup&lt;br /&gt;
$Name:	75	rumble.wav,		0, 0.70, 1, 600, 1000	; HUGE engine ambient&lt;br /&gt;
;&lt;br /&gt;
; Weapons section&lt;br /&gt;
;&lt;br /&gt;
$Name:	76	L_Sidearm.wav,		0, 0.50, 1,  50, 400	; SD-4 Sidearm laser fired&lt;br /&gt;
$Name:	77	L_Scalpel.wav,		0, 0.50, 1,  50, 400	; DR-2 Scalpel fired&lt;br /&gt;
$Name:	78	L_Flail2.wav,		0, 0.50, 1,  50, 400	; Flail II fired&lt;br /&gt;
$Name:	79	L_Prom_R.wav,		0, 0.50, 1,  50, 400	; Prometheus R laser fired&lt;br /&gt;
$Name:	80	L_Prom_S.wav,		0, 0.50, 1,  50, 400	; Prometheus S laser fired&lt;br /&gt;
$Name:	81	L_Newton.wav,		0, 0.50, 1,  50, 400	; GTW-66 Newton Cannon fired&lt;br /&gt;
$Name:	82	L_Kayser.wav,		0, 0.55, 1,  50, 400	; UD-8 Kayser Laser fired&lt;br /&gt;
$Name:	83	L_Circle.wav,		0, 0.50, 1,  50, 400	; GTW-19 Circe laser fired&lt;br /&gt;
$Name:	84	L_Lich.wav,		0, 0.50, 1,  50, 400	; GTW-83 Lich laser fired&lt;br /&gt;
$Name:	85	hit_1.wav,		0, 0.90, 1, 200, 800	; Laser impact&lt;br /&gt;
$Name:	86	L_Vasmid.wav,		0, 0.50, 1,  50, 400	; Subach-HLV Vasudan laser&lt;br /&gt;
$Name:	87	m_wasp.wav,		0, 0.80, 1,  50, 400	; rockeye missile launch&lt;br /&gt;
$Name:	88	boom_2.wav,		0, 0.80, 1, 500, 1000	; missile impact 1&lt;br /&gt;
$Name:	89	m_mag.wav,		0, 0.80, 1,  50, 400	; mag pulse missile launch&lt;br /&gt;
$Name:	90	m_fury.wav,		0, 0.80, 1,  50, 400	; fury missile launch&lt;br /&gt;
$Name:	91	m_shrike.wav,		0, 0.80, 1,  50, 400	; shrike missile launch&lt;br /&gt;
$Name:	92	m_angel.wav,		0, 0.80, 1,  50, 400	; angel fire missile launch&lt;br /&gt;
$Name:	93	m_cluster.wav,		0, 0.80, 1,  50, 400	; cluster bomb launch&lt;br /&gt;
$Name:	94	m_clusterb.wav,		0, 0.80, 1,  50, 400	; cluster baby bomb launch&lt;br /&gt;
$Name:	95	m_stiletto.wav,		0, 0.80, 1,  50, 400	; stiletto bomb launch&lt;br /&gt;
$Name:	96	m_tsunami.wav,		0, 0.80, 1,  50, 400	; tsunami bomb launch&lt;br /&gt;
$Name:	97	m_harbinger.wav,	0, 0.80, 1,  50, 400	; harbinger bomb launch&lt;br /&gt;
$Name:	98	m_mega.wav,		0, 0.80, 1,  50, 400	; mega wokka launch&lt;br /&gt;
$Name:	99	counter_1.wav,		0, 0.70, 1,  50, 200	; countermeasure 1 launch&lt;br /&gt;
$Name:	100	l_alien1.wav,		0, 0.60, 1,  50, 400	; Shivan light laser (3d sound)&lt;br /&gt;
$Name:	101	clusterboom.wav,	0, 0.80, 1, 750, 2000	; shockwave ignition (3d sound)&lt;br /&gt;
$Name:	102	m_swarm.wav,		0, 0.70, 1,  50, 400	; swarm missile sound (3d sound)&lt;br /&gt;
$Name:	103	l_alien2.wav,		0, 0.60, 1, 100, 400	; Shivan heavy laser (3d sound)&lt;br /&gt;
$Name:	104	capital4.wav,		0, 0.70, 1, 500, 1500	; Vasudan SuperCap engine (3d sound)&lt;br /&gt;
$Name:	105	capital5.wav,		0, 0.70, 1, 500, 1500	; Shivan SuperCap engine (3d sound)&lt;br /&gt;
$Name:	106	capital6.wav,		0, 0.70, 1, 500, 1500	; Terran SuperCap engine (3d sound)&lt;br /&gt;
$Name:	107	l_vaslight.wav,		0, 0.60, 1,  50, 400	; Vasudan light laser fired (3d sound)&lt;br /&gt;
$Name:	108	l_alien3.wav,		0, 0.60, 1,  50, 400	; Shivan heavy laser (3d sound)&lt;br /&gt;
$Name:	109	shockwave.wav,		0, 1.00, 1,  50, 800	; ** shockwave impact (3d sound)&lt;br /&gt;
$Name:	110	Turret_T1.wav,		0, 0.50, 2, 200, 1000	; TERRAN TURRET 1&lt;br /&gt;
$Name:	111	Turret_T2.wav,		0, 0.50, 2, 200, 1000	; TERRAN TURRET 2&lt;br /&gt;
$Name:	112	Turret_V1.wav,		0, 0.50, 2, 200, 1000	; VASUDAN TURRET 1&lt;br /&gt;
$Name:	113	Turret_V2.wav,		0, 0.50, 2, 200, 1000	; VASUDAN TURRET 2&lt;br /&gt;
$Name:	114	Turret_S1.wav,		0, 0.50, 2, 200, 1000	; SHIVAN TURRET 1&lt;br /&gt;
$Name:	115	paintloop.wav,		0, 0.60, 1,  50, 200	; targeting laser loop sound&lt;br /&gt;
$Name:	116	FlakLaunch.wav,		0, 0.60, 1, 250, 1000	; Flak Gun Launch&lt;br /&gt;
$Name:	117	boom_4.wav,		0, 0.80, 1, 400, 800	; Flak Gun Impact&lt;br /&gt;
$Name:	118	m_emp.wav,		0, 0.60, 1,  50, 400	; EMP Missle&lt;br /&gt;
$Name:	119	Escape.wav,		0, 0.60, 1, 200, 600	; Escape Pod Drone&lt;br /&gt;
$Name:	120	Vaporize1.wav,		0, 0.70, 0		; Beam Hit 1&lt;br /&gt;
$Name:	121	beam_loop.wav,		0, 0.70, 2, 1500, 3000	; beam loop&lt;br /&gt;
$Name:	122	beam_up.wav,		0, 0.70, 2, 1500, 3000	; beam power up&lt;br /&gt;
$Name:	123	beam_down.wav,		0, 0.70, 2, 1500, 3000	; beam power down&lt;br /&gt;
$Name:	124	beam_shot1.wav,		0, 0.70, 2, 1500, 2500	; Beam shot 1&lt;br /&gt;
$Name:	125	beam_shot2.wav,		0, 0.70, 2, 1500, 2500	; Beam shot 2&lt;br /&gt;
;Ship Engine Sounds section&lt;br /&gt;
$Name:	126	ship_a1.wav,		0, 0.60, 1, 200, 400	; Terran fighter engine (3d sound)&lt;br /&gt;
$Name:	127	ship_a2.wav,		0, 0.70, 1, 300, 600	; Terran bomber engine (3d sound)&lt;br /&gt;
$Name:	128	ship_a3.wav,		0, 0.80, 1, 400, 800	; Terran cruiser engine (3d sound)&lt;br /&gt;
$Name:	129	ship_b1.wav,		0, 0.70, 1, 200, 400	; Vasudan fighter engine (3d sound)&lt;br /&gt;
$Name:	130	ship_b2.wav,		0, 0.80, 1, 300, 600	; Vasudan bomber engine (3d sound)&lt;br /&gt;
$Name:	131	ship_b3.wav,		0, 0.80, 1, 400, 800	; Vasudan cruiser engine (3d sound)&lt;br /&gt;
$Name:	132	ship_c1.wav,		0, 0.60, 1, 200, 400	; Shivan fighter engine (3d sound)&lt;br /&gt;
$Name:	133	ship_c2.wav,		0, 0.70, 1, 300, 600	; Shivan bomber engine (3d sound)&lt;br /&gt;
$Name:	134	ship_c3.wav,		0, 0.80, 1, 400, 800	; Shivan cruiser engine (3d sound)&lt;br /&gt;
$Name:	135	beacon.wav,		0, 0.60, 1, 300, 600	; Repair ship beacon/engine sound (3d sound)&lt;br /&gt;
$Name:	136	capital1.wav,		0, 0.70, 1, 500, 1500	; Terran capital engine (3d sound)&lt;br /&gt;
$Name:	137	capital2.wav,		0, 0.70, 1, 500, 1500	; Vasudan capital engine (3d sound)&lt;br /&gt;
$Name:	138	capital3.wav,		0, 0.70, 1, 500, 1500	; Shivan capital engine (3d sound)&lt;br /&gt;
; Electrical arc sound fx on the debris pieces&lt;br /&gt;
$Name:	139	Arc_01.wav,		0, 0.30, 2, 200, 500	; ** 0.10 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	140	Arc_02.wav,		0, 0.30, 2, 200, 500	; ** 0.25 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	141	Arc_03.wav,		0, 0.30, 2, 200, 500	; ** 0.50 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	142	Arc_04.wav,		0, 0.30, 2, 200, 500	; ** 0.75 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	143	Arc_05.wav,		0, 0.30, 2, 200, 500	; ** 1.00 second spark sound effect (3d sound)&lt;br /&gt;
; Beam Sounds&lt;br /&gt;
$Name:	144	BT_LTerSlash.wav,	0, 0.70, 2, 1500, 3000	; LTerSlash 	beam loop&lt;br /&gt;
$Name:	145	BT_TerSlash.wav,	0, 0.70, 2, 1500, 3000	; TerSlash	beam loop&lt;br /&gt;
$Name:	146	BT_SGreen.wav,		0, 0.70, 2, 1500, 3000	; SGreen 	beam loop&lt;br /&gt;
$Name:	147	BT_BGreen.wav,		0, 0.70, 2, 1500, 3000	; BGreen	beem loop&lt;br /&gt;
$Name:	148	BT_BFGreen.wav,		0, 0.70, 2, 1500, 3000	; BFGreen	been loop&lt;br /&gt;
$Name:	149	BT_AntiFtr.wav,		0, 0.70, 2, 1500, 3000	; Antifighter 	beam loop&lt;br /&gt;
$Name:	150	BT_up_1.wav,		0, 0.60, 2, 1500, 3000	; 1 sec		warm up&lt;br /&gt;
$Name:	151	BT_up_1.5.wav,		0, 0.60, 2, 1500, 3000	; 1.5 sec 	warm up&lt;br /&gt;
$Name:	152	BT_up_2.5.wav,		0, 0.60, 2, 1500, 3000	; 2.5 sec 	warm up&lt;br /&gt;
$Name:	153	BT_up_3.wav,		0, 0.60, 2, 1500, 3000	; 3 sec 	warm up&lt;br /&gt;
$Name:	154	BT_up_3.5.wav,		0, 0.60, 2, 1500, 3000	; 3.5 sec 	warm up&lt;br /&gt;
$Name:	155	BT_up_5.wav,		0, 0.60, 2, 1500, 3000	; 5 sec 	warm up&lt;br /&gt;
$Name:	156	BT_dwn_1.wav,		0, 0.70, 2, 2000, 3000	; LTerSlash	warm down&lt;br /&gt;
$Name:	157	BT_dwn_2.wav,		0, 0.70, 2, 2000, 3000	; TerSlash	warm down&lt;br /&gt;
$Name:	158	BT_dwn_3.wav,		0, 0.70, 2, 2000, 3000	; SGreen	warm down&lt;br /&gt;
$Name:	159	BT_dwn_4.wav,		0, 0.70, 2, 2000, 3000	; BGreen	warm down&lt;br /&gt;
$Name:	160	BT_dwn_5.wav,		0, 0.70, 2, 2000, 3000	; BFGreen	warm down&lt;br /&gt;
$Name:	161	BT_dwn_6.wav,		0, 0.70, 2, 2000, 3000	; T_AntiFtr	warm down&lt;br /&gt;
$Name:	162	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	163	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	164	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	165	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	166	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	167	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	168	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	169	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	170	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	171	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	172	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	173	SupNova1.wav,		0, 1.00, 0		; SuperNova (distant)&lt;br /&gt;
$Name:	174	SupNova2.wav,		0, 1.00, 0		; SuperNova (shockwave)&lt;br /&gt;
$Name:	175	ship_c4.wav,		0, 0.80, 1, 400, 800	; Shivan large engine (3d sound)&lt;br /&gt;
$Name:	176	ship_c5.wav,		0, 0.80, 1, 400, 1000	; Shivan large engine (3d sound)&lt;br /&gt;
$Name:	177	BS_SRed.wav,		0, 0.70, 2, 1500, 3000	; SRed 		beam loop&lt;br /&gt;
$Name:	178	BS_LRed.wav,		0, 0.70, 2, 1500, 3000	; LRed		beam loop&lt;br /&gt;
$Name:	179	BS_AntiFtr.wav,		0, 0.70, 2, 1500, 3000	; Antifighter	beam loop&lt;br /&gt;
$Name:	180	Thunder_01.wav,		0, 0.70, 0		; Thunder 1 sound in neblua&lt;br /&gt;
$Name:	181	Thunder_02.wav,		0, 0.70, 0		; Thunder 2 sound in neblua&lt;br /&gt;
$Name:	182	BS_up_1.wav,		0, 0.60, 2, 1500, 3000	; 1 sec 	warm up&lt;br /&gt;
$Name:	183	BS_up_1.5.wav,		0, 0.60, 2, 1500, 3000	; 1.5 sec 	warm up&lt;br /&gt;
$Name:	184	BS_up_3.wav,		0, 0.60, 2, 1500, 3000	; 3 sec 	warm up&lt;br /&gt;
$Name:	185	Commnode.wav,		0, 0.60, 1, 200,  500	; Shivan Commnode&lt;br /&gt;
$Name:	186	Pirate.wav,		0, 0.60, 1, 400,  1000	; Volition PirateShip&lt;br /&gt;
$Name:	187	BS_dwn_1.wav,		0, 0.70, 2, 2000, 3000	; SRed 		warm down&lt;br /&gt;
$Name:	188	BS_dwn_2.wav,		0, 0.70, 2, 2000, 3000	; LRed 		warm down&lt;br /&gt;
$Name:	189	BS_dwn_3.wav,		0, 0.70, 2, 2000, 3000	; AntiFtr	warm down&lt;br /&gt;
$Name:	190	Inst1.wav,		0, 0.80, 1, 500, 2000	; Instellation 1&lt;br /&gt;
$Name:	191	Inst2.wav,		0, 0.80, 1, 500, 2000	; Instellation 2&lt;br /&gt;
&lt;br /&gt;
;SCP ADDED SOUNDS START HERE&lt;br /&gt;
$Name:  200     m_load.wav,		0, 0.60, 1, 10, 50	; Ballistic Weapon Rearm Start&lt;br /&gt;
$Name:	201	m_lock.wav,		0, 0.50, 1, 10, 50	; Ballistic Weapon Rearm&lt;br /&gt;
;&lt;br /&gt;
#Game Sounds End&lt;br /&gt;
;&lt;br /&gt;
#Interface Sounds Start&lt;br /&gt;
$Name:	0	user_c.wav,		0, 0.70, 0		; mouse click&lt;br /&gt;
$Name:	1	empty,			0, 0.70, 0		; pick up a ship icon (not used)&lt;br /&gt;
$Name:	2	load01.wav,		0, 0.60, 0		; drop a ship icon on a wing slot&lt;br /&gt;
$Name:	3	unload01.wav,		0, 0.60, 0		; drop a ship icon back to the list&lt;br /&gt;
$Name:	4	beep_4.wav,		0, 0.70, 0		; press briefing, ship selection or weapons bar (top-left)&lt;br /&gt;
$Name:	5	user_c.wav,		0, 0.70, 0		; Switching to a new screen, but not commit&lt;br /&gt;
$Name:	6	beep_4.wav,		0, 0.70, 0		; help pressed&lt;br /&gt;
$Name:	7	commit.wav,		0, 0.60, 0		; commit pressed&lt;br /&gt;
$Name:	8	user_c.wav,		0, 0.70, 0		; prev/next pressed&lt;br /&gt;
$Name:	9	user_c.wav,		0, 0.70, 0		; scroll pressed (and scroll)&lt;br /&gt;
$Name:	10	fail.wav,		0, 0.70, 0		; general failure sound for any event&lt;br /&gt;
$Name:	11	shipview.wav,		0, 0.50, 0		; ship animation starts (ie text and ship first appear)&lt;br /&gt;
$Name:	12	main_amb.wav,		0, 0.60, 0		; ambient sound for the Terran main hall (looping)&lt;br /&gt;
$Name:	13	vas_amb.wav,		0, 0.60, 0		; ambient sound for the Vasudan main hall (looping)&lt;br /&gt;
$Name:	14	user_a.wav,		0, 0.70, 0		; brief stage change&lt;br /&gt;
$Name:	15	user_i.wav,		0, 0.70, 0		; brief stage change fail&lt;br /&gt;
$Name:	16	beep_3.wav,		0, 0.70, 0		; selet brief icon&lt;br /&gt;
$Name:	17	user_o.wav,		0, 0.50, 0		; user_over (mouse over a control)&lt;br /&gt;
$Name:	18	user_c.wav,		0, 0.70, 0		; user_click (mouse selects a control)&lt;br /&gt;
$Name:	19	reset.wav,		0, 0.70, 0		; reset (or similar button) pressed&lt;br /&gt;
$Name:	20	textdraw.wav,		0, 0.60, 0		; briefing text wipe&lt;br /&gt;
$Name:	21	Lift_Mix.wav,		0, 0.50, 0		; main hall - elevator&lt;br /&gt;
$Name:	22	weapview.wav,		0, 0.60, 0		; weapon animation starts&lt;br /&gt;
$Name:	23	dooropen.wav,		0, 0.50, 0		; door in main hall opens&lt;br /&gt;
$Name:	24	doorclose.wav,		0, 0.50, 0		; door in main hall closes&lt;br /&gt;
$Name:	25	itemdraw.wav,		0, 0.50, 0		; glow in main hall opens&lt;br /&gt;
$Name:	26	Crane_1.wav,		0, 0.50, 0		; main hall - crane 1&lt;br /&gt;
$Name:	27	sub_amb.wav,		0, 0.60, 0		; ambient sound for menus off the main hall (looping)&lt;br /&gt;
$Name:	28	user_c.wav,		0, 0.70, 0		; popup dialog box appeared&lt;br /&gt;
$Name:	29	user_c.wav,		0, 0.70, 0		; popup dialog box goes away&lt;br /&gt;
$Name:	30	1_yes.wav,		0, 1.00, 0		; voice clip played when volume slider changes&lt;br /&gt;
$Name:	31	Crane_2.wav,		0, 0.50, 0		; main hall - crane 2&lt;br /&gt;
$Name:	32	Option1.wav,		0, 0.70, 0		; main hall options - mouse on &lt;br /&gt;
$Name:	33	Option2.wav,		0, 0.70, 0		; main hall options - mouse off&lt;br /&gt;
$Name:	34	Techroom1.wav,		0, 0.70, 0		; main hall tech room - mouse on&lt;br /&gt;
$Name:	35	Techroom2.wav,		0, 0.70, 0		; main hall tech room - mouse off&lt;br /&gt;
$Name:	36	Exitopen.wav,		0, 0.60, 0		; main hall exit open&lt;br /&gt;
$Name:	37	Exitclose.wav,		0, 0.60, 0		; main hall exit close&lt;br /&gt;
$Name:	38	pa_1.wav,		0, 0.50, 0		; main hall random intercom 1&lt;br /&gt;
$Name:	39	pa_2.wav,		0, 0.50, 0		; main hall random intercom 2&lt;br /&gt;
$Name:	40	pa_3.wav,		0, 0.50, 0		; main hall random intercom 3&lt;br /&gt;
$Name:	41	highlight.wav,		0, 0.40, 0		; spinning highlight in briefing&lt;br /&gt;
$Name:	42	noiz.wav,		0, 0.40, 0		; static in a briefing stage cut&lt;br /&gt;
$Name:	43	Camp_on.wav,		0, 0.70, 0		; main hall campaign - mouse on&lt;br /&gt;
$Name:	44	Camp_off.wav,		0, 0.70, 0		; main hall campaign - mouse off&lt;br /&gt;
$Name:	45	V_Hatch_Open.wav,	0, 0.70, 0		; vasudan hall - exit open  &lt;br /&gt;
$Name:	46	V_Hatch_Close.wav,	0, 0.70, 0		; vasudan hall - exit close&lt;br /&gt;
$Name:	47	V_Roll_Open.wav,	0, 0.80, 0		; vasudan hall - hatch open &lt;br /&gt;
$Name:	48	V_Roll_Close.wav,	0, 0.80, 0		; vasudan hall - hatch close&lt;br /&gt;
$Name:	49	V_Lift_Up.wav,		0, 0.70, 0		; vasudan hall - lift up&lt;br /&gt;
$Name:	50	V_Lift_Down.wav,	0, 0.70, 0		; vasudan hall - lift down&lt;br /&gt;
$Name:	51	V_Lite_On.wav,		0, 0.70, 0		; vasudan hall - glow on&lt;br /&gt;
$Name:	52	V_Lite_Off.wav,		0, 0.70, 0		; vasudan hall - glow off&lt;br /&gt;
$Name:	53	Skiff.wav,		0, 0.70, 0		; vasudan hall - skiff loop&lt;br /&gt;
$Name:	54	V_Map_On.wav,		0, 0.70, 0		; vasudan hall - screen on&lt;br /&gt;
$Name:	55	V_Map_Off.wav,		0, 0.70, 0		; vasudan hall - screen off&lt;br /&gt;
$Name:	56	V_Head_1.wav,		0, 0.70, 0		; vasudan hall - vasudan greeting&lt;br /&gt;
$Name:	57	V_Head_2.wav,		0, 0.70, 0		; vasudan hall - vasudan bye&lt;br /&gt;
$Name:	58	V_Pa_01.wav,		0, 0.70, 0		; vasudan hall - vasudan pa 1&lt;br /&gt;
$Name:	59	V_Pa_02.wav,		0, 0.70, 0		; vasudan hall - vasudan pa 2&lt;br /&gt;
$Name:	60	V_Pa_03.wav,		0, 0.70, 0		; vasudan hall - vasudan pa 3&lt;br /&gt;
$Name:	61	bup.wav,		0, 0.90, 0		; bup bup bup-bup bup bup&lt;br /&gt;
$Name:	62	thankyou.wav,		0, 0.90, 0		; thankyou&lt;br /&gt;
$Name:	63	V_Exit_Open.wav,	0, 0.70, 0		; vasudan hall - exit open&lt;br /&gt;
$Name:	64	V_Exit_Close.wav,	0, 0.70, 0		; vasudan hall - exit close&lt;br /&gt;
;&lt;br /&gt;
#Interface Sounds End&lt;br /&gt;
;&lt;br /&gt;
; Each species can have up to 4 different flyby sounds&lt;br /&gt;
; NOTE : the parse code expects to see exactly 2 sounds for terran, then 2 for vasudan, then 2 for shivan&lt;br /&gt;
;        the first sound for each species is the fighter/small flyby sound. the second is the bomber/big flyby sound&lt;br /&gt;
#Flyby Sounds Start&lt;br /&gt;
&lt;br /&gt;
$Terran:	0	T_flyby1.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
$Terran:	1	T_flyby2.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Vasudan:	0	V_flyby1.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
$Vasudan:	1	V_flyby2.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Shivan:	0	S_flyby1.wav,	0, 0.75, 1, 200, 400	; * SHIVAN ship1 flyby player sound (3d sound)&lt;br /&gt;
$Shivan:	1	S_flyby2.wav,	0, 0.75, 1, 200, 400	; * SHIVAN ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
#Flyby Sounds End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Sounds.tbl&amp;diff=44578</id>
		<title>Sounds.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Sounds.tbl&amp;diff=44578"/>
		<updated>2015-05-08T19:24:40Z</updated>

		<summary type="html">&lt;p&gt;Jg18: clarification on SCp syntax for game sounds&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TableVersion| 77ee6f1 (Git commit)}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;sounds.tbl&#039;&#039;&#039; is a file for defining the various sounds played ingame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This table is one of the [[Modular Tables]] and can be extended with xxx-snd.tbm&lt;br /&gt;
&lt;br /&gt;
[[Tables|List of Tables]]&lt;br /&gt;
&lt;br /&gt;
==Format==&lt;br /&gt;
*Table file consists of several sections&lt;br /&gt;
*First section defines the sound for the actual game play. It begins at &#039;&#039;&#039;#Game Sounds Start&#039;&#039;&#039; and ends at&#039;&#039;&#039;#Game Sounds End&#039;&#039;&#039;&lt;br /&gt;
*Second section defines the interface sounds. It starts at &#039;&#039;&#039;#Interface Sounds Start&#039;&#039;&#039; and ends at &#039;&#039;&#039;#Interface Sounds End&#039;&#039;&#039;&lt;br /&gt;
*Third section defines the flyby sounds for different species. It begins at &#039;&#039;&#039;#Flyby Sounds Start&#039;&#039;&#039; and ends at &#039;&#039;&#039;#Flyby Sounds End&#039;&#039;&#039;&lt;br /&gt;
*This table has two possible syntax&#039;s, the first being the SCP Syntax and the second being the Retail Syntax&lt;br /&gt;
**The SCP Syntax is newer, easier to read, and likely preferred for modular tables and extendability&lt;br /&gt;
**The Retail Syntax is the syntax used by the retail tables which was kept in place to keep retail compatibility&lt;br /&gt;
*Most of the sounds are hardcoded in the engine (that is, the engine expects sound 33 to be the missile rearm sound, as an example). Modders should follow the retail table layout, and not assign sound numbers smaller than 250 to their custom sounds. This avoids index collisions.&lt;br /&gt;
&lt;br /&gt;
==SCP Syntax==&lt;br /&gt;
{{Note|Many retail sound names are hardcoded to a specific type of sound, so removing entries is not recommended. However adding new ones or altering existing ones is possible.  See the [[Hardcoded sounds|hardcoded sounds]] for a list of which sounds have hardcoded names.}}&lt;br /&gt;
&lt;br /&gt;
In most entries, the name of the file (&#039;&#039;&#039;Second&#039;&#039;&#039; value) can be replaced with &#039;empty&#039; if the particular sound index is not in use.&lt;br /&gt;
&lt;br /&gt;
===#Game Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Cockpit sounds are in general non-3D sounds&lt;br /&gt;
*All the other in-flight sounds are, in general, 3D sounds&lt;br /&gt;
*Non-3D sounds do not require the &#039;&#039;&#039;+3D Sound&#039;&#039;&#039; entries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$Name: 6&lt;br /&gt;
    +Filename: breakup&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.60&lt;br /&gt;
    +3D Sound:&lt;br /&gt;
        +Attenuation start: 100&lt;br /&gt;
        +Attenuation end: 800&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*Specifies the sound handle which FSO will use to identify the sound from other tables&lt;br /&gt;
*If +nocreate is to be used, it must come after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
{{Warning|&lt;br /&gt;
The name may not contain any whitespace (space or tab characters) or the old parsing code will be used.}}&lt;br /&gt;
&lt;br /&gt;
====+nocreate====&lt;br /&gt;
*Allows editing of the sound without creating a new sound handle&lt;br /&gt;
*Must be placed after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Example&lt;br /&gt;
**&amp;lt;pre&amp;gt;$Name: +nocreate SoundName&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====+Filename:====&lt;br /&gt;
*The name of the actual sound file to play&lt;br /&gt;
*Always required, even if +nocreate is used.&lt;br /&gt;
*To specify no sound file, use &amp;quot;empty&amp;quot; (without the quotes)&lt;br /&gt;
*If +nocreate is used and you don&#039;t want to change the original filename, then use &amp;lt;same&amp;gt; (including the &amp;lt;&amp;gt;)&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Preload:====&lt;br /&gt;
*Specifies whether FSO should always preload the sound before the mission or not&lt;br /&gt;
*Optional if +nocreate is used, required otherwise&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Boolean&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Volume:====&lt;br /&gt;
*Specifies the volume the sound should be played at as a percentage&lt;br /&gt;
*Optional if +nocreate is used, required otherwise&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Float&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+3D Sound:====&lt;br /&gt;
*Sets up table syntax for specifying 3D sound options&lt;br /&gt;
*If present the sound will be loaded as a 3D sound&lt;br /&gt;
*No argument should be specified&lt;br /&gt;
*Must be accompanied by &#039;&#039;&#039;+Attenuation Start:&#039;&#039;&#039; and &#039;&#039;&#039;+Attenuation End:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation Start:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it begins to attenuate&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation End:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it is inaudible&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Game Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Interface Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Interface sounds are not 3D sounds. You may specify &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039; properties, but they will be ignored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$Name: CraneSound1&lt;br /&gt;
    +Filename: Crane_1&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*Specifies the sound handle which FSO will use to identify the sound from other tables&lt;br /&gt;
*If +nocreate is to be used, it must come after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
{{Warning|&lt;br /&gt;
The name may not contain any whitespace (space or tab characters) or the old parsing code will be used.}}&lt;br /&gt;
&lt;br /&gt;
====+nocreate====&lt;br /&gt;
*Allows editing of the sound without creating a new sound handle&lt;br /&gt;
*Must be placed after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Example&lt;br /&gt;
**&amp;lt;pre&amp;gt;$Name: +nocreate SoundName&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====+Filename:====&lt;br /&gt;
*The name of the actual sound file to play&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Preload:====&lt;br /&gt;
*Specifies whether FSO should always preload the sound before the mission or not&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Boolean&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Volume:====&lt;br /&gt;
*Specifies the volume the sound should be played at as a percentage&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Float&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Interface Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Flyby Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Each species has two flyby sounds. One for the fighters and one for the bombers.&lt;br /&gt;
*Flyby sounds are all 3D sounds.&lt;br /&gt;
*Each flyby sound is defined on a line that begins with the species name (&#039;&#039;&#039;String&#039;&#039;&#039;, species name, eg. &#039;&#039;&#039;$Terran:&#039;&#039;&#039;).&lt;br /&gt;
*&#039;&#039;&#039;THE FLYBY SECTION CANNOT USE +nocreate&#039;&#039;&#039;&lt;br /&gt;
If you want to modify a flyby sound entry of a species in a modular table then you will need to have entries for both types.&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;&#039;$SPECIES:&#039;&#039;&#039; in the place of &#039;&#039;&#039;$Name:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example Terran Section&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$Terran: 0&lt;br /&gt;
    +Filename: T_flyby1&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.75&lt;br /&gt;
    +3D Sound:&lt;br /&gt;
        +Attenuation start: 200&lt;br /&gt;
        +Attenuation end: 400&lt;br /&gt;
&lt;br /&gt;
$Terran: 1&lt;br /&gt;
    +Filename: T_flyby2&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.75&lt;br /&gt;
    +3D Sound:&lt;br /&gt;
        +Attenuation start: 200&lt;br /&gt;
        +Attenuation end: 400&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*&#039;&#039;&#039;$Name&#039;&#039;&#039; must be replaced with &#039;&#039;&#039;$SPECIES&#039;&#039;&#039; as from the [[Species_defs.tbl]]&lt;br /&gt;
*Specifies the sound handle which FSO will use to identify the sound from other tables&lt;br /&gt;
*In this case it will usually be a &#039;&#039;&#039;1&#039;&#039;&#039; or a &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
{{Warning|&lt;br /&gt;
The name may not contain any whitespace (space or tab characters) or the old parsing code will be used.}}&lt;br /&gt;
&lt;br /&gt;
====+Filename:====&lt;br /&gt;
*The name of the actual sound file to play&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Preload:====&lt;br /&gt;
*Specifies whether FSO should always preload the sound before the mission or not&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Boolean&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Volume:====&lt;br /&gt;
*Specifies the volume the sound should be played at as a percentage&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Float&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+3D Sound:====&lt;br /&gt;
*Sets up table syntax for specifying 3D sound options&lt;br /&gt;
*If present the sound will be loaded as a 3D sound&lt;br /&gt;
*No argument should be specified&lt;br /&gt;
*Must be accompanied by &#039;&#039;&#039;+Attenuation Start:&#039;&#039;&#039; and &#039;&#039;&#039;+Attenuation End:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation Start:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it begins to attenuate&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation End:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it is inaudible&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Flyby Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Retail Syntax==&lt;br /&gt;
{{Note|Many retail sound names are hardcoded to a specific type of sound, so removing entries is not recommended. However adding new ones or altering existing ones is possible.  See the [[Hardcoded sounds|hardcoded sounds]] for a list of which sounds have hardcoded names.}}&lt;br /&gt;
&lt;br /&gt;
In most entries, the name of the file (&#039;&#039;&#039;Second&#039;&#039;&#039; value) can be replaced with &#039;empty&#039; if the particular sound index is not in use.&lt;br /&gt;
&lt;br /&gt;
===#Game Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Cockpit sounds are in general non-3D sounds that ought to be of type &#039;0&#039;, however all the other in-flight sounds are in general 3D sounds and ought to of type &#039;1&#039; (or type &#039;2&#039;).&lt;br /&gt;
*Type 0 sounds do not require the &#039;&#039;&#039;Sixth&#039;&#039;&#039; and &#039;&#039;&#039;Seventh&#039;&#039;&#039; entries.&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;$Name: 6 breakup.wav, 0, 0.60, 1, 100, 800&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;$Name:&#039;&#039; and has seven entries separated by commas except for the first and second entries.&lt;br /&gt;
&lt;br /&gt;
**&#039;&#039;&#039;First&#039;&#039;&#039; value is the index number of the sound (&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
**&#039;&#039;&#039;Second&#039;&#039;&#039; value is the name of actual sound file (&#039;&#039;&#039;String&#039;&#039;&#039;, filename).&lt;br /&gt;
**&#039;&#039;&#039;Third&#039;&#039;&#039; value sets the file to always preloaded before the mission (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0 or 1)&lt;br /&gt;
**&#039;&#039;&#039;Fourth&#039;&#039;&#039; value defines the playing volume of the sound in percentages (&#039;&#039;&#039;Float&#039;&#039;&#039;, from 0 to 1)&lt;br /&gt;
**&#039;&#039;&#039;Fifth&#039;&#039;&#039; value sets the sound type to either standard sound (type &#039;0&#039;), 3D stereo sound (type &#039;1&#039;), or Aureal A3D (type &#039;2&#039;). This defaults to 3D stereo if it is not available (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0, 1 or 2)&lt;br /&gt;
***&#039;&#039;&#039;Sixth&#039;&#039;&#039; value defines the distance from the origin of 3D sound where it begins to attenuate and is not used with normal non-3D sounds (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
***&#039;&#039;&#039;Seventh&#039;&#039;&#039; value sets the distance from the origin of the 3D sound where it is inaudible and is not used with normal non-3D sounds (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Game Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Interface Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Interface sounds are not 3D sounds. Use type &#039;0&#039; sounds. The &#039;&#039;&#039;Sixth&#039;&#039;&#039; and &#039;&#039;&#039;Seventh&#039;&#039;&#039; entries can be left out of sounds in this section.&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;$Name: 26 Crane_1.wav, 0, 0.50, 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;$Name:&#039;&#039; and has five entries separated by commas except for the first and second entries.&lt;br /&gt;
&lt;br /&gt;
**&#039;&#039;&#039;First&#039;&#039;&#039; value is the index number of the sound (&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
**&#039;&#039;&#039;Second&#039;&#039;&#039; value is the name of actual sound file (&#039;&#039;&#039;String&#039;&#039;&#039;, filename).&lt;br /&gt;
**&#039;&#039;&#039;Third&#039;&#039;&#039; value sets the file to always preloaded before the mission (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0 or 1)&lt;br /&gt;
**&#039;&#039;&#039;Fourth&#039;&#039;&#039; value defines the playing volume of the sound in percentages (&#039;&#039;&#039;Float&#039;&#039;&#039;, from 0 to 1)&lt;br /&gt;
**&#039;&#039;&#039;Fifth&#039;&#039;&#039; value sets the sound type to either standard sound (type &#039;0&#039;), 3D stereo sound (type &#039;1&#039;), or Aureal A3D (type &#039;2&#039;). This defaults to 3D stereo if it is not available (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0, 1 or 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Interface Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Flyby Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Each species has two flyby sounds. One for the fighters and one for the bombers.&lt;br /&gt;
*Flyby sounds are all 3D sounds of type &#039;1&#039; for the &#039;&#039;&#039;Fifth&#039;&#039;&#039; value.&lt;br /&gt;
*Each flyby sound is defined on a single line that begins with the species name (&#039;&#039;&#039;String&#039;&#039;&#039;, species name, eg. &#039;&#039;&#039;$Terran:&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Retail flyby section&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Flyby Sounds Start&lt;br /&gt;
&lt;br /&gt;
$Terran:	0	T_flyby1.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
$Terran:	1	T_flyby2.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Vasudan:	0	V_flyby1.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
$Vasudan:	1	V_flyby2.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Shivan:	0	S_flyby1.wav,	0, 0.75, 1, 200, 400	; * Shivan ship1 flyby player sound (3d sound)&lt;br /&gt;
$Shivan:	1	S_flyby2.wav,	0, 0.75, 1, 200, 400	; * Shivan ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
#Flyby Sounds End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;$SPECIES:&#039;&#039; and has seven entries separated by commas except for the first and second entries.&lt;br /&gt;
&lt;br /&gt;
**&#039;&#039;&#039;First&#039;&#039;&#039; value is the label of the flyby sound, usually 0 for the first (small-ship) entry and 1 for the second (large-ship)entry. (&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
**&#039;&#039;&#039;Second&#039;&#039;&#039; value is the name of actual sound file (&#039;&#039;&#039;String&#039;&#039;&#039;, filename).&lt;br /&gt;
**&#039;&#039;&#039;Third&#039;&#039;&#039; value sets the file to always preloaded before the mission (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0 or 1)&lt;br /&gt;
**&#039;&#039;&#039;Fourth&#039;&#039;&#039; value defines the playing volume of the sound in percentages (&#039;&#039;&#039;Float&#039;&#039;&#039;, from 0 to 1)&lt;br /&gt;
**&#039;&#039;&#039;Fifth&#039;&#039;&#039; value sets the sound type and should be set to 3D stereo sound (type &#039;1&#039;) (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0, 1 or 2)&lt;br /&gt;
***&#039;&#039;&#039;Sixth&#039;&#039;&#039; value defines the distance from the origin of 3D sound where it begins to attenuate (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
***&#039;&#039;&#039;Seventh&#039;&#039;&#039; value sets the distance from the origin of the 3D sound where it is inaudible (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Flyby Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sample==&lt;br /&gt;
*Retail FreeSpace 2 table&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;  sounds.tbl *&lt;br /&gt;
;&lt;br /&gt;
;  file to specify general game sounds&lt;br /&gt;
;&lt;br /&gt;
;                     I M P O R T A N T&lt;br /&gt;
;  **********************************************************&lt;br /&gt;
;  *                                                        *&lt;br /&gt;
;  ====&amp;gt;  DO NOT MODIFY THE ORDER OF THE LISTED SOUNDS &amp;lt;====*&lt;br /&gt;
;  *                                                        *&lt;br /&gt;
;  **********************************************************&lt;br /&gt;
;                     I M P O R T A N T&lt;br /&gt;
;&lt;br /&gt;
;  If a sound entry appears in this file, there is a hook into the game to&lt;br /&gt;
;  play the sound.  This file can only be modified to change *existing* sounds.&lt;br /&gt;
;  Talk to a programmer if you want to add brand new sounds.  Adding a line to&lt;br /&gt;
;  this file will not make your sound appear in the game, it will more than&lt;br /&gt;
;  likely break something.&lt;br /&gt;
;&lt;br /&gt;
; 	If you don&#039;t want the sound to play, put none.wav as the sound to play.&lt;br /&gt;
;&lt;br /&gt;
;	The fields for a sound entry are:&lt;br /&gt;
;	1) unqiue sound signature&lt;br /&gt;
;	2) filename of the sound&lt;br /&gt;
;	3) flag to indicate sound should always be pre-loaded before a mission&lt;br /&gt;
;	4) the default volume (from 0.0 -&amp;gt; 1.0)&lt;br /&gt;
;	5) 0 - not 3d  1 - stereo 3D  2 - Aureal A3D (if available), otherwise use stereo 3D&lt;br /&gt;
;	6) distance at which sound starts to attenuate (for 3d sounds only)&lt;br /&gt;
;	7) distance at which sound is inaudible (for 3d sounds only)&lt;br /&gt;
;&lt;br /&gt;
#Game Sounds Start&lt;br /&gt;
; Misc sounds section						** = Aureal 3d support | * = FS = 3D support&lt;br /&gt;
$Name:	0	trk-loop.wav,		0, 0.40, 0		; Missle tracking to acquire a lock (looped)&lt;br /&gt;
$Name:	1	lock.wav,		0, 0.40, 0		; Missle lock (non-looping)&lt;br /&gt;
$Name:	2	cycle.wav,		0, 0.60, 0		; cycle primary weapon&lt;br /&gt;
$Name:	3	cycle.wav,		0, 0.60, 0		; cycle secondary weapon&lt;br /&gt;
$Name:	4	ship_p.wav,		0, 0.30, 0		; engine sound (as heard in cockpit)&lt;br /&gt;
$Name:	5	reveal.wav,		0, 0.40, 0		; cargo revealed &lt;br /&gt;
$Name:	6	breakup.wav,		0, 0.60, 1, 100, 800	; ship death roll (3d sound)&lt;br /&gt;
$Name:	7	boom_3.wav,		0, 0.90, 2, 600, 1200	; * ship explosion 1 (3d sound)&lt;br /&gt;
$Name:	8	beep_2.wav,		0, 0.40, 0		; target acquried&lt;br /&gt;
$Name:	9	switch_1.wav,		0, 0.50, 0		; energy level change success&lt;br /&gt;
$Name:	10	beep_5.wav,		0, 0.50, 0		; energy level change fail&lt;br /&gt;
$Name:	11	switch_2.wav,		0, 0.50, 0		; energy transfer success&lt;br /&gt;
$Name:	12	beep_5.wav,		0, 0.50, 0		; energy transfer faile&lt;br /&gt;
$Name:	13	thr_full.wav,		0, 0.40, 0		; set full throttle&lt;br /&gt;
$Name:	14	thr_off.wav,		0, 0.40, 0		; set zero throttle&lt;br /&gt;
$Name:	15	thr_up.wav,		0, 0.40, 0		; set 1/3 or 2/3 throttle (up)&lt;br /&gt;
$Name:	16	thr_dwn.wav,		0, 0.40, 0		; set 1/3 or 2/3 throttle (down)&lt;br /&gt;
$Name:	17	approach.wav,		0, 0.60, 1, 10, 800	; dock approach retros (3d sound)&lt;br /&gt;
$Name:	18	attach.wav,		0, 0.60, 1, 10, 800	; dock attach (3d sound)&lt;br /&gt;
$Name:	19	detach.wav,		0, 0.60, 1, 10, 800	; dock detach (3d sound)&lt;br /&gt;
$Name:	20	depart.wav,		0, 0.60, 1, 10, 800	; dock depart retros (3d sound)&lt;br /&gt;
$Name:	21	aburn_1.wav,		0, 0.70, 0		; afterburner engage (3d sound)&lt;br /&gt;
$Name:	22	aburn_2.wav,		0, 0.90, 0		; afterburner burn sound (looped)&lt;br /&gt;
$Name:	23	vaporize2.wav,		0, 0.90, 0		; Destroyed by a beam (vaporized)&lt;br /&gt;
$Name:	24	aburn_1f.wav,		0, 0.50, 0		; afterburner fail (no fuel when aburn pressed)&lt;br /&gt;
$Name:	25	alert_2.wav,		0, 0.40, 0		; heat-seeker launch warning&lt;br /&gt;
$Name:	26	m_fail.wav,		0, 0.60, 0		; tried to fire a missle when none are left&lt;br /&gt;
$Name:	27	l_fail.wav,		0, 0.60, 0		; tried to fire lasers when not enough energy left&lt;br /&gt;
$Name:	28	fail.wav,		0, 0.50, 0		; target fail sound (i.e. press targeting key, but nothing happens)&lt;br /&gt;
$Name:	29	beep_1.wav,		0, 0.50, 0		; squadmate message menu appears&lt;br /&gt;
$Name:	30	beep_1.wav,		0, 0.50, 0		; squadmate message menu disappears&lt;br /&gt;
$Name:	31	debris.wav,		0, 0.40, 2, 100, 300	; ** debris sound (persistant, looping) (3d sound)&lt;br /&gt;
$Name:	32	subhit.wav,		0, 0.60, 0		; subsystem gets destroyed on player ship&lt;br /&gt;
$Name:	33	m_load.wav,		0, 0.60, 1, 10, 50	; missle start load (during rearm/repair) (3d sound)&lt;br /&gt;
$Name:	34	m_lock.wav,		0, 0.50, 1, 10, 50	; missle load (during rearm/repair) (3d sound)&lt;br /&gt;
$Name:	35	repair.wav,		0, 0.50, 0		; ship is being repaired (during rearm/repair) (looped)&lt;br /&gt;
$Name:	36	l_hit.wav,		0, 0.90, 0, 30, 100	; * player ship is hit by laser fire (3d sound)&lt;br /&gt;
$Name:	37	m_hit.wav,		0, 0.90, 0, 30, 100	; * player ship is hit by missile (3d sound)&lt;br /&gt;
$Name:	38	cycle.wav,		0, 0.80, 0		; countermeasure cycle&lt;br /&gt;
$Name:	39	s_hit_4.wav,		0, 0.60, 1, 200, 600	; * shield hit (3d sound)&lt;br /&gt;
$Name:	40	s_hit_2.wav,		0, 0.80, 1, 10, 100	; * player shield is hit (3d sound)&lt;br /&gt;
$Name:	41	select.wav,		0, 0.60, 0		; mouse click&lt;br /&gt;
$Name:	42	alert_3.wav,		0, 0.60, 0		; aspect launch warning&lt;br /&gt;
$Name:	43	beep_4.wav,		0, 0.60, 0		; shield quadrant transfer successful&lt;br /&gt;
$Name:	44	wash.wav,		0, 0.80, 1, 200, 400	; Engine wash looping sound&lt;br /&gt;
$Name:	45	warp_1.wav,		0, 0.60, 2, 750, 1500	; ** warp hole opening up for arriving (3d sound)&lt;br /&gt;
$Name:	46	warp_1.wav,		0, 0.60, 2, 750, 1500	; ** warp hole opening up for departing (3d sound)&lt;br /&gt;
$Name:	47	aburn_1f.wav,		0, 0.50, 0		; player warp has failed&lt;br /&gt;
$Name:	48	static.wav,		0, 0.60, 0		; hud gauge static&lt;br /&gt;
$Name:	49	boom_1.wav,		0, 0.90, 1, 600, 1200	; * ship explosion 2 (3d sound)&lt;br /&gt;
$Name:	50	rev1.wav,		0, 0.70, 0		; ship is warping out in 3rd person&lt;br /&gt;
$Name:	51	s_hit_0.wav,		0, 0.70, 1, 100, 200	; * heavy ship-ship collide sound (3d sound)&lt;br /&gt;
$Name:	52	collide.wav,		0, 0.70, 1, 100, 200	; * light ship-ship collide sound (3d sound)&lt;br /&gt;
$Name:	53	s_hit_1.wav,		0, 0.70, 1, 100, 200	; * shield ship-ship collide overlay sound (3d sound)&lt;br /&gt;
$Name:	54	alert_1.wav,		0, 0.50, 0		; missile threat indicator flashes&lt;br /&gt;
$Name:	55	proximity1.wav,		0, 0.70, 0		; proximity warning (heat seeker)&lt;br /&gt;
$Name:	56	proximity2.wav,		0, 0.70, 0		; proximity warning (aspect)&lt;br /&gt;
$Name:	57	directive.wav,		0, 0.70, 0		; directive complete&lt;br /&gt;
$Name:	58	subhit2.wav,		0, 0.90, 1, 250,  800	; * other ship subsystem destroyed (3d sound)&lt;br /&gt;
$Name:	59	atomic.wav,		0, 0.90, 1, 2000, 4000	; * captial ship explosion (3d sound)&lt;br /&gt;
$Name:	60	subhit2.wav,		0, 0.90, 1, 250,  1500	; * captial ship subsystem destroyed (3d sound)&lt;br /&gt;
$Name:	61	warp2.wav,		0, 1.00, 1, 1500, 2000	; [obsolete] large ship warps out (looping 3d sound)&lt;br /&gt;
$Name:	62	ast_lghit.wav,		0, 0.80, 1, 750, 1500	; ** large asteroid blows up (3d sound)&lt;br /&gt;
$Name:	63	ast_smhit.wav,		0, 0.80, 1, 500, 1000	; ** small asteroid blows up (3d sound)&lt;br /&gt;
$Name:	64	cue_voice.wav,		0, 0.90, 0		; sound to indicate voice is about to start&lt;br /&gt;
$Name:	65	end_voice.wav,		0, 0.90, 0		; sound to indicate voice has ended&lt;br /&gt;
$Name:	66	scan.wav,		0, 0.50, 0		; cargo scanning (looping)&lt;br /&gt;
$Name:	67	l_flyby.wav,		0, 0.80, 1, 50, 250	; * weapon flyby sound&lt;br /&gt;
$Name:	68	asteroid.wav,		0, 0.50, 1, 200, 700	; [obsolete] asteroid sound (persistant, looping) (3d sound)&lt;br /&gt;
$Name:	69	warp_open.wav,		0, 1.00, 2, 2000, 4000	; capital warp hole opening (3d sound)&lt;br /&gt;
$Name:	70	warp_close.wav,		0, 1.00, 2, 2000, 4000	; capital warp hole closing (3d sound)&lt;br /&gt;
$Name:	71	rumble.wav,		0, 0.70, 1, 600, 1000	; LARGE engine ambient&lt;br /&gt;
$Name:	72	subspace_left.wav,	0, 0.30, 0		; subspace ambient sound (left channel) (looping)&lt;br /&gt;
$Name:	73	subspace_right.wav,	0, 0.30, 0		; subspace ambient sound (right channel) (looping)&lt;br /&gt;
$Name:	74	Evaded.wav,		0, 0.70, 0		; &amp;quot;evaded&amp;quot; HUD popup&lt;br /&gt;
$Name:	75	rumble.wav,		0, 0.70, 1, 600, 1000	; HUGE engine ambient&lt;br /&gt;
;&lt;br /&gt;
; Weapons section&lt;br /&gt;
;&lt;br /&gt;
$Name:	76	L_Sidearm.wav,		0, 0.50, 1,  50, 400	; SD-4 Sidearm laser fired&lt;br /&gt;
$Name:	77	L_Scalpel.wav,		0, 0.50, 1,  50, 400	; DR-2 Scalpel fired&lt;br /&gt;
$Name:	78	L_Flail2.wav,		0, 0.50, 1,  50, 400	; Flail II fired&lt;br /&gt;
$Name:	79	L_Prom_R.wav,		0, 0.50, 1,  50, 400	; Prometheus R laser fired&lt;br /&gt;
$Name:	80	L_Prom_S.wav,		0, 0.50, 1,  50, 400	; Prometheus S laser fired&lt;br /&gt;
$Name:	81	L_Newton.wav,		0, 0.50, 1,  50, 400	; GTW-66 Newton Cannon fired&lt;br /&gt;
$Name:	82	L_Kayser.wav,		0, 0.55, 1,  50, 400	; UD-8 Kayser Laser fired&lt;br /&gt;
$Name:	83	L_Circle.wav,		0, 0.50, 1,  50, 400	; GTW-19 Circe laser fired&lt;br /&gt;
$Name:	84	L_Lich.wav,		0, 0.50, 1,  50, 400	; GTW-83 Lich laser fired&lt;br /&gt;
$Name:	85	hit_1.wav,		0, 0.90, 1, 200, 800	; Laser impact&lt;br /&gt;
$Name:	86	L_Vasmid.wav,		0, 0.50, 1,  50, 400	; Subach-HLV Vasudan laser&lt;br /&gt;
$Name:	87	m_wasp.wav,		0, 0.80, 1,  50, 400	; rockeye missile launch&lt;br /&gt;
$Name:	88	boom_2.wav,		0, 0.80, 1, 500, 1000	; missile impact 1&lt;br /&gt;
$Name:	89	m_mag.wav,		0, 0.80, 1,  50, 400	; mag pulse missile launch&lt;br /&gt;
$Name:	90	m_fury.wav,		0, 0.80, 1,  50, 400	; fury missile launch&lt;br /&gt;
$Name:	91	m_shrike.wav,		0, 0.80, 1,  50, 400	; shrike missile launch&lt;br /&gt;
$Name:	92	m_angel.wav,		0, 0.80, 1,  50, 400	; angel fire missile launch&lt;br /&gt;
$Name:	93	m_cluster.wav,		0, 0.80, 1,  50, 400	; cluster bomb launch&lt;br /&gt;
$Name:	94	m_clusterb.wav,		0, 0.80, 1,  50, 400	; cluster baby bomb launch&lt;br /&gt;
$Name:	95	m_stiletto.wav,		0, 0.80, 1,  50, 400	; stiletto bomb launch&lt;br /&gt;
$Name:	96	m_tsunami.wav,		0, 0.80, 1,  50, 400	; tsunami bomb launch&lt;br /&gt;
$Name:	97	m_harbinger.wav,	0, 0.80, 1,  50, 400	; harbinger bomb launch&lt;br /&gt;
$Name:	98	m_mega.wav,		0, 0.80, 1,  50, 400	; mega wokka launch&lt;br /&gt;
$Name:	99	counter_1.wav,		0, 0.70, 1,  50, 200	; countermeasure 1 launch&lt;br /&gt;
$Name:	100	l_alien1.wav,		0, 0.60, 1,  50, 400	; Shivan light laser (3d sound)&lt;br /&gt;
$Name:	101	clusterboom.wav,	0, 0.80, 1, 750, 2000	; shockwave ignition (3d sound)&lt;br /&gt;
$Name:	102	m_swarm.wav,		0, 0.70, 1,  50, 400	; swarm missile sound (3d sound)&lt;br /&gt;
$Name:	103	l_alien2.wav,		0, 0.60, 1, 100, 400	; Shivan heavy laser (3d sound)&lt;br /&gt;
$Name:	104	capital4.wav,		0, 0.70, 1, 500, 1500	; Vasudan SuperCap engine (3d sound)&lt;br /&gt;
$Name:	105	capital5.wav,		0, 0.70, 1, 500, 1500	; Shivan SuperCap engine (3d sound)&lt;br /&gt;
$Name:	106	capital6.wav,		0, 0.70, 1, 500, 1500	; Terran SuperCap engine (3d sound)&lt;br /&gt;
$Name:	107	l_vaslight.wav,		0, 0.60, 1,  50, 400	; Vasudan light laser fired (3d sound)&lt;br /&gt;
$Name:	108	l_alien3.wav,		0, 0.60, 1,  50, 400	; Shivan heavy laser (3d sound)&lt;br /&gt;
$Name:	109	shockwave.wav,		0, 1.00, 1,  50, 800	; ** shockwave impact (3d sound)&lt;br /&gt;
$Name:	110	Turret_T1.wav,		0, 0.50, 2, 200, 1000	; TERRAN TURRET 1&lt;br /&gt;
$Name:	111	Turret_T2.wav,		0, 0.50, 2, 200, 1000	; TERRAN TURRET 2&lt;br /&gt;
$Name:	112	Turret_V1.wav,		0, 0.50, 2, 200, 1000	; VASUDAN TURRET 1&lt;br /&gt;
$Name:	113	Turret_V2.wav,		0, 0.50, 2, 200, 1000	; VASUDAN TURRET 2&lt;br /&gt;
$Name:	114	Turret_S1.wav,		0, 0.50, 2, 200, 1000	; SHIVAN TURRET 1&lt;br /&gt;
$Name:	115	paintloop.wav,		0, 0.60, 1,  50, 200	; targeting laser loop sound&lt;br /&gt;
$Name:	116	FlakLaunch.wav,		0, 0.60, 1, 250, 1000	; Flak Gun Launch&lt;br /&gt;
$Name:	117	boom_4.wav,		0, 0.80, 1, 400, 800	; Flak Gun Impact&lt;br /&gt;
$Name:	118	m_emp.wav,		0, 0.60, 1,  50, 400	; EMP Missle&lt;br /&gt;
$Name:	119	Escape.wav,		0, 0.60, 1, 200, 600	; Escape Pod Drone&lt;br /&gt;
$Name:	120	Vaporize1.wav,		0, 0.70, 0		; Beam Hit 1&lt;br /&gt;
$Name:	121	beam_loop.wav,		0, 0.70, 2, 1500, 3000	; beam loop&lt;br /&gt;
$Name:	122	beam_up.wav,		0, 0.70, 2, 1500, 3000	; beam power up&lt;br /&gt;
$Name:	123	beam_down.wav,		0, 0.70, 2, 1500, 3000	; beam power down&lt;br /&gt;
$Name:	124	beam_shot1.wav,		0, 0.70, 2, 1500, 2500	; Beam shot 1&lt;br /&gt;
$Name:	125	beam_shot2.wav,		0, 0.70, 2, 1500, 2500	; Beam shot 2&lt;br /&gt;
;Ship Engine Sounds section&lt;br /&gt;
$Name:	126	ship_a1.wav,		0, 0.60, 1, 200, 400	; Terran fighter engine (3d sound)&lt;br /&gt;
$Name:	127	ship_a2.wav,		0, 0.70, 1, 300, 600	; Terran bomber engine (3d sound)&lt;br /&gt;
$Name:	128	ship_a3.wav,		0, 0.80, 1, 400, 800	; Terran cruiser engine (3d sound)&lt;br /&gt;
$Name:	129	ship_b1.wav,		0, 0.70, 1, 200, 400	; Vasudan fighter engine (3d sound)&lt;br /&gt;
$Name:	130	ship_b2.wav,		0, 0.80, 1, 300, 600	; Vasudan bomber engine (3d sound)&lt;br /&gt;
$Name:	131	ship_b3.wav,		0, 0.80, 1, 400, 800	; Vasudan cruiser engine (3d sound)&lt;br /&gt;
$Name:	132	ship_c1.wav,		0, 0.60, 1, 200, 400	; Shivan fighter engine (3d sound)&lt;br /&gt;
$Name:	133	ship_c2.wav,		0, 0.70, 1, 300, 600	; Shivan bomber engine (3d sound)&lt;br /&gt;
$Name:	134	ship_c3.wav,		0, 0.80, 1, 400, 800	; Shivan cruiser engine (3d sound)&lt;br /&gt;
$Name:	135	beacon.wav,		0, 0.60, 1, 300, 600	; Repair ship beacon/engine sound (3d sound)&lt;br /&gt;
$Name:	136	capital1.wav,		0, 0.70, 1, 500, 1500	; Terran capital engine (3d sound)&lt;br /&gt;
$Name:	137	capital2.wav,		0, 0.70, 1, 500, 1500	; Vasudan capital engine (3d sound)&lt;br /&gt;
$Name:	138	capital3.wav,		0, 0.70, 1, 500, 1500	; Shivan capital engine (3d sound)&lt;br /&gt;
; Electrical arc sound fx on the debris pieces&lt;br /&gt;
$Name:	139	Arc_01.wav,		0, 0.30, 2, 200, 500	; ** 0.10 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	140	Arc_02.wav,		0, 0.30, 2, 200, 500	; ** 0.25 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	141	Arc_03.wav,		0, 0.30, 2, 200, 500	; ** 0.50 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	142	Arc_04.wav,		0, 0.30, 2, 200, 500	; ** 0.75 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	143	Arc_05.wav,		0, 0.30, 2, 200, 500	; ** 1.00 second spark sound effect (3d sound)&lt;br /&gt;
; Beam Sounds&lt;br /&gt;
$Name:	144	BT_LTerSlash.wav,	0, 0.70, 2, 1500, 3000	; LTerSlash 	beam loop&lt;br /&gt;
$Name:	145	BT_TerSlash.wav,	0, 0.70, 2, 1500, 3000	; TerSlash	beam loop&lt;br /&gt;
$Name:	146	BT_SGreen.wav,		0, 0.70, 2, 1500, 3000	; SGreen 	beam loop&lt;br /&gt;
$Name:	147	BT_BGreen.wav,		0, 0.70, 2, 1500, 3000	; BGreen	beem loop&lt;br /&gt;
$Name:	148	BT_BFGreen.wav,		0, 0.70, 2, 1500, 3000	; BFGreen	been loop&lt;br /&gt;
$Name:	149	BT_AntiFtr.wav,		0, 0.70, 2, 1500, 3000	; Antifighter 	beam loop&lt;br /&gt;
$Name:	150	BT_up_1.wav,		0, 0.60, 2, 1500, 3000	; 1 sec		warm up&lt;br /&gt;
$Name:	151	BT_up_1.5.wav,		0, 0.60, 2, 1500, 3000	; 1.5 sec 	warm up&lt;br /&gt;
$Name:	152	BT_up_2.5.wav,		0, 0.60, 2, 1500, 3000	; 2.5 sec 	warm up&lt;br /&gt;
$Name:	153	BT_up_3.wav,		0, 0.60, 2, 1500, 3000	; 3 sec 	warm up&lt;br /&gt;
$Name:	154	BT_up_3.5.wav,		0, 0.60, 2, 1500, 3000	; 3.5 sec 	warm up&lt;br /&gt;
$Name:	155	BT_up_5.wav,		0, 0.60, 2, 1500, 3000	; 5 sec 	warm up&lt;br /&gt;
$Name:	156	BT_dwn_1.wav,		0, 0.70, 2, 2000, 3000	; LTerSlash	warm down&lt;br /&gt;
$Name:	157	BT_dwn_2.wav,		0, 0.70, 2, 2000, 3000	; TerSlash	warm down&lt;br /&gt;
$Name:	158	BT_dwn_3.wav,		0, 0.70, 2, 2000, 3000	; SGreen	warm down&lt;br /&gt;
$Name:	159	BT_dwn_4.wav,		0, 0.70, 2, 2000, 3000	; BGreen	warm down&lt;br /&gt;
$Name:	160	BT_dwn_5.wav,		0, 0.70, 2, 2000, 3000	; BFGreen	warm down&lt;br /&gt;
$Name:	161	BT_dwn_6.wav,		0, 0.70, 2, 2000, 3000	; T_AntiFtr	warm down&lt;br /&gt;
$Name:	162	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	163	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	164	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	165	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	166	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	167	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	168	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	169	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	170	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	171	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	172	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	173	SupNova1.wav,		0, 1.00, 0		; SuperNova (distant)&lt;br /&gt;
$Name:	174	SupNova2.wav,		0, 1.00, 0		; SuperNova (shockwave)&lt;br /&gt;
$Name:	175	ship_c4.wav,		0, 0.80, 1, 400, 800	; Shivan large engine (3d sound)&lt;br /&gt;
$Name:	176	ship_c5.wav,		0, 0.80, 1, 400, 1000	; Shivan large engine (3d sound)&lt;br /&gt;
$Name:	177	BS_SRed.wav,		0, 0.70, 2, 1500, 3000	; SRed 		beam loop&lt;br /&gt;
$Name:	178	BS_LRed.wav,		0, 0.70, 2, 1500, 3000	; LRed		beam loop&lt;br /&gt;
$Name:	179	BS_AntiFtr.wav,		0, 0.70, 2, 1500, 3000	; Antifighter	beam loop&lt;br /&gt;
$Name:	180	Thunder_01.wav,		0, 0.70, 0		; Thunder 1 sound in neblua&lt;br /&gt;
$Name:	181	Thunder_02.wav,		0, 0.70, 0		; Thunder 2 sound in neblua&lt;br /&gt;
$Name:	182	BS_up_1.wav,		0, 0.60, 2, 1500, 3000	; 1 sec 	warm up&lt;br /&gt;
$Name:	183	BS_up_1.5.wav,		0, 0.60, 2, 1500, 3000	; 1.5 sec 	warm up&lt;br /&gt;
$Name:	184	BS_up_3.wav,		0, 0.60, 2, 1500, 3000	; 3 sec 	warm up&lt;br /&gt;
$Name:	185	Commnode.wav,		0, 0.60, 1, 200,  500	; Shivan Commnode&lt;br /&gt;
$Name:	186	Pirate.wav,		0, 0.60, 1, 400,  1000	; Volition PirateShip&lt;br /&gt;
$Name:	187	BS_dwn_1.wav,		0, 0.70, 2, 2000, 3000	; SRed 		warm down&lt;br /&gt;
$Name:	188	BS_dwn_2.wav,		0, 0.70, 2, 2000, 3000	; LRed 		warm down&lt;br /&gt;
$Name:	189	BS_dwn_3.wav,		0, 0.70, 2, 2000, 3000	; AntiFtr	warm down&lt;br /&gt;
$Name:	190	Inst1.wav,		0, 0.80, 1, 500, 2000	; Instellation 1&lt;br /&gt;
$Name:	191	Inst2.wav,		0, 0.80, 1, 500, 2000	; Instellation 2&lt;br /&gt;
&lt;br /&gt;
;SCP ADDED SOUNDS START HERE&lt;br /&gt;
$Name:  200     m_load.wav,		0, 0.60, 1, 10, 50	; Ballistic Weapon Rearm Start&lt;br /&gt;
$Name:	201	m_lock.wav,		0, 0.50, 1, 10, 50	; Ballistic Weapon Rearm&lt;br /&gt;
;&lt;br /&gt;
#Game Sounds End&lt;br /&gt;
;&lt;br /&gt;
#Interface Sounds Start&lt;br /&gt;
$Name:	0	user_c.wav,		0, 0.70, 0		; mouse click&lt;br /&gt;
$Name:	1	empty,			0, 0.70, 0		; pick up a ship icon (not used)&lt;br /&gt;
$Name:	2	load01.wav,		0, 0.60, 0		; drop a ship icon on a wing slot&lt;br /&gt;
$Name:	3	unload01.wav,		0, 0.60, 0		; drop a ship icon back to the list&lt;br /&gt;
$Name:	4	beep_4.wav,		0, 0.70, 0		; press briefing, ship selection or weapons bar (top-left)&lt;br /&gt;
$Name:	5	user_c.wav,		0, 0.70, 0		; Switching to a new screen, but not commit&lt;br /&gt;
$Name:	6	beep_4.wav,		0, 0.70, 0		; help pressed&lt;br /&gt;
$Name:	7	commit.wav,		0, 0.60, 0		; commit pressed&lt;br /&gt;
$Name:	8	user_c.wav,		0, 0.70, 0		; prev/next pressed&lt;br /&gt;
$Name:	9	user_c.wav,		0, 0.70, 0		; scroll pressed (and scroll)&lt;br /&gt;
$Name:	10	fail.wav,		0, 0.70, 0		; general failure sound for any event&lt;br /&gt;
$Name:	11	shipview.wav,		0, 0.50, 0		; ship animation starts (ie text and ship first appear)&lt;br /&gt;
$Name:	12	main_amb.wav,		0, 0.60, 0		; ambient sound for the Terran main hall (looping)&lt;br /&gt;
$Name:	13	vas_amb.wav,		0, 0.60, 0		; ambient sound for the Vasudan main hall (looping)&lt;br /&gt;
$Name:	14	user_a.wav,		0, 0.70, 0		; brief stage change&lt;br /&gt;
$Name:	15	user_i.wav,		0, 0.70, 0		; brief stage change fail&lt;br /&gt;
$Name:	16	beep_3.wav,		0, 0.70, 0		; selet brief icon&lt;br /&gt;
$Name:	17	user_o.wav,		0, 0.50, 0		; user_over (mouse over a control)&lt;br /&gt;
$Name:	18	user_c.wav,		0, 0.70, 0		; user_click (mouse selects a control)&lt;br /&gt;
$Name:	19	reset.wav,		0, 0.70, 0		; reset (or similar button) pressed&lt;br /&gt;
$Name:	20	textdraw.wav,		0, 0.60, 0		; briefing text wipe&lt;br /&gt;
$Name:	21	Lift_Mix.wav,		0, 0.50, 0		; main hall - elevator&lt;br /&gt;
$Name:	22	weapview.wav,		0, 0.60, 0		; weapon animation starts&lt;br /&gt;
$Name:	23	dooropen.wav,		0, 0.50, 0		; door in main hall opens&lt;br /&gt;
$Name:	24	doorclose.wav,		0, 0.50, 0		; door in main hall closes&lt;br /&gt;
$Name:	25	itemdraw.wav,		0, 0.50, 0		; glow in main hall opens&lt;br /&gt;
$Name:	26	Crane_1.wav,		0, 0.50, 0		; main hall - crane 1&lt;br /&gt;
$Name:	27	sub_amb.wav,		0, 0.60, 0		; ambient sound for menus off the main hall (looping)&lt;br /&gt;
$Name:	28	user_c.wav,		0, 0.70, 0		; popup dialog box appeared&lt;br /&gt;
$Name:	29	user_c.wav,		0, 0.70, 0		; popup dialog box goes away&lt;br /&gt;
$Name:	30	1_yes.wav,		0, 1.00, 0		; voice clip played when volume slider changes&lt;br /&gt;
$Name:	31	Crane_2.wav,		0, 0.50, 0		; main hall - crane 2&lt;br /&gt;
$Name:	32	Option1.wav,		0, 0.70, 0		; main hall options - mouse on &lt;br /&gt;
$Name:	33	Option2.wav,		0, 0.70, 0		; main hall options - mouse off&lt;br /&gt;
$Name:	34	Techroom1.wav,		0, 0.70, 0		; main hall tech room - mouse on&lt;br /&gt;
$Name:	35	Techroom2.wav,		0, 0.70, 0		; main hall tech room - mouse off&lt;br /&gt;
$Name:	36	Exitopen.wav,		0, 0.60, 0		; main hall exit open&lt;br /&gt;
$Name:	37	Exitclose.wav,		0, 0.60, 0		; main hall exit close&lt;br /&gt;
$Name:	38	pa_1.wav,		0, 0.50, 0		; main hall random intercom 1&lt;br /&gt;
$Name:	39	pa_2.wav,		0, 0.50, 0		; main hall random intercom 2&lt;br /&gt;
$Name:	40	pa_3.wav,		0, 0.50, 0		; main hall random intercom 3&lt;br /&gt;
$Name:	41	highlight.wav,		0, 0.40, 0		; spinning highlight in briefing&lt;br /&gt;
$Name:	42	noiz.wav,		0, 0.40, 0		; static in a briefing stage cut&lt;br /&gt;
$Name:	43	Camp_on.wav,		0, 0.70, 0		; main hall campaign - mouse on&lt;br /&gt;
$Name:	44	Camp_off.wav,		0, 0.70, 0		; main hall campaign - mouse off&lt;br /&gt;
$Name:	45	V_Hatch_Open.wav,	0, 0.70, 0		; vasudan hall - exit open  &lt;br /&gt;
$Name:	46	V_Hatch_Close.wav,	0, 0.70, 0		; vasudan hall - exit close&lt;br /&gt;
$Name:	47	V_Roll_Open.wav,	0, 0.80, 0		; vasudan hall - hatch open &lt;br /&gt;
$Name:	48	V_Roll_Close.wav,	0, 0.80, 0		; vasudan hall - hatch close&lt;br /&gt;
$Name:	49	V_Lift_Up.wav,		0, 0.70, 0		; vasudan hall - lift up&lt;br /&gt;
$Name:	50	V_Lift_Down.wav,	0, 0.70, 0		; vasudan hall - lift down&lt;br /&gt;
$Name:	51	V_Lite_On.wav,		0, 0.70, 0		; vasudan hall - glow on&lt;br /&gt;
$Name:	52	V_Lite_Off.wav,		0, 0.70, 0		; vasudan hall - glow off&lt;br /&gt;
$Name:	53	Skiff.wav,		0, 0.70, 0		; vasudan hall - skiff loop&lt;br /&gt;
$Name:	54	V_Map_On.wav,		0, 0.70, 0		; vasudan hall - screen on&lt;br /&gt;
$Name:	55	V_Map_Off.wav,		0, 0.70, 0		; vasudan hall - screen off&lt;br /&gt;
$Name:	56	V_Head_1.wav,		0, 0.70, 0		; vasudan hall - vasudan greeting&lt;br /&gt;
$Name:	57	V_Head_2.wav,		0, 0.70, 0		; vasudan hall - vasudan bye&lt;br /&gt;
$Name:	58	V_Pa_01.wav,		0, 0.70, 0		; vasudan hall - vasudan pa 1&lt;br /&gt;
$Name:	59	V_Pa_02.wav,		0, 0.70, 0		; vasudan hall - vasudan pa 2&lt;br /&gt;
$Name:	60	V_Pa_03.wav,		0, 0.70, 0		; vasudan hall - vasudan pa 3&lt;br /&gt;
$Name:	61	bup.wav,		0, 0.90, 0		; bup bup bup-bup bup bup&lt;br /&gt;
$Name:	62	thankyou.wav,		0, 0.90, 0		; thankyou&lt;br /&gt;
$Name:	63	V_Exit_Open.wav,	0, 0.70, 0		; vasudan hall - exit open&lt;br /&gt;
$Name:	64	V_Exit_Close.wav,	0, 0.70, 0		; vasudan hall - exit close&lt;br /&gt;
;&lt;br /&gt;
#Interface Sounds End&lt;br /&gt;
;&lt;br /&gt;
; Each species can have up to 4 different flyby sounds&lt;br /&gt;
; NOTE : the parse code expects to see exactly 2 sounds for terran, then 2 for vasudan, then 2 for shivan&lt;br /&gt;
;        the first sound for each species is the fighter/small flyby sound. the second is the bomber/big flyby sound&lt;br /&gt;
#Flyby Sounds Start&lt;br /&gt;
&lt;br /&gt;
$Terran:	0	T_flyby1.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
$Terran:	1	T_flyby2.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Vasudan:	0	V_flyby1.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
$Vasudan:	1	V_flyby2.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Shivan:	0	S_flyby1.wav,	0, 0.75, 1, 200, 400	; * SHIVAN ship1 flyby player sound (3d sound)&lt;br /&gt;
$Shivan:	1	S_flyby2.wav,	0, 0.75, 1, 200, 400	; * SHIVAN ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
#Flyby Sounds End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Sounds.tbl&amp;diff=44577</id>
		<title>Sounds.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Sounds.tbl&amp;diff=44577"/>
		<updated>2015-05-08T17:14:45Z</updated>

		<summary type="html">&lt;p&gt;Jg18: updated to reflect m!m&amp;#039;s fix for SCP syntax gameplay sound parsing in commit 77ee6f1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TableVersion| 77ee6f1 (Git commit)}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;sounds.tbl&#039;&#039;&#039; is a file for defining the various sounds played ingame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This table is one of the [[Modular Tables]] and can be extended with xxx-snd.tbm&lt;br /&gt;
&lt;br /&gt;
[[Tables|List of Tables]]&lt;br /&gt;
&lt;br /&gt;
==Format==&lt;br /&gt;
*Table file consists of several sections&lt;br /&gt;
*First section defines the sound for the actual game play. It begins at &#039;&#039;&#039;#Game Sounds Start&#039;&#039;&#039; and ends at&#039;&#039;&#039;#Game Sounds End&#039;&#039;&#039;&lt;br /&gt;
*Second section defines the interface sounds. It starts at &#039;&#039;&#039;#Interface Sounds Start&#039;&#039;&#039; and ends at &#039;&#039;&#039;#Interface Sounds End&#039;&#039;&#039;&lt;br /&gt;
*Third section defines the flyby sounds for different species. It begins at &#039;&#039;&#039;#Flyby Sounds Start&#039;&#039;&#039; and ends at &#039;&#039;&#039;#Flyby Sounds End&#039;&#039;&#039;&lt;br /&gt;
*This table has two possible syntax&#039;s, the first being the SCP Syntax and the second being the Retail Syntax&lt;br /&gt;
**The SCP Syntax is newer, easier to read, and likely preferred for modular tables and extendability&lt;br /&gt;
**The Retail Syntax is the syntax used by the retail tables which was kept in place to keep retail compatibility&lt;br /&gt;
*Most of the sounds are hardcoded in the engine (that is, the engine expects sound 33 to be the missile rearm sound, as an example). Modders should follow the retail table layout, and not assign sound numbers smaller than 250 to their custom sounds. This avoids index collisions.&lt;br /&gt;
&lt;br /&gt;
==SCP Syntax==&lt;br /&gt;
{{Note|Many retail sound names are hardcoded to a specific type of sound, so removing entries is not recommended. However adding new ones or altering existing ones is possible.  See the [[Hardcoded sounds|hardcoded sounds]] for a list of which sounds have hardcoded names.}}&lt;br /&gt;
&lt;br /&gt;
In most entries, the name of the file (&#039;&#039;&#039;Second&#039;&#039;&#039; value) can be replaced with &#039;empty&#039; if the particular sound index is not in use.&lt;br /&gt;
&lt;br /&gt;
===#Game Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Cockpit sounds are in general non-3D sounds&lt;br /&gt;
*All the other in-flight sounds are, in general, 3D sounds&lt;br /&gt;
*Non-3D sounds do not require the &#039;&#039;&#039;+3D Sound&#039;&#039;&#039; entries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$Name: 6&lt;br /&gt;
    +Filename: breakup&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.60&lt;br /&gt;
    +3D Sound:&lt;br /&gt;
        +Attenuation start: 100&lt;br /&gt;
        +Attenuation end: 800&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*Specifies the sound handle which FSO will use to identify the sound from other tables&lt;br /&gt;
*If +nocreate is to be used, it must come after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
{{Warning|&lt;br /&gt;
The name may not contain any whitespace (space or tab characters) or the old parsing code will be used.}}&lt;br /&gt;
&lt;br /&gt;
====+nocreate====&lt;br /&gt;
*Allows editing of the sound without creating a new sound handle&lt;br /&gt;
*Must be placed after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Example&lt;br /&gt;
**&amp;lt;pre&amp;gt;$Name: +nocreate SoundName&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====+Filename:====&lt;br /&gt;
*The name of the actual sound file to play&lt;br /&gt;
*If +nocreate is used and you don&#039;t want to change the original filename, then use &amp;lt;same&amp;gt; (including the &amp;lt;&amp;gt;) for the filename.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Preload:====&lt;br /&gt;
*Specifies whether FSO should always preload the sound before the mission or not&lt;br /&gt;
*Optional if +nocreate is used&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Boolean&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Volume:====&lt;br /&gt;
*Specifies the volume the sound should be played at as a percentage&lt;br /&gt;
*Optional if +nocreate is used&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Float&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+3D Sound:====&lt;br /&gt;
*Sets up table syntax for specifying 3D sound options&lt;br /&gt;
*If present the sound will be loaded as a 3D sound&lt;br /&gt;
*No argument should be specified&lt;br /&gt;
*Must be accompanied by &#039;&#039;&#039;+Attenuation Start:&#039;&#039;&#039; and &#039;&#039;&#039;+Attenuation End:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation Start:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it begins to attenuate&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation End:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it is inaudible&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Game Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Interface Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Interface sounds are not 3D sounds. You may specify &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039; properties, but they will be ignored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$Name: CraneSound1&lt;br /&gt;
    +Filename: Crane_1&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.50&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*Specifies the sound handle which FSO will use to identify the sound from other tables&lt;br /&gt;
*If +nocreate is to be used, it must come after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
{{Warning|&lt;br /&gt;
The name may not contain any whitespace (space or tab characters) or the old parsing code will be used.}}&lt;br /&gt;
&lt;br /&gt;
====+nocreate====&lt;br /&gt;
*Allows editing of the sound without creating a new sound handle&lt;br /&gt;
*Must be placed after &#039;&#039;&#039;$Name:&#039;&#039;&#039; and before the &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
*Example&lt;br /&gt;
**&amp;lt;pre&amp;gt;$Name: +nocreate SoundName&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====+Filename:====&lt;br /&gt;
*The name of the actual sound file to play&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Preload:====&lt;br /&gt;
*Specifies whether FSO should always preload the sound before the mission or not&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Boolean&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Volume:====&lt;br /&gt;
*Specifies the volume the sound should be played at as a percentage&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Float&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Interface Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Flyby Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Each species has two flyby sounds. One for the fighters and one for the bombers.&lt;br /&gt;
*Flyby sounds are all 3D sounds.&lt;br /&gt;
*Each flyby sound is defined on a line that begins with the species name (&#039;&#039;&#039;String&#039;&#039;&#039;, species name, eg. &#039;&#039;&#039;$Terran:&#039;&#039;&#039;).&lt;br /&gt;
*&#039;&#039;&#039;THE FLYBY SECTION CANNOT USE +nocreate&#039;&#039;&#039;&lt;br /&gt;
If you want to modify a flyby sound entry of a species in a modular table then you will need to have entries for both types.&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;&#039;$SPECIES:&#039;&#039;&#039; in the place of &#039;&#039;&#039;$Name:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example Terran Section&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$Terran: 0&lt;br /&gt;
    +Filename: T_flyby1&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.75&lt;br /&gt;
    +3D Sound:&lt;br /&gt;
        +Attenuation start: 200&lt;br /&gt;
        +Attenuation end: 400&lt;br /&gt;
&lt;br /&gt;
$Terran: 1&lt;br /&gt;
    +Filename: T_flyby2&lt;br /&gt;
    +Preload: no&lt;br /&gt;
    +Volume: 0.75&lt;br /&gt;
    +3D Sound:&lt;br /&gt;
        +Attenuation start: 200&lt;br /&gt;
        +Attenuation end: 400&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*&#039;&#039;&#039;$Name&#039;&#039;&#039; must be replaced with &#039;&#039;&#039;$SPECIES&#039;&#039;&#039; as from the [[Species_defs.tbl]]&lt;br /&gt;
*Specifies the sound handle which FSO will use to identify the sound from other tables&lt;br /&gt;
*In this case it will usually be a &#039;&#039;&#039;1&#039;&#039;&#039; or a &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
{{Warning|&lt;br /&gt;
The name may not contain any whitespace (space or tab characters) or the old parsing code will be used.}}&lt;br /&gt;
&lt;br /&gt;
====+Filename:====&lt;br /&gt;
*The name of the actual sound file to play&lt;br /&gt;
*Syntax: &#039;&#039;&#039;String&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Preload:====&lt;br /&gt;
*Specifies whether FSO should always preload the sound before the mission or not&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Boolean&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Volume:====&lt;br /&gt;
*Specifies the volume the sound should be played at as a percentage&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Float&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+3D Sound:====&lt;br /&gt;
*Sets up table syntax for specifying 3D sound options&lt;br /&gt;
*If present the sound will be loaded as a 3D sound&lt;br /&gt;
*No argument should be specified&lt;br /&gt;
*Must be accompanied by &#039;&#039;&#039;+Attenuation Start:&#039;&#039;&#039; and &#039;&#039;&#039;+Attenuation End:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation Start:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it begins to attenuate&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Attenuation End:====&lt;br /&gt;
*Defines the distance from the origin of the 3D sound where it is inaudible&lt;br /&gt;
*Must be preceded by &#039;&#039;&#039;+3D Sound:&#039;&#039;&#039;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;Integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Flyby Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Retail Syntax==&lt;br /&gt;
{{Note|Many retail sound names are hardcoded to a specific type of sound, so removing entries is not recommended. However adding new ones or altering existing ones is possible.  See the [[Hardcoded sounds|hardcoded sounds]] for a list of which sounds have hardcoded names.}}&lt;br /&gt;
&lt;br /&gt;
In most entries, the name of the file (&#039;&#039;&#039;Second&#039;&#039;&#039; value) can be replaced with &#039;empty&#039; if the particular sound index is not in use.&lt;br /&gt;
&lt;br /&gt;
===#Game Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Cockpit sounds are in general non-3D sounds that ought to be of type &#039;0&#039;, however all the other in-flight sounds are in general 3D sounds and ought to of type &#039;1&#039; (or type &#039;2&#039;).&lt;br /&gt;
*Type 0 sounds do not require the &#039;&#039;&#039;Sixth&#039;&#039;&#039; and &#039;&#039;&#039;Seventh&#039;&#039;&#039; entries.&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;$Name: 6 breakup.wav, 0, 0.60, 1, 100, 800&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;$Name:&#039;&#039; and has seven entries separated by commas except for the first and second entries.&lt;br /&gt;
&lt;br /&gt;
**&#039;&#039;&#039;First&#039;&#039;&#039; value is the index number of the sound (&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
**&#039;&#039;&#039;Second&#039;&#039;&#039; value is the name of actual sound file (&#039;&#039;&#039;String&#039;&#039;&#039;, filename).&lt;br /&gt;
**&#039;&#039;&#039;Third&#039;&#039;&#039; value sets the file to always preloaded before the mission (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0 or 1)&lt;br /&gt;
**&#039;&#039;&#039;Fourth&#039;&#039;&#039; value defines the playing volume of the sound in percentages (&#039;&#039;&#039;Float&#039;&#039;&#039;, from 0 to 1)&lt;br /&gt;
**&#039;&#039;&#039;Fifth&#039;&#039;&#039; value sets the sound type to either standard sound (type &#039;0&#039;), 3D stereo sound (type &#039;1&#039;), or Aureal A3D (type &#039;2&#039;). This defaults to 3D stereo if it is not available (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0, 1 or 2)&lt;br /&gt;
***&#039;&#039;&#039;Sixth&#039;&#039;&#039; value defines the distance from the origin of 3D sound where it begins to attenuate and is not used with normal non-3D sounds (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
***&#039;&#039;&#039;Seventh&#039;&#039;&#039; value sets the distance from the origin of the 3D sound where it is inaudible and is not used with normal non-3D sounds (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Game Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Interface Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Interface sounds are not 3D sounds. Use type &#039;0&#039; sounds. The &#039;&#039;&#039;Sixth&#039;&#039;&#039; and &#039;&#039;&#039;Seventh&#039;&#039;&#039; entries can be left out of sounds in this section.&lt;br /&gt;
&lt;br /&gt;
Example Line&lt;br /&gt;
&amp;lt;pre&amp;gt;$Name: 26 Crane_1.wav, 0, 0.50, 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;$Name:&#039;&#039; and has five entries separated by commas except for the first and second entries.&lt;br /&gt;
&lt;br /&gt;
**&#039;&#039;&#039;First&#039;&#039;&#039; value is the index number of the sound (&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
**&#039;&#039;&#039;Second&#039;&#039;&#039; value is the name of actual sound file (&#039;&#039;&#039;String&#039;&#039;&#039;, filename).&lt;br /&gt;
**&#039;&#039;&#039;Third&#039;&#039;&#039; value sets the file to always preloaded before the mission (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0 or 1)&lt;br /&gt;
**&#039;&#039;&#039;Fourth&#039;&#039;&#039; value defines the playing volume of the sound in percentages (&#039;&#039;&#039;Float&#039;&#039;&#039;, from 0 to 1)&lt;br /&gt;
**&#039;&#039;&#039;Fifth&#039;&#039;&#039; value sets the sound type to either standard sound (type &#039;0&#039;), 3D stereo sound (type &#039;1&#039;), or Aureal A3D (type &#039;2&#039;). This defaults to 3D stereo if it is not available (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0, 1 or 2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Interface Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Flyby Sounds Start===&lt;br /&gt;
Notes&lt;br /&gt;
*Each species has two flyby sounds. One for the fighters and one for the bombers.&lt;br /&gt;
*Flyby sounds are all 3D sounds of type &#039;1&#039; for the &#039;&#039;&#039;Fifth&#039;&#039;&#039; value.&lt;br /&gt;
*Each flyby sound is defined on a single line that begins with the species name (&#039;&#039;&#039;String&#039;&#039;&#039;, species name, eg. &#039;&#039;&#039;$Terran:&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Retail flyby section&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Flyby Sounds Start&lt;br /&gt;
&lt;br /&gt;
$Terran:	0	T_flyby1.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
$Terran:	1	T_flyby2.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Vasudan:	0	V_flyby1.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
$Vasudan:	1	V_flyby2.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Shivan:	0	S_flyby1.wav,	0, 0.75, 1, 200, 400	; * Shivan ship1 flyby player sound (3d sound)&lt;br /&gt;
$Shivan:	1	S_flyby2.wav,	0, 0.75, 1, 200, 400	; * Shivan ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
#Flyby Sounds End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Line starts with &#039;&#039;$SPECIES:&#039;&#039; and has seven entries separated by commas except for the first and second entries.&lt;br /&gt;
&lt;br /&gt;
**&#039;&#039;&#039;First&#039;&#039;&#039; value is the label of the flyby sound, usually 0 for the first (small-ship) entry and 1 for the second (large-ship)entry. (&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
**&#039;&#039;&#039;Second&#039;&#039;&#039; value is the name of actual sound file (&#039;&#039;&#039;String&#039;&#039;&#039;, filename).&lt;br /&gt;
**&#039;&#039;&#039;Third&#039;&#039;&#039; value sets the file to always preloaded before the mission (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0 or 1)&lt;br /&gt;
**&#039;&#039;&#039;Fourth&#039;&#039;&#039; value defines the playing volume of the sound in percentages (&#039;&#039;&#039;Float&#039;&#039;&#039;, from 0 to 1)&lt;br /&gt;
**&#039;&#039;&#039;Fifth&#039;&#039;&#039; value sets the sound type and should be set to 3D stereo sound (type &#039;1&#039;) (&#039;&#039;&#039;Integer&#039;&#039;&#039;, 0, 1 or 2)&lt;br /&gt;
***&#039;&#039;&#039;Sixth&#039;&#039;&#039; value defines the distance from the origin of 3D sound where it begins to attenuate (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
***&#039;&#039;&#039;Seventh&#039;&#039;&#039; value sets the distance from the origin of the 3D sound where it is inaudible (type 0)(&#039;&#039;&#039;Integer&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Section ends with #Flyby Sounds End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sample==&lt;br /&gt;
*Retail FreeSpace 2 table&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;&lt;br /&gt;
;  sounds.tbl *&lt;br /&gt;
;&lt;br /&gt;
;  file to specify general game sounds&lt;br /&gt;
;&lt;br /&gt;
;                     I M P O R T A N T&lt;br /&gt;
;  **********************************************************&lt;br /&gt;
;  *                                                        *&lt;br /&gt;
;  ====&amp;gt;  DO NOT MODIFY THE ORDER OF THE LISTED SOUNDS &amp;lt;====*&lt;br /&gt;
;  *                                                        *&lt;br /&gt;
;  **********************************************************&lt;br /&gt;
;                     I M P O R T A N T&lt;br /&gt;
;&lt;br /&gt;
;  If a sound entry appears in this file, there is a hook into the game to&lt;br /&gt;
;  play the sound.  This file can only be modified to change *existing* sounds.&lt;br /&gt;
;  Talk to a programmer if you want to add brand new sounds.  Adding a line to&lt;br /&gt;
;  this file will not make your sound appear in the game, it will more than&lt;br /&gt;
;  likely break something.&lt;br /&gt;
;&lt;br /&gt;
; 	If you don&#039;t want the sound to play, put none.wav as the sound to play.&lt;br /&gt;
;&lt;br /&gt;
;	The fields for a sound entry are:&lt;br /&gt;
;	1) unqiue sound signature&lt;br /&gt;
;	2) filename of the sound&lt;br /&gt;
;	3) flag to indicate sound should always be pre-loaded before a mission&lt;br /&gt;
;	4) the default volume (from 0.0 -&amp;gt; 1.0)&lt;br /&gt;
;	5) 0 - not 3d  1 - stereo 3D  2 - Aureal A3D (if available), otherwise use stereo 3D&lt;br /&gt;
;	6) distance at which sound starts to attenuate (for 3d sounds only)&lt;br /&gt;
;	7) distance at which sound is inaudible (for 3d sounds only)&lt;br /&gt;
;&lt;br /&gt;
#Game Sounds Start&lt;br /&gt;
; Misc sounds section						** = Aureal 3d support | * = FS = 3D support&lt;br /&gt;
$Name:	0	trk-loop.wav,		0, 0.40, 0		; Missle tracking to acquire a lock (looped)&lt;br /&gt;
$Name:	1	lock.wav,		0, 0.40, 0		; Missle lock (non-looping)&lt;br /&gt;
$Name:	2	cycle.wav,		0, 0.60, 0		; cycle primary weapon&lt;br /&gt;
$Name:	3	cycle.wav,		0, 0.60, 0		; cycle secondary weapon&lt;br /&gt;
$Name:	4	ship_p.wav,		0, 0.30, 0		; engine sound (as heard in cockpit)&lt;br /&gt;
$Name:	5	reveal.wav,		0, 0.40, 0		; cargo revealed &lt;br /&gt;
$Name:	6	breakup.wav,		0, 0.60, 1, 100, 800	; ship death roll (3d sound)&lt;br /&gt;
$Name:	7	boom_3.wav,		0, 0.90, 2, 600, 1200	; * ship explosion 1 (3d sound)&lt;br /&gt;
$Name:	8	beep_2.wav,		0, 0.40, 0		; target acquried&lt;br /&gt;
$Name:	9	switch_1.wav,		0, 0.50, 0		; energy level change success&lt;br /&gt;
$Name:	10	beep_5.wav,		0, 0.50, 0		; energy level change fail&lt;br /&gt;
$Name:	11	switch_2.wav,		0, 0.50, 0		; energy transfer success&lt;br /&gt;
$Name:	12	beep_5.wav,		0, 0.50, 0		; energy transfer faile&lt;br /&gt;
$Name:	13	thr_full.wav,		0, 0.40, 0		; set full throttle&lt;br /&gt;
$Name:	14	thr_off.wav,		0, 0.40, 0		; set zero throttle&lt;br /&gt;
$Name:	15	thr_up.wav,		0, 0.40, 0		; set 1/3 or 2/3 throttle (up)&lt;br /&gt;
$Name:	16	thr_dwn.wav,		0, 0.40, 0		; set 1/3 or 2/3 throttle (down)&lt;br /&gt;
$Name:	17	approach.wav,		0, 0.60, 1, 10, 800	; dock approach retros (3d sound)&lt;br /&gt;
$Name:	18	attach.wav,		0, 0.60, 1, 10, 800	; dock attach (3d sound)&lt;br /&gt;
$Name:	19	detach.wav,		0, 0.60, 1, 10, 800	; dock detach (3d sound)&lt;br /&gt;
$Name:	20	depart.wav,		0, 0.60, 1, 10, 800	; dock depart retros (3d sound)&lt;br /&gt;
$Name:	21	aburn_1.wav,		0, 0.70, 0		; afterburner engage (3d sound)&lt;br /&gt;
$Name:	22	aburn_2.wav,		0, 0.90, 0		; afterburner burn sound (looped)&lt;br /&gt;
$Name:	23	vaporize2.wav,		0, 0.90, 0		; Destroyed by a beam (vaporized)&lt;br /&gt;
$Name:	24	aburn_1f.wav,		0, 0.50, 0		; afterburner fail (no fuel when aburn pressed)&lt;br /&gt;
$Name:	25	alert_2.wav,		0, 0.40, 0		; heat-seeker launch warning&lt;br /&gt;
$Name:	26	m_fail.wav,		0, 0.60, 0		; tried to fire a missle when none are left&lt;br /&gt;
$Name:	27	l_fail.wav,		0, 0.60, 0		; tried to fire lasers when not enough energy left&lt;br /&gt;
$Name:	28	fail.wav,		0, 0.50, 0		; target fail sound (i.e. press targeting key, but nothing happens)&lt;br /&gt;
$Name:	29	beep_1.wav,		0, 0.50, 0		; squadmate message menu appears&lt;br /&gt;
$Name:	30	beep_1.wav,		0, 0.50, 0		; squadmate message menu disappears&lt;br /&gt;
$Name:	31	debris.wav,		0, 0.40, 2, 100, 300	; ** debris sound (persistant, looping) (3d sound)&lt;br /&gt;
$Name:	32	subhit.wav,		0, 0.60, 0		; subsystem gets destroyed on player ship&lt;br /&gt;
$Name:	33	m_load.wav,		0, 0.60, 1, 10, 50	; missle start load (during rearm/repair) (3d sound)&lt;br /&gt;
$Name:	34	m_lock.wav,		0, 0.50, 1, 10, 50	; missle load (during rearm/repair) (3d sound)&lt;br /&gt;
$Name:	35	repair.wav,		0, 0.50, 0		; ship is being repaired (during rearm/repair) (looped)&lt;br /&gt;
$Name:	36	l_hit.wav,		0, 0.90, 0, 30, 100	; * player ship is hit by laser fire (3d sound)&lt;br /&gt;
$Name:	37	m_hit.wav,		0, 0.90, 0, 30, 100	; * player ship is hit by missile (3d sound)&lt;br /&gt;
$Name:	38	cycle.wav,		0, 0.80, 0		; countermeasure cycle&lt;br /&gt;
$Name:	39	s_hit_4.wav,		0, 0.60, 1, 200, 600	; * shield hit (3d sound)&lt;br /&gt;
$Name:	40	s_hit_2.wav,		0, 0.80, 1, 10, 100	; * player shield is hit (3d sound)&lt;br /&gt;
$Name:	41	select.wav,		0, 0.60, 0		; mouse click&lt;br /&gt;
$Name:	42	alert_3.wav,		0, 0.60, 0		; aspect launch warning&lt;br /&gt;
$Name:	43	beep_4.wav,		0, 0.60, 0		; shield quadrant transfer successful&lt;br /&gt;
$Name:	44	wash.wav,		0, 0.80, 1, 200, 400	; Engine wash looping sound&lt;br /&gt;
$Name:	45	warp_1.wav,		0, 0.60, 2, 750, 1500	; ** warp hole opening up for arriving (3d sound)&lt;br /&gt;
$Name:	46	warp_1.wav,		0, 0.60, 2, 750, 1500	; ** warp hole opening up for departing (3d sound)&lt;br /&gt;
$Name:	47	aburn_1f.wav,		0, 0.50, 0		; player warp has failed&lt;br /&gt;
$Name:	48	static.wav,		0, 0.60, 0		; hud gauge static&lt;br /&gt;
$Name:	49	boom_1.wav,		0, 0.90, 1, 600, 1200	; * ship explosion 2 (3d sound)&lt;br /&gt;
$Name:	50	rev1.wav,		0, 0.70, 0		; ship is warping out in 3rd person&lt;br /&gt;
$Name:	51	s_hit_0.wav,		0, 0.70, 1, 100, 200	; * heavy ship-ship collide sound (3d sound)&lt;br /&gt;
$Name:	52	collide.wav,		0, 0.70, 1, 100, 200	; * light ship-ship collide sound (3d sound)&lt;br /&gt;
$Name:	53	s_hit_1.wav,		0, 0.70, 1, 100, 200	; * shield ship-ship collide overlay sound (3d sound)&lt;br /&gt;
$Name:	54	alert_1.wav,		0, 0.50, 0		; missile threat indicator flashes&lt;br /&gt;
$Name:	55	proximity1.wav,		0, 0.70, 0		; proximity warning (heat seeker)&lt;br /&gt;
$Name:	56	proximity2.wav,		0, 0.70, 0		; proximity warning (aspect)&lt;br /&gt;
$Name:	57	directive.wav,		0, 0.70, 0		; directive complete&lt;br /&gt;
$Name:	58	subhit2.wav,		0, 0.90, 1, 250,  800	; * other ship subsystem destroyed (3d sound)&lt;br /&gt;
$Name:	59	atomic.wav,		0, 0.90, 1, 2000, 4000	; * captial ship explosion (3d sound)&lt;br /&gt;
$Name:	60	subhit2.wav,		0, 0.90, 1, 250,  1500	; * captial ship subsystem destroyed (3d sound)&lt;br /&gt;
$Name:	61	warp2.wav,		0, 1.00, 1, 1500, 2000	; [obsolete] large ship warps out (looping 3d sound)&lt;br /&gt;
$Name:	62	ast_lghit.wav,		0, 0.80, 1, 750, 1500	; ** large asteroid blows up (3d sound)&lt;br /&gt;
$Name:	63	ast_smhit.wav,		0, 0.80, 1, 500, 1000	; ** small asteroid blows up (3d sound)&lt;br /&gt;
$Name:	64	cue_voice.wav,		0, 0.90, 0		; sound to indicate voice is about to start&lt;br /&gt;
$Name:	65	end_voice.wav,		0, 0.90, 0		; sound to indicate voice has ended&lt;br /&gt;
$Name:	66	scan.wav,		0, 0.50, 0		; cargo scanning (looping)&lt;br /&gt;
$Name:	67	l_flyby.wav,		0, 0.80, 1, 50, 250	; * weapon flyby sound&lt;br /&gt;
$Name:	68	asteroid.wav,		0, 0.50, 1, 200, 700	; [obsolete] asteroid sound (persistant, looping) (3d sound)&lt;br /&gt;
$Name:	69	warp_open.wav,		0, 1.00, 2, 2000, 4000	; capital warp hole opening (3d sound)&lt;br /&gt;
$Name:	70	warp_close.wav,		0, 1.00, 2, 2000, 4000	; capital warp hole closing (3d sound)&lt;br /&gt;
$Name:	71	rumble.wav,		0, 0.70, 1, 600, 1000	; LARGE engine ambient&lt;br /&gt;
$Name:	72	subspace_left.wav,	0, 0.30, 0		; subspace ambient sound (left channel) (looping)&lt;br /&gt;
$Name:	73	subspace_right.wav,	0, 0.30, 0		; subspace ambient sound (right channel) (looping)&lt;br /&gt;
$Name:	74	Evaded.wav,		0, 0.70, 0		; &amp;quot;evaded&amp;quot; HUD popup&lt;br /&gt;
$Name:	75	rumble.wav,		0, 0.70, 1, 600, 1000	; HUGE engine ambient&lt;br /&gt;
;&lt;br /&gt;
; Weapons section&lt;br /&gt;
;&lt;br /&gt;
$Name:	76	L_Sidearm.wav,		0, 0.50, 1,  50, 400	; SD-4 Sidearm laser fired&lt;br /&gt;
$Name:	77	L_Scalpel.wav,		0, 0.50, 1,  50, 400	; DR-2 Scalpel fired&lt;br /&gt;
$Name:	78	L_Flail2.wav,		0, 0.50, 1,  50, 400	; Flail II fired&lt;br /&gt;
$Name:	79	L_Prom_R.wav,		0, 0.50, 1,  50, 400	; Prometheus R laser fired&lt;br /&gt;
$Name:	80	L_Prom_S.wav,		0, 0.50, 1,  50, 400	; Prometheus S laser fired&lt;br /&gt;
$Name:	81	L_Newton.wav,		0, 0.50, 1,  50, 400	; GTW-66 Newton Cannon fired&lt;br /&gt;
$Name:	82	L_Kayser.wav,		0, 0.55, 1,  50, 400	; UD-8 Kayser Laser fired&lt;br /&gt;
$Name:	83	L_Circle.wav,		0, 0.50, 1,  50, 400	; GTW-19 Circe laser fired&lt;br /&gt;
$Name:	84	L_Lich.wav,		0, 0.50, 1,  50, 400	; GTW-83 Lich laser fired&lt;br /&gt;
$Name:	85	hit_1.wav,		0, 0.90, 1, 200, 800	; Laser impact&lt;br /&gt;
$Name:	86	L_Vasmid.wav,		0, 0.50, 1,  50, 400	; Subach-HLV Vasudan laser&lt;br /&gt;
$Name:	87	m_wasp.wav,		0, 0.80, 1,  50, 400	; rockeye missile launch&lt;br /&gt;
$Name:	88	boom_2.wav,		0, 0.80, 1, 500, 1000	; missile impact 1&lt;br /&gt;
$Name:	89	m_mag.wav,		0, 0.80, 1,  50, 400	; mag pulse missile launch&lt;br /&gt;
$Name:	90	m_fury.wav,		0, 0.80, 1,  50, 400	; fury missile launch&lt;br /&gt;
$Name:	91	m_shrike.wav,		0, 0.80, 1,  50, 400	; shrike missile launch&lt;br /&gt;
$Name:	92	m_angel.wav,		0, 0.80, 1,  50, 400	; angel fire missile launch&lt;br /&gt;
$Name:	93	m_cluster.wav,		0, 0.80, 1,  50, 400	; cluster bomb launch&lt;br /&gt;
$Name:	94	m_clusterb.wav,		0, 0.80, 1,  50, 400	; cluster baby bomb launch&lt;br /&gt;
$Name:	95	m_stiletto.wav,		0, 0.80, 1,  50, 400	; stiletto bomb launch&lt;br /&gt;
$Name:	96	m_tsunami.wav,		0, 0.80, 1,  50, 400	; tsunami bomb launch&lt;br /&gt;
$Name:	97	m_harbinger.wav,	0, 0.80, 1,  50, 400	; harbinger bomb launch&lt;br /&gt;
$Name:	98	m_mega.wav,		0, 0.80, 1,  50, 400	; mega wokka launch&lt;br /&gt;
$Name:	99	counter_1.wav,		0, 0.70, 1,  50, 200	; countermeasure 1 launch&lt;br /&gt;
$Name:	100	l_alien1.wav,		0, 0.60, 1,  50, 400	; Shivan light laser (3d sound)&lt;br /&gt;
$Name:	101	clusterboom.wav,	0, 0.80, 1, 750, 2000	; shockwave ignition (3d sound)&lt;br /&gt;
$Name:	102	m_swarm.wav,		0, 0.70, 1,  50, 400	; swarm missile sound (3d sound)&lt;br /&gt;
$Name:	103	l_alien2.wav,		0, 0.60, 1, 100, 400	; Shivan heavy laser (3d sound)&lt;br /&gt;
$Name:	104	capital4.wav,		0, 0.70, 1, 500, 1500	; Vasudan SuperCap engine (3d sound)&lt;br /&gt;
$Name:	105	capital5.wav,		0, 0.70, 1, 500, 1500	; Shivan SuperCap engine (3d sound)&lt;br /&gt;
$Name:	106	capital6.wav,		0, 0.70, 1, 500, 1500	; Terran SuperCap engine (3d sound)&lt;br /&gt;
$Name:	107	l_vaslight.wav,		0, 0.60, 1,  50, 400	; Vasudan light laser fired (3d sound)&lt;br /&gt;
$Name:	108	l_alien3.wav,		0, 0.60, 1,  50, 400	; Shivan heavy laser (3d sound)&lt;br /&gt;
$Name:	109	shockwave.wav,		0, 1.00, 1,  50, 800	; ** shockwave impact (3d sound)&lt;br /&gt;
$Name:	110	Turret_T1.wav,		0, 0.50, 2, 200, 1000	; TERRAN TURRET 1&lt;br /&gt;
$Name:	111	Turret_T2.wav,		0, 0.50, 2, 200, 1000	; TERRAN TURRET 2&lt;br /&gt;
$Name:	112	Turret_V1.wav,		0, 0.50, 2, 200, 1000	; VASUDAN TURRET 1&lt;br /&gt;
$Name:	113	Turret_V2.wav,		0, 0.50, 2, 200, 1000	; VASUDAN TURRET 2&lt;br /&gt;
$Name:	114	Turret_S1.wav,		0, 0.50, 2, 200, 1000	; SHIVAN TURRET 1&lt;br /&gt;
$Name:	115	paintloop.wav,		0, 0.60, 1,  50, 200	; targeting laser loop sound&lt;br /&gt;
$Name:	116	FlakLaunch.wav,		0, 0.60, 1, 250, 1000	; Flak Gun Launch&lt;br /&gt;
$Name:	117	boom_4.wav,		0, 0.80, 1, 400, 800	; Flak Gun Impact&lt;br /&gt;
$Name:	118	m_emp.wav,		0, 0.60, 1,  50, 400	; EMP Missle&lt;br /&gt;
$Name:	119	Escape.wav,		0, 0.60, 1, 200, 600	; Escape Pod Drone&lt;br /&gt;
$Name:	120	Vaporize1.wav,		0, 0.70, 0		; Beam Hit 1&lt;br /&gt;
$Name:	121	beam_loop.wav,		0, 0.70, 2, 1500, 3000	; beam loop&lt;br /&gt;
$Name:	122	beam_up.wav,		0, 0.70, 2, 1500, 3000	; beam power up&lt;br /&gt;
$Name:	123	beam_down.wav,		0, 0.70, 2, 1500, 3000	; beam power down&lt;br /&gt;
$Name:	124	beam_shot1.wav,		0, 0.70, 2, 1500, 2500	; Beam shot 1&lt;br /&gt;
$Name:	125	beam_shot2.wav,		0, 0.70, 2, 1500, 2500	; Beam shot 2&lt;br /&gt;
;Ship Engine Sounds section&lt;br /&gt;
$Name:	126	ship_a1.wav,		0, 0.60, 1, 200, 400	; Terran fighter engine (3d sound)&lt;br /&gt;
$Name:	127	ship_a2.wav,		0, 0.70, 1, 300, 600	; Terran bomber engine (3d sound)&lt;br /&gt;
$Name:	128	ship_a3.wav,		0, 0.80, 1, 400, 800	; Terran cruiser engine (3d sound)&lt;br /&gt;
$Name:	129	ship_b1.wav,		0, 0.70, 1, 200, 400	; Vasudan fighter engine (3d sound)&lt;br /&gt;
$Name:	130	ship_b2.wav,		0, 0.80, 1, 300, 600	; Vasudan bomber engine (3d sound)&lt;br /&gt;
$Name:	131	ship_b3.wav,		0, 0.80, 1, 400, 800	; Vasudan cruiser engine (3d sound)&lt;br /&gt;
$Name:	132	ship_c1.wav,		0, 0.60, 1, 200, 400	; Shivan fighter engine (3d sound)&lt;br /&gt;
$Name:	133	ship_c2.wav,		0, 0.70, 1, 300, 600	; Shivan bomber engine (3d sound)&lt;br /&gt;
$Name:	134	ship_c3.wav,		0, 0.80, 1, 400, 800	; Shivan cruiser engine (3d sound)&lt;br /&gt;
$Name:	135	beacon.wav,		0, 0.60, 1, 300, 600	; Repair ship beacon/engine sound (3d sound)&lt;br /&gt;
$Name:	136	capital1.wav,		0, 0.70, 1, 500, 1500	; Terran capital engine (3d sound)&lt;br /&gt;
$Name:	137	capital2.wav,		0, 0.70, 1, 500, 1500	; Vasudan capital engine (3d sound)&lt;br /&gt;
$Name:	138	capital3.wav,		0, 0.70, 1, 500, 1500	; Shivan capital engine (3d sound)&lt;br /&gt;
; Electrical arc sound fx on the debris pieces&lt;br /&gt;
$Name:	139	Arc_01.wav,		0, 0.30, 2, 200, 500	; ** 0.10 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	140	Arc_02.wav,		0, 0.30, 2, 200, 500	; ** 0.25 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	141	Arc_03.wav,		0, 0.30, 2, 200, 500	; ** 0.50 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	142	Arc_04.wav,		0, 0.30, 2, 200, 500	; ** 0.75 second spark sound effect (3d sound)&lt;br /&gt;
$Name:	143	Arc_05.wav,		0, 0.30, 2, 200, 500	; ** 1.00 second spark sound effect (3d sound)&lt;br /&gt;
; Beam Sounds&lt;br /&gt;
$Name:	144	BT_LTerSlash.wav,	0, 0.70, 2, 1500, 3000	; LTerSlash 	beam loop&lt;br /&gt;
$Name:	145	BT_TerSlash.wav,	0, 0.70, 2, 1500, 3000	; TerSlash	beam loop&lt;br /&gt;
$Name:	146	BT_SGreen.wav,		0, 0.70, 2, 1500, 3000	; SGreen 	beam loop&lt;br /&gt;
$Name:	147	BT_BGreen.wav,		0, 0.70, 2, 1500, 3000	; BGreen	beem loop&lt;br /&gt;
$Name:	148	BT_BFGreen.wav,		0, 0.70, 2, 1500, 3000	; BFGreen	been loop&lt;br /&gt;
$Name:	149	BT_AntiFtr.wav,		0, 0.70, 2, 1500, 3000	; Antifighter 	beam loop&lt;br /&gt;
$Name:	150	BT_up_1.wav,		0, 0.60, 2, 1500, 3000	; 1 sec		warm up&lt;br /&gt;
$Name:	151	BT_up_1.5.wav,		0, 0.60, 2, 1500, 3000	; 1.5 sec 	warm up&lt;br /&gt;
$Name:	152	BT_up_2.5.wav,		0, 0.60, 2, 1500, 3000	; 2.5 sec 	warm up&lt;br /&gt;
$Name:	153	BT_up_3.wav,		0, 0.60, 2, 1500, 3000	; 3 sec 	warm up&lt;br /&gt;
$Name:	154	BT_up_3.5.wav,		0, 0.60, 2, 1500, 3000	; 3.5 sec 	warm up&lt;br /&gt;
$Name:	155	BT_up_5.wav,		0, 0.60, 2, 1500, 3000	; 5 sec 	warm up&lt;br /&gt;
$Name:	156	BT_dwn_1.wav,		0, 0.70, 2, 2000, 3000	; LTerSlash	warm down&lt;br /&gt;
$Name:	157	BT_dwn_2.wav,		0, 0.70, 2, 2000, 3000	; TerSlash	warm down&lt;br /&gt;
$Name:	158	BT_dwn_3.wav,		0, 0.70, 2, 2000, 3000	; SGreen	warm down&lt;br /&gt;
$Name:	159	BT_dwn_4.wav,		0, 0.70, 2, 2000, 3000	; BGreen	warm down&lt;br /&gt;
$Name:	160	BT_dwn_5.wav,		0, 0.70, 2, 2000, 3000	; BFGreen	warm down&lt;br /&gt;
$Name:	161	BT_dwn_6.wav,		0, 0.70, 2, 2000, 3000	; T_AntiFtr	warm down&lt;br /&gt;
$Name:	162	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	163	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	164	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	165	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	166	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	167	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	168	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	169	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	170	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	171	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	172	Empty,			0, 0.50, 0&lt;br /&gt;
$Name:	173	SupNova1.wav,		0, 1.00, 0		; SuperNova (distant)&lt;br /&gt;
$Name:	174	SupNova2.wav,		0, 1.00, 0		; SuperNova (shockwave)&lt;br /&gt;
$Name:	175	ship_c4.wav,		0, 0.80, 1, 400, 800	; Shivan large engine (3d sound)&lt;br /&gt;
$Name:	176	ship_c5.wav,		0, 0.80, 1, 400, 1000	; Shivan large engine (3d sound)&lt;br /&gt;
$Name:	177	BS_SRed.wav,		0, 0.70, 2, 1500, 3000	; SRed 		beam loop&lt;br /&gt;
$Name:	178	BS_LRed.wav,		0, 0.70, 2, 1500, 3000	; LRed		beam loop&lt;br /&gt;
$Name:	179	BS_AntiFtr.wav,		0, 0.70, 2, 1500, 3000	; Antifighter	beam loop&lt;br /&gt;
$Name:	180	Thunder_01.wav,		0, 0.70, 0		; Thunder 1 sound in neblua&lt;br /&gt;
$Name:	181	Thunder_02.wav,		0, 0.70, 0		; Thunder 2 sound in neblua&lt;br /&gt;
$Name:	182	BS_up_1.wav,		0, 0.60, 2, 1500, 3000	; 1 sec 	warm up&lt;br /&gt;
$Name:	183	BS_up_1.5.wav,		0, 0.60, 2, 1500, 3000	; 1.5 sec 	warm up&lt;br /&gt;
$Name:	184	BS_up_3.wav,		0, 0.60, 2, 1500, 3000	; 3 sec 	warm up&lt;br /&gt;
$Name:	185	Commnode.wav,		0, 0.60, 1, 200,  500	; Shivan Commnode&lt;br /&gt;
$Name:	186	Pirate.wav,		0, 0.60, 1, 400,  1000	; Volition PirateShip&lt;br /&gt;
$Name:	187	BS_dwn_1.wav,		0, 0.70, 2, 2000, 3000	; SRed 		warm down&lt;br /&gt;
$Name:	188	BS_dwn_2.wav,		0, 0.70, 2, 2000, 3000	; LRed 		warm down&lt;br /&gt;
$Name:	189	BS_dwn_3.wav,		0, 0.70, 2, 2000, 3000	; AntiFtr	warm down&lt;br /&gt;
$Name:	190	Inst1.wav,		0, 0.80, 1, 500, 2000	; Instellation 1&lt;br /&gt;
$Name:	191	Inst2.wav,		0, 0.80, 1, 500, 2000	; Instellation 2&lt;br /&gt;
&lt;br /&gt;
;SCP ADDED SOUNDS START HERE&lt;br /&gt;
$Name:  200     m_load.wav,		0, 0.60, 1, 10, 50	; Ballistic Weapon Rearm Start&lt;br /&gt;
$Name:	201	m_lock.wav,		0, 0.50, 1, 10, 50	; Ballistic Weapon Rearm&lt;br /&gt;
;&lt;br /&gt;
#Game Sounds End&lt;br /&gt;
;&lt;br /&gt;
#Interface Sounds Start&lt;br /&gt;
$Name:	0	user_c.wav,		0, 0.70, 0		; mouse click&lt;br /&gt;
$Name:	1	empty,			0, 0.70, 0		; pick up a ship icon (not used)&lt;br /&gt;
$Name:	2	load01.wav,		0, 0.60, 0		; drop a ship icon on a wing slot&lt;br /&gt;
$Name:	3	unload01.wav,		0, 0.60, 0		; drop a ship icon back to the list&lt;br /&gt;
$Name:	4	beep_4.wav,		0, 0.70, 0		; press briefing, ship selection or weapons bar (top-left)&lt;br /&gt;
$Name:	5	user_c.wav,		0, 0.70, 0		; Switching to a new screen, but not commit&lt;br /&gt;
$Name:	6	beep_4.wav,		0, 0.70, 0		; help pressed&lt;br /&gt;
$Name:	7	commit.wav,		0, 0.60, 0		; commit pressed&lt;br /&gt;
$Name:	8	user_c.wav,		0, 0.70, 0		; prev/next pressed&lt;br /&gt;
$Name:	9	user_c.wav,		0, 0.70, 0		; scroll pressed (and scroll)&lt;br /&gt;
$Name:	10	fail.wav,		0, 0.70, 0		; general failure sound for any event&lt;br /&gt;
$Name:	11	shipview.wav,		0, 0.50, 0		; ship animation starts (ie text and ship first appear)&lt;br /&gt;
$Name:	12	main_amb.wav,		0, 0.60, 0		; ambient sound for the Terran main hall (looping)&lt;br /&gt;
$Name:	13	vas_amb.wav,		0, 0.60, 0		; ambient sound for the Vasudan main hall (looping)&lt;br /&gt;
$Name:	14	user_a.wav,		0, 0.70, 0		; brief stage change&lt;br /&gt;
$Name:	15	user_i.wav,		0, 0.70, 0		; brief stage change fail&lt;br /&gt;
$Name:	16	beep_3.wav,		0, 0.70, 0		; selet brief icon&lt;br /&gt;
$Name:	17	user_o.wav,		0, 0.50, 0		; user_over (mouse over a control)&lt;br /&gt;
$Name:	18	user_c.wav,		0, 0.70, 0		; user_click (mouse selects a control)&lt;br /&gt;
$Name:	19	reset.wav,		0, 0.70, 0		; reset (or similar button) pressed&lt;br /&gt;
$Name:	20	textdraw.wav,		0, 0.60, 0		; briefing text wipe&lt;br /&gt;
$Name:	21	Lift_Mix.wav,		0, 0.50, 0		; main hall - elevator&lt;br /&gt;
$Name:	22	weapview.wav,		0, 0.60, 0		; weapon animation starts&lt;br /&gt;
$Name:	23	dooropen.wav,		0, 0.50, 0		; door in main hall opens&lt;br /&gt;
$Name:	24	doorclose.wav,		0, 0.50, 0		; door in main hall closes&lt;br /&gt;
$Name:	25	itemdraw.wav,		0, 0.50, 0		; glow in main hall opens&lt;br /&gt;
$Name:	26	Crane_1.wav,		0, 0.50, 0		; main hall - crane 1&lt;br /&gt;
$Name:	27	sub_amb.wav,		0, 0.60, 0		; ambient sound for menus off the main hall (looping)&lt;br /&gt;
$Name:	28	user_c.wav,		0, 0.70, 0		; popup dialog box appeared&lt;br /&gt;
$Name:	29	user_c.wav,		0, 0.70, 0		; popup dialog box goes away&lt;br /&gt;
$Name:	30	1_yes.wav,		0, 1.00, 0		; voice clip played when volume slider changes&lt;br /&gt;
$Name:	31	Crane_2.wav,		0, 0.50, 0		; main hall - crane 2&lt;br /&gt;
$Name:	32	Option1.wav,		0, 0.70, 0		; main hall options - mouse on &lt;br /&gt;
$Name:	33	Option2.wav,		0, 0.70, 0		; main hall options - mouse off&lt;br /&gt;
$Name:	34	Techroom1.wav,		0, 0.70, 0		; main hall tech room - mouse on&lt;br /&gt;
$Name:	35	Techroom2.wav,		0, 0.70, 0		; main hall tech room - mouse off&lt;br /&gt;
$Name:	36	Exitopen.wav,		0, 0.60, 0		; main hall exit open&lt;br /&gt;
$Name:	37	Exitclose.wav,		0, 0.60, 0		; main hall exit close&lt;br /&gt;
$Name:	38	pa_1.wav,		0, 0.50, 0		; main hall random intercom 1&lt;br /&gt;
$Name:	39	pa_2.wav,		0, 0.50, 0		; main hall random intercom 2&lt;br /&gt;
$Name:	40	pa_3.wav,		0, 0.50, 0		; main hall random intercom 3&lt;br /&gt;
$Name:	41	highlight.wav,		0, 0.40, 0		; spinning highlight in briefing&lt;br /&gt;
$Name:	42	noiz.wav,		0, 0.40, 0		; static in a briefing stage cut&lt;br /&gt;
$Name:	43	Camp_on.wav,		0, 0.70, 0		; main hall campaign - mouse on&lt;br /&gt;
$Name:	44	Camp_off.wav,		0, 0.70, 0		; main hall campaign - mouse off&lt;br /&gt;
$Name:	45	V_Hatch_Open.wav,	0, 0.70, 0		; vasudan hall - exit open  &lt;br /&gt;
$Name:	46	V_Hatch_Close.wav,	0, 0.70, 0		; vasudan hall - exit close&lt;br /&gt;
$Name:	47	V_Roll_Open.wav,	0, 0.80, 0		; vasudan hall - hatch open &lt;br /&gt;
$Name:	48	V_Roll_Close.wav,	0, 0.80, 0		; vasudan hall - hatch close&lt;br /&gt;
$Name:	49	V_Lift_Up.wav,		0, 0.70, 0		; vasudan hall - lift up&lt;br /&gt;
$Name:	50	V_Lift_Down.wav,	0, 0.70, 0		; vasudan hall - lift down&lt;br /&gt;
$Name:	51	V_Lite_On.wav,		0, 0.70, 0		; vasudan hall - glow on&lt;br /&gt;
$Name:	52	V_Lite_Off.wav,		0, 0.70, 0		; vasudan hall - glow off&lt;br /&gt;
$Name:	53	Skiff.wav,		0, 0.70, 0		; vasudan hall - skiff loop&lt;br /&gt;
$Name:	54	V_Map_On.wav,		0, 0.70, 0		; vasudan hall - screen on&lt;br /&gt;
$Name:	55	V_Map_Off.wav,		0, 0.70, 0		; vasudan hall - screen off&lt;br /&gt;
$Name:	56	V_Head_1.wav,		0, 0.70, 0		; vasudan hall - vasudan greeting&lt;br /&gt;
$Name:	57	V_Head_2.wav,		0, 0.70, 0		; vasudan hall - vasudan bye&lt;br /&gt;
$Name:	58	V_Pa_01.wav,		0, 0.70, 0		; vasudan hall - vasudan pa 1&lt;br /&gt;
$Name:	59	V_Pa_02.wav,		0, 0.70, 0		; vasudan hall - vasudan pa 2&lt;br /&gt;
$Name:	60	V_Pa_03.wav,		0, 0.70, 0		; vasudan hall - vasudan pa 3&lt;br /&gt;
$Name:	61	bup.wav,		0, 0.90, 0		; bup bup bup-bup bup bup&lt;br /&gt;
$Name:	62	thankyou.wav,		0, 0.90, 0		; thankyou&lt;br /&gt;
$Name:	63	V_Exit_Open.wav,	0, 0.70, 0		; vasudan hall - exit open&lt;br /&gt;
$Name:	64	V_Exit_Close.wav,	0, 0.70, 0		; vasudan hall - exit close&lt;br /&gt;
;&lt;br /&gt;
#Interface Sounds End&lt;br /&gt;
;&lt;br /&gt;
; Each species can have up to 4 different flyby sounds&lt;br /&gt;
; NOTE : the parse code expects to see exactly 2 sounds for terran, then 2 for vasudan, then 2 for shivan&lt;br /&gt;
;        the first sound for each species is the fighter/small flyby sound. the second is the bomber/big flyby sound&lt;br /&gt;
#Flyby Sounds Start&lt;br /&gt;
&lt;br /&gt;
$Terran:	0	T_flyby1.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
$Terran:	1	T_flyby2.wav,	0, 0.75, 1, 200, 400	; * Terran ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Vasudan:	0	V_flyby1.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
$Vasudan:	1	V_flyby2.wav,	0, 0.85, 1, 200, 400	; * Vasudan ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
$Shivan:	0	S_flyby1.wav,	0, 0.75, 1, 200, 400	; * SHIVAN ship1 flyby player sound (3d sound)&lt;br /&gt;
$Shivan:	1	S_flyby2.wav,	0, 0.75, 1, 200, 400	; * SHIVAN ship1 flyby player sound (3d sound)&lt;br /&gt;
&lt;br /&gt;
#Flyby Sounds End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Soulstorm%27s_OS_X_Launcher&amp;diff=42371</id>
		<title>Soulstorm&#039;s OS X Launcher</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Soulstorm%27s_OS_X_Launcher&amp;diff=42371"/>
		<updated>2013-04-01T19:10:03Z</updated>

		<summary type="html">&lt;p&gt;Jg18: updated note for Mountain Lion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up FreeSpace Open with Soulstorm&#039;s OS X launcher ==&lt;br /&gt;
&lt;br /&gt;
After downloading [http://www.hard-light.net/forums/index.php?topic=51391.0 Soulstorm&#039;s launcher], open the .dmg and copy the .app to your FreeSpace2 folder.&lt;br /&gt;
&lt;br /&gt;
To fix the &amp;quot;Flag file not found!&amp;quot; error message, click on the &amp;quot;...&amp;quot; button at the bottom of the launcher and then find the FSO build that you want to use. Choose a build that &#039;&#039;doesn&#039;t&#039;&#039; have the word &amp;quot;debug&amp;quot; in the name. [Debug builds are only for [http://www.hard-light.net/forums/index.php?topic=56279.msg1180359#msg1180359 generating debug logs]. You shouldn&#039;t use them if all you want to do is play.]&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Customize...&amp;quot; button to change the screen resolution.&lt;br /&gt;
&lt;br /&gt;
If you want to use the checkboxes, [[Command-Line_Reference|this page]] describes what they mean.&lt;br /&gt;
&lt;br /&gt;
If you decide to get the [[MediaVP|MediaVPs]], then to set up the launcher to use them, select the MediaVPs mod (either MediaVPs_3612 or mediavps, depending on which version you got) on the Gameplay + Speed tab.&lt;br /&gt;
&lt;br /&gt;
To use the flags mentioned in the MediaVPs release thread, check these checkboxes (grouped by tab):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Graphics&#039;&#039;&#039;: -spec, -glow, -env, -missile_lighting, -normal, -3dshockwave (personal preference)&lt;br /&gt;
* &#039;&#039;&#039;Gameplay + Speed&#039;&#039;&#039;: -3dwarp, -warp_flash (personal preference)&lt;br /&gt;
* &#039;&#039;&#039;HUD + Audio&#039;&#039;&#039;: -snd_preload&lt;br /&gt;
&lt;br /&gt;
You can type the lighting values for the Custom Flags into the white boxes on the Graphics tab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;Important:&amp;lt;/span&amp;gt; If you try one launcher and then the other one and then run into problems, see below.&lt;br /&gt;
&lt;br /&gt;
== If you have problems when you use one launcher and then use the other one ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some necessary background&#039;&#039;&#039;: The launchers store information about your selected mod and flags in a file called cmdline_fso.cfg. On Mac OS X, that file can be in either your home folder (Macintosh HD/Users/&amp;lt;YourUsername&amp;gt;/Library/FS2_Open/data/) or in your FreeSpace2 folder (by default, Macintosh HD/Applications/FreeSpace2/data/). If there&#039;s a cmdline_fso.cfg file in both places, they can conflict with each other and cause problems.&lt;br /&gt;
&lt;br /&gt;
Soulstorm&#039;s launcher saves cmdline_fso.cfg in your home folder, and wxLauncher saves it in your FreeSpace2 folder. Therefore, depending on which launcher you want to use, either delete or rename the copy of cmdline_fso.cfg that&#039;s in the folder that your launcher of choice &#039;&#039;doesn&#039;t&#039;&#039; use.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lion and Mountain Lion users&#039;&#039;&#039;: The Library folder is hidden by default on Lion and Mountain Lion. To temporarily unhide it, open Finder (or click on the Desktop), and while holding down the Option key, click on the Go menu at the top of the screen, then click on the Library folder option on the dropdown menu.&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Getting_started&amp;diff=38839</id>
		<title>Getting started</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Getting_started&amp;diff=38839"/>
		<updated>2012-06-27T05:14:40Z</updated>

		<summary type="html">&lt;p&gt;Jg18: removed outdated reference to Turey&amp;#039;s installer RIP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Getting Started: FreeSpace in a Nutshell&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hello and welcome! You&#039;ve arrived at &amp;quot;FreeSpace in a Nutshell&amp;quot;, an article for people new to FreeSpace. This article will provide information about the FreeSpace game series, FreeSpace Open and [[Hard Light Productions]]. There are also instructions for getting the games and installing FreeSpace Open.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is FreeSpace?==&lt;br /&gt;
FreeSpace is a series of space combat simulation games developed by Volition, Inc. and published by Interplay Entertainment. The games take place in the 24th century. Mankind, referred to as Terrans, has developed means for space traveling, further fueled by the discovery of subspace which makes interstellar travel not only possible but also fast and easy. As a result the Terrans have expanded their territory, eventually encountering another bipedal, sentient species; the Vasudans. However, due to cultural differences and difficulties in communicating with each other, the Galactic Terran Alliance (GTA) and the Parliamentary Vasudan Empire (PVE) end up fighting a war that lasts for 14 years.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 1===&lt;br /&gt;
Descent: FreeSpace — The Great War (also known as Conflict: FreeSpace — The Great War) is the first part of the series, released in 1998. The player is a pilot for the Galactic Terran Alliance. The GTA and the PVN have waged a war for 14 years and there doesn&#039;t seem to be an end in sight. However, suddenly a third race appears. These aliens, designated Shivans, are technologically superior, do not respond to diplomacy, and stage attacks against both the Terrans and the Vasudans. As a result, the GTA and PVN forge a truce and join forces in order to stop these alien invaders.&lt;br /&gt;
&lt;br /&gt;
FreeSpace 1 was well-received in its time by critics and players. Though it didn&#039;t offer much innovation in terms of gameplay and story, all aspects of the game worked well. The controls were easy to assume and the plot was quite compelling, as well as leaving a few questions in the air. Also crucial to the success of FS1 was the excellent mod support. Mod tools were released for the use of players and the game itself shipped with FreeSpace Editor (FRED) that allowed every player to design and create their own missions.&lt;br /&gt;
&lt;br /&gt;
It is good to note that although in certain regions the full title of the game is &#039;&#039;Descent: FreeSpace &amp;amp;ndash; The Great War&#039;&#039;, FS1 has very little to do with the Descent game series. The prefixes &amp;quot;Descent&amp;quot; and &amp;quot;Conflict&amp;quot; were used in some titles because there was already an archive tool called FreeSpace on the market.&lt;br /&gt;
&lt;br /&gt;
===Silent Threat===&lt;br /&gt;
&#039;&#039;Silent Threat&#039;&#039; is an expansion for &#039;&#039;FreeSpace 1&#039;&#039;, also released in 1998. It offered a few new ships and weapons and a campaign regarding a rogue faction within the intelligence branch of the GTA. &#039;&#039;Silent Threat&#039;&#039; was considered as a decent expansion pack. The main campaign suffered from bugs, weird plot development and generic mission designs, but was compensated by the selected user-made mission that were also included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 2===&lt;br /&gt;
&#039;&#039;FreeSpace 2&#039;&#039; was released in 1999 and continued the story 32 years after the events of FS1. The Terrans and Vasudans have increased their cooperation that started during the events of FS1, eventually culminating in the formation of the Galactic Terran-Vasudan Alliance (GTVA). However, not everyone appreciates the situation. A rebel group known as the Neo-Terran Front wages a war against the GTVA, because they do not see a future for the Terran race with the Vasudans.&lt;br /&gt;
&lt;br /&gt;
In terms of gameplay and contents, FreeSpace 2 unsurprisingly improved upon what FreeSpace 1 had offered. The gameplay as such remained the same, but new features were added. Among these were beam weapons for capital ships and missions taking place in nebula environments. Storywise FreeSpace 2 was somewhat different from FS1. Sometimes compared to &#039;&#039; The Empire Strikes Back&#039;&#039;, it didn&#039;t have a clear and happy ending, but instead left a number of questions floating in the air, puzzling and frustrating the fans.&lt;br /&gt;
&lt;br /&gt;
Though critically appraised, &#039;&#039;FreeSpace 2&#039;&#039; was not a commercial success, largely because of the poor advertisement. Many fans of &#039;&#039;FreeSpace 1&#039;&#039; were actually surprised to hear that &#039;&#039;FreeSpace 2&#039;&#039; had been published because the only real source for this information was through game reviews.&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 3?===&lt;br /&gt;
There is no &#039;&#039;FreeSpace 3&#039;&#039;. Volition was bought by THQ in 2000, with the licenses remaining with Interplay. Volition couldn&#039;t create a new game in the series and Interplay was not interested in publishing space simulation games because the genre was deemed dead. More information about FreeSpace 3 and related things can be read from [http://homepage.ntlworld.com/karajorma/FAQ/general.html#WhenFS3 Karajorma&#039;s FreeSpace FAQ].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Where to get the games===&lt;br /&gt;
Though the FreeSpace games are old, they are far from lost. [http://www.gog.com/ Good Old Games] (GOG) sells numerous old classic games, including &#039;&#039;FreeSpace&#039;&#039;, &#039;&#039;Silent Threat&#039;&#039;, and &#039;&#039;FreeSpace 2&#039;&#039;. People who do not yet own these games are recommended to buy them from Good Old Games, because GOG&#039;s games are cheap ($5.99 or $9.99), DRM-free and completely legal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The FreeSpace Source Code Project==&lt;br /&gt;
After Volition was bought by THQ, they no longer had any use for the game engine, since they couldn&#039;t develop new FreeSpace games. Volition released the source code of the FS2 game engine in 2002 so that FreeSpace fans could do what they wanted with it. A group of coders joined forces and formed the FreeSpace 2 Source Code Project (SCP) that began to, and still continues to, improve the game engine. The new open source game engine, known as FreeSpace Open (FSO), has several distingushing features that include:&lt;br /&gt;
*Linux and Mac OS X support&lt;br /&gt;
*OpenGL support&lt;br /&gt;
*OpenAL positional audio support&lt;br /&gt;
*Easy mod installation&lt;br /&gt;
*OGG support&lt;br /&gt;
*Hardware transform, clipping, and lighting&lt;br /&gt;
&lt;br /&gt;
===The FreeSpace Upgrade Project===&lt;br /&gt;
While the SCP improve the code of the game engine to enable new and exciting features, the FreeSpace Upgrade Project (FSU) creates material that takes advantage of the improved game engine. The FSU improves the ships, effects and background elements of FreeSpace 2 continuously. Every now and then these improvements are released as a pack. Known as MediaVPs, these assorted improvements enhance the graphics of the game drastically. Though [[Screenshots|screenshots]] give some idea of what the MediaVPs can do, the best way is to experience them in-game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Games based on the FSO engine===&lt;br /&gt;
In addition to improving the original FS2, the FSO engine has also made it possible for people to create new space sim games. for a list of FSO-based games, see [[Total conversions]]. Note that all of these games are standalone, which means that they do not require the original FS2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hard Light Productions==&lt;br /&gt;
Hard Light Productions (HLP) is the most active online FreeSpace community. HLP consists of hundreds of dedicated FreeSpace fans, with everyone contributing to the community in one or more ways. Members of HLP are&lt;br /&gt;
*Coders, who continuously improve the FSO game engine to include new and exciting features, as well as fix bugs in the game engine&lt;br /&gt;
*Modellers, who create new ship models and improve old ones&lt;br /&gt;
*Texture artists, who make textures for new and old ships&lt;br /&gt;
*Effect artists, who create effects such as weapons fire and afterburner trails&lt;br /&gt;
*FREDders, who use the FreeSpace Editor to create new missions and campaigns for people to play&lt;br /&gt;
*Support people, who help players with any problems regarding FreeSpace&lt;br /&gt;
*Players, who keep FreeSpace alive by playing the game year after year.&lt;br /&gt;
&lt;br /&gt;
HLP has forums for the SCP, where new versions of the FSO game engine are released. People can also request new features, as well as post their contributions in the FSO code. HLP also has a board for the FSU project. This board has release threads for the latest MediaVPs, as well as other graphical updates.&lt;br /&gt;
&lt;br /&gt;
In addition to these two important sections, HLP has boards for the following aspects:&lt;br /&gt;
*FreeSpace &amp;amp; FreeSpace Open Support - for any technical problems and questions related to FreeSpace&lt;br /&gt;
*FREDding - discussion about the FreeSpace Editor&lt;br /&gt;
*Modding - discussion about creating various modifications&lt;br /&gt;
*Multiplayer - discussion about FS2 multiplayer, accompanied by schedules&lt;br /&gt;
*Several mods and total conversions.&lt;br /&gt;
&lt;br /&gt;
Registering to HLP is free and highly recommended. Though viewing the forums is possible as a guest, only registered members can post in the forums and ask any questions they might have. And HLP is notorious for responding to questions quickly, sometimes within minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installing FreeSpace Open==&lt;br /&gt;
Installing FreeSpace Open is not rocket science as long as you follow the proper guidelines.&lt;br /&gt;
&lt;br /&gt;
===Installer===&lt;br /&gt;
The installer that used to exist (Turey&#039;s) no longer works. A new installer is being worked on, but it isn&#039;t finished yet. So for now, manual installation is the only install option. Don&#039;t worry, though, since manual installation is pretty easy.&lt;br /&gt;
&lt;br /&gt;
===Manual installation===&lt;br /&gt;
If you want to set things up yourself and possibly learn some things about the game in the process, you can install FSO manually. There are manual installation instructions for [http://www.hard-light.net/forums/index.php?topic=78710.0 Windows], [http://www.hard-light.net/forums/index.php?topic=79545.0 Linux], and [http://www.hard-light.net/forums/index.php?topic=79546.0 Mac OS X] among the stickied threads in the [http://www.hard-light.net/forums/index.php?board=7.0 General FreeSpace Discussion board], as well as a vast amount of [http://www.hard-light.net/forums/index.php?topic=56279.0 troubleshooting help] and some additional information on [[Installing FreeSpace 2 Open|this page]]. Don&#039;t think about manual installation as a 1337 h4x0r thing: there&#039;s more work involved, but none of it is hard.&lt;br /&gt;
&lt;br /&gt;
==Post-installation instructions==&lt;br /&gt;
After you&#039;ve installed FSO, there are some things you need to do in order to enjoy FSO to its fullest (these steps are also mentioned in the manual installation instructions mentioned earlier):&lt;br /&gt;
&lt;br /&gt;
*Open the Launcher and click the &amp;quot;Browse&amp;quot; button at the top.&lt;br /&gt;
*Select fs2_open_3_6_12_INF_r.exe (do not use a -d or -debug build) and click OK.&lt;br /&gt;
*Open the Audio/Joystick tab and make sure that Generic Software is selected.&lt;br /&gt;
*Open the Video tab and make sure that OpenGL and 32-bit colors are selected.&lt;br /&gt;
*If you&#039;ve installed the MediaVPs (the graphical updates):&lt;br /&gt;
**Open the MOD tab.&lt;br /&gt;
***Click &amp;quot;Select MOD&amp;quot; and select the &amp;quot;mediavps_3612&amp;quot; folder. Just select the folder, you do not need to select files inside it.&lt;br /&gt;
**Open the Features tab of the Launcher.&lt;br /&gt;
***Select &amp;quot;Graphics&amp;quot; as the list type.&lt;br /&gt;
***Tick at least &amp;quot;Enable specular&amp;quot;, &amp;quot;Enable glowmaps&amp;quot;, &amp;quot;Enable environment maps&amp;quot;, and &amp;quot;Enable normal maps&amp;quot;.&lt;br /&gt;
***Select &amp;quot;Gameplay&amp;quot; as the list type.&lt;br /&gt;
***Tick &amp;quot;Use models for ship selection&amp;quot; and &amp;quot;Use models for weapon selection&amp;quot;.&lt;br /&gt;
*Save the changes by clicking &amp;quot;Apply&amp;quot; at the bottom of the Launcher.&lt;br /&gt;
*Start the game by clicking &amp;quot;Run&amp;quot; (it is easiest to always use the Launcher to start FSO, so you may want to create a shortcut of it to your desktop).&lt;br /&gt;
**If this is your very first time running the game, you&#039;ll be asked for a &amp;quot;callsign&amp;quot;, that is, a name for your pilot/profile. Type it and press Enter. In subsequent runs, a list of pilots is shown here and you can select the one you like.&lt;br /&gt;
**When you get to the main hall, press F2, then select &amp;quot;Detail&amp;quot; from the top of the screen.&lt;br /&gt;
***Max all the settings in the &amp;quot;Detail&amp;quot; screen, unless you know what you&#039;re doing and have some compelling reason to do otherwise. These settings affect the quality of the graphics even when you are using everything the MediaVPs and the FSO engine provide.&lt;br /&gt;
&lt;br /&gt;
==Related links==&lt;br /&gt;
Here are a few useful FreeSpace-related links.&lt;br /&gt;
&lt;br /&gt;
*[http://www.gog.com/en/gamecard/freespace_2 FreeSpace 2 at Good Old Games] - The best place to buy FreeSpace 2 from.&lt;br /&gt;
*[http://www.hard-light.net/forums/index.php/topic,56279.0.html The FreeSpace Troubleshooting FAQ] - A FAQ that includes solutions to all the most common problems with FreeSpace, FreeSpace 2 and FreeSpace Open. If you have any problems with the games, start here.&lt;br /&gt;
*[http://www.freespacemods.net/ FreeSpaceMods.net] - A site that hosts a ton of FreeSpace-related things, including campaigns, mods and total conversions.&lt;br /&gt;
*[http://www.hard-light.net/ Hard-Light Productions.net] - The largest FreeSpace community on the web, where most modders and coders are available to provide help.&lt;br /&gt;
&lt;br /&gt;
[[Category:Main]]&lt;br /&gt;
[[Category:The games|*]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Sample_Lighting_Settings&amp;diff=38368</id>
		<title>Sample Lighting Settings</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Sample_Lighting_Settings&amp;diff=38368"/>
		<updated>2012-04-23T21:44:34Z</updated>

		<summary type="html">&lt;p&gt;Jg18: normalized Woolie Wool&amp;#039;s settings to have the same order as other sample settings (helpful for the launcher)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents some sample lighting settings. These must be entered into the optional command line parameters to have any effect. Best results are always achieved using the MediaVPs and with glowmaps, shinemaps, normal maps and environment maps turned on. Please consult the [[Command-Line Reference#Lighting|Command Line Reference]] page for specific notes on these settings.&lt;br /&gt;
&lt;br /&gt;
==FreeSpace Engine Default Settings==&lt;br /&gt;
These are the Engine defaults used when no settings are specified as shown [[Command-Line_Reference#Lighting|here]], for easy reference.&lt;br /&gt;
*-ambient_factor 128&lt;br /&gt;
*-spec_exp 16&lt;br /&gt;
*-spec_point 1.0&lt;br /&gt;
*-spec_static 1.0&lt;br /&gt;
*-spec_tube 1.0&lt;br /&gt;
*-ogl_spec 80&lt;br /&gt;
*-bloom_intensity 75&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Recommended &amp;quot;Baseline&amp;quot; Settings==&lt;br /&gt;
These are the recommended light settings as mentioned [[Command-Line_Reference#Lighting|here]], for easy reference.&lt;br /&gt;
* -ambient_factor 75&lt;br /&gt;
* -spec_exp 11&lt;br /&gt;
* -spec_point 0.6&lt;br /&gt;
* -spec_static 0.8&lt;br /&gt;
* -spec_tube 0.4&lt;br /&gt;
* -ogl_spec 60&lt;br /&gt;
&lt;br /&gt;
{{note|Copy and paste this line into your launcher&#039;s custom flags box to make it work: -ambient_factor 75 -spec_exp 11 -spec_point 0.6 -spec_static 0.8 -spec_tube 0.4 -ogl_spec 60}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DaBrain&#039;s Settings==&lt;br /&gt;
[[Image:Lighting-db1.jpg|thumb|DaBrain&#039;s settings feature relatively even lighting with a low specular value.]]&lt;br /&gt;
*-ambient_factor 10&lt;br /&gt;
*-no_emissive_light&lt;br /&gt;
*-spec_exp 7.0&lt;br /&gt;
*-spec_point 8.6&lt;br /&gt;
*-spec_static 12.8&lt;br /&gt;
*-spec_tube 5.0&lt;br /&gt;
&lt;br /&gt;
{{note|Copy and paste this line into your launcher&#039;s custom flags box to make it work: -ambient_factor 10 -no_emissive_light -spec_exp 7.0 -spec_point 8.6 -spec_static 12.8 -spec_tube 5.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Herra Tohtori&#039;s Settings==&lt;br /&gt;
[[Image:Lighting-herra.jpg|thumb|Herra Tohtori&#039;s settings feature high specularity and glossiness.]]&lt;br /&gt;
*-ambient_factor 35&lt;br /&gt;
*-no_emissive_light&lt;br /&gt;
*-spec_exp 15&lt;br /&gt;
*-spec_point 1.2&lt;br /&gt;
*-spec_static 1.5&lt;br /&gt;
*-spec_tube 1.5&lt;br /&gt;
*-ogl_spec 20&lt;br /&gt;
&lt;br /&gt;
{{note|Copy and paste this line into your launcher&#039;s custom flags box to make it work: -ambient_factor 35 -no_emissive_light -spec_exp 15 -spec_point 1.2 -spec_static 1.5 -spec_tube 1.5 -ogl_spec 20}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CKid&#039;s Settings==&lt;br /&gt;
[[Image:Lighting-ckid.jpg|thumb|CKid&#039;s settings adds emphasis on glowmaps and normal maps.]]&lt;br /&gt;
*-ambient_factor 35&lt;br /&gt;
*-no_emissive_light&lt;br /&gt;
*-spec_exp 16.7&lt;br /&gt;
*-spec_point 0.6&lt;br /&gt;
*-spec_static 0.9&lt;br /&gt;
*-spec_tube 1&lt;br /&gt;
&lt;br /&gt;
{{note|Copy and paste this line into your launcher&#039;s custom flags box to make it work: -ambient_factor 35  -no_emissive_light -spec_exp 16.7 -spec_point 0.6 -spec_static 0.9 -spec_tube 1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ColeCampbell666&#039;s Settings==&lt;br /&gt;
[[Image:Lighting-cc666.jpg|thumb|ColeCampbell666&#039;s settings result in a very dark environment with most of the lighting coming from weapons fire.]]&lt;br /&gt;
*-ambient_factor 0&lt;br /&gt;
*-no_emissive_light&lt;br /&gt;
*-spec_exp 11&lt;br /&gt;
*-spec_point .6&lt;br /&gt;
*-spec_static .8&lt;br /&gt;
*-spec_tube .4&lt;br /&gt;
*-ogl_spec 80&lt;br /&gt;
&lt;br /&gt;
{{note|Copy and paste this line into your launcher&#039;s custom flags box to make it work: -ambient_factor 0 -no_emissive_light -spec_exp 11 -spec_point .6 -spec_static .8 -spec_tube .4 -ogl_spec 80}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Castor&#039;s Settings==&lt;br /&gt;
[[Image:Lighting-castor.jpg|thumb|&#039;&#039;&amp;quot;The thing with &#039;darker&#039; settings is that the lower you go, the more dependent it will be on the quality/settings of the particular display you are viewing it on.&amp;quot;&#039;&#039; -- Castor]]&lt;br /&gt;
*-ambient_factor 75&lt;br /&gt;
*-spec_exp 7.0&lt;br /&gt;
*-spec_point 8.6&lt;br /&gt;
*-spec_static 3.0&lt;br /&gt;
*-spec_tube 5.0&lt;br /&gt;
&lt;br /&gt;
{{note|Copy and paste this line into your launcher&#039;s custom flags box to make it work: -ambient_factor 75 -spec_exp 7.0 -spec_point 8.6 -spec_static 3.0 -spec_tube 5.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spidey&#039;s Settings==&lt;br /&gt;
[[Image:Lighting-spidey.jpg|thumb|Spidey&#039;s settings nicely balance emphasis on diffuse, specular, and normal maps.]]&lt;br /&gt;
*-ambient_factor 5&lt;br /&gt;
*-spec_exp 15&lt;br /&gt;
*-spec_point 1.2&lt;br /&gt;
*-spec_static 1.7&lt;br /&gt;
*-spec_tube 1.5&lt;br /&gt;
*-ogl_spec 50&lt;br /&gt;
&lt;br /&gt;
{{note|Copy and paste this line into your launcher&#039;s custom flags box to make it work: -ambient_factor 5 -spec_exp 15 -spec_point 1.2 -spec_static 1.7 -spec_tube 1.5 -ogl_spec 50}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Woolie Wool&#039;s Settings==&lt;br /&gt;
[[Image:Lighting-woolie.png|thumb|Woolie Wool&#039;s settings use a very focused specular lighting to emphasize the normal maps and model contours, and a high ambient light setting to make lighting more dependent on the mission settings.]]&lt;br /&gt;
*-ambient_factor 105&lt;br /&gt;
*-no_emissive_light&lt;br /&gt;
*-spec_exp 9&lt;br /&gt;
*-spec_point 0.3&lt;br /&gt;
*-spec_static 0.8&lt;br /&gt;
*-spec_tube 0.7&lt;br /&gt;
*-ogl_spec 120&lt;br /&gt;
&lt;br /&gt;
{{note|Copy and paste this line into your launcher&#039;s custom flags box to make it work: -ambient_factor 105 -no_emissive_light -spec_exp 9 -spec_point 0.3 -spec_static 0.8 -spec_tube 0.7 -ogl_spec 120}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Source Code Project]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Portal:FRED&amp;diff=38328</id>
		<title>Portal:FRED</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Portal:FRED&amp;diff=38328"/>
		<updated>2012-04-18T03:03:42Z</updated>

		<summary type="html">&lt;p&gt;Jg18: corrected FRED_Open, removed outdated link to FRED builds, explained where builds can be found&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=0 align=center cellpadding=4 cellspacing=0 width=95% style=&amp;quot;margin: 0 0 1em 1em; background: #202020; border: 1px #AA2020 solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;The FRED Portal&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| border=0 align=right cellpadding=4 cellspacing=0 width=20% style=&amp;quot;margin: 0 0 1em 1em; background: #302020; border: 1px #AA2020 solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;&#039;&#039;Learning FRED&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[5 easy steps towards your FREDucation|5 Easy Steps]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[:Category:FRED Tips|FRED Hints and Tips]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[:Category:FRED Mistakes|Common FRED Mistakes]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[:Category:FRED Examples|FRED Examples]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[http://fredzone.hard-light.net/freddocs/ Volition&#039;s FRED2 Tutorial]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;&#039;&#039;SEXPs&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Retail SEXPs]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[SCP SEXPs]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;&#039;&#039;Highlighted FRED Features&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Skybox|Skybox]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Fiction Viewer]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[FRED Command Line Reference|Command Line Options]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Variables|Variables]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Improved Team Loadout|Improved Team Loadout]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Minor FRED Features|List of Minor Features]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Tutorial - Autopilot missions|Tutorial - Autopilot missions]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Counting with variables|Counting with Variables]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Tutorial - In-Mission Jumps|Tutorial - In-Mission Jumps]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;&#039;&#039;Mission Designer&#039;s Reference&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Nebula background|Nebula Backgrounds]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Friendly wing names|Friendly Wing Names]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Enemy wing names|Enemy Wing Names]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[FreeSpace 1 Ship Database]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[FreeSpace 2 Ship Database]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Fighter squadrons]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Stars and Planets|Stars and Planets]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Official Volition Node Map|Nodemap]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;&#039;&#039;FRED Troubleshooting&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color: white; height: 30px; 70%;&amp;quot;|[[Common FRED Issues|Common Issues FAQ]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Welcome to the FRED portal. Here you will find tips, guides, links, reference material, and other information regarding the FreeSpace Editor and mission design. What you will &#039;&#039;not&#039;&#039; find here is information on modding FreeSpace.  For that, please see the [[Portal:Modding|Modding Portal]].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a list of FRED-related topics, [[List of FRED-related topics|click here]] or browse the [[:Category:FRED|FRED category]].&lt;br /&gt;
&lt;br /&gt;
===The Editor===&lt;br /&gt;
[[Image:FRED_small.jpg|left|350px|thumb|FRED main window]]&lt;br /&gt;
FRED &#039;&#039;(main window pictured left)&#039;&#039; is the editor developed and used by [[Volition]] to make the missions and campaigns of both FreeSpace games.  As such, FRED is very powerful, once the initial learning period is over. Unlike mission and level editors released for other games, no functionality was removed from FRED.&lt;br /&gt;
&lt;br /&gt;
FRED is a fully 3D editor, allowing placement of objects on all axes (X, Y, and Z), has full symbolic expression (SEXP) scripting support, allows the inclusion of voice acting for briefings and mission messages, can create both subspace and nebula missions, contains a full-fledged campaign editor, including the ability to add cutscenes, and much more.&lt;br /&gt;
&lt;br /&gt;
===Versions===&lt;br /&gt;
There are actually three versions of this editor:  FRED, which was the original editor supplied with &#039;&#039;Descent: FreeSpace - The Great War&#039;&#039; and is largely obsolete now; FRED2, which was the updated editor supplied with &#039;&#039;FreeSpace 2&#039;&#039;, and finally FRED2_Open, which is the [[Source Code Project|open source]] version of the editor and the only one to support the many additions and improvements made, since the source code of FreeSpace 2 was released.&lt;br /&gt;
&lt;br /&gt;
The information found on these pages refers primarily to FRED2_Open, as it is the most recent version and the only one continually updated with support for new features, but some reference material is available for FRED2. The general continuity material in the &amp;quot;Mission Designer&#039;s Reference&amp;quot; section is valid for all versions of the editor.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The best way to become familiar with FRED2, and by association FRED2_Open, is to complete the FRED walkthrough, provided with the retail version of FreeSpace 2. The walkthrough covers everything needed to design a working mission, but it may not be available to those who do not own the retail version of FreeSpace 2. To alleviate this problem, a link to the online version of the walkthrough, without the sample mission, is provided below. Additional resources for FRED users of all skill levels are available in this section, with material in the &amp;quot;Learning FRED&amp;quot; section being geared specifically toward beginners.&lt;br /&gt;
&lt;br /&gt;
Also, keep in mind that FRED2_Open is under constant development.  This can create difficulties in keeping this section up-to-date, but as new features are added to the editor, the information box below will be updated to reflect the most recent changes.&lt;br /&gt;
&lt;br /&gt;
FRED2_Open builds are included with every released Windows build of FreeSpace Open (FSO), whether the release is an official (final) release, a release candidate, or a nightly build. Please see the [http://www.hard-light.net/forums/index.php?board=50.0 Source Code Project forum] and the [http://www.hard-light.net/forums/index.php?board=173.0 Nightly Builds forum] for builds. Note that during a release candidate process, new nightly builds are not released.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Recent FRED Additions}}&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[The FRED Academy]]&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
*[[Portal:Modding|The FreeSpace Modding Portal]]&lt;br /&gt;
*[[User-made Campaigns]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[http://www.hard-light.net/forums/index.php/board,89.0.html FRED Forum]&lt;br /&gt;
*[http://fredzone.hard-light.net/freddocs/ Volition&#039;s FRED2 Tutorial]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[Category:FreeSpace Wiki Portals]]&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
[[Category:FRED|*]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Getting_started&amp;diff=37527</id>
		<title>Getting started</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Getting_started&amp;diff=37527"/>
		<updated>2012-01-09T00:57:32Z</updated>

		<summary type="html">&lt;p&gt;Jg18: reduced prominence of link to wiki page, which at present is not as complete and as up-to-date as the forum tutorials&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Getting Started: FreeSpace in a Nutshell&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hello and welcome! You&#039;ve arrived at &amp;quot;FreeSpace in a Nutshell&amp;quot;, an article for people new to FreeSpace. This article will provide information about the FreeSpace game series, FreeSpace Open and [[Hard Light Productions]]. There are also instructions for getting the games and installing FreeSpace Open.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is FreeSpace?==&lt;br /&gt;
FreeSpace is a series of space combat simulation games developed by Volition, Inc. and published by Interplay Entertainment. The games take place in the 24th century. Mankind, referred to as Terrans, has developed means for space traveling, further fueled by the discovery of subspace which makes interstellar travel not only possible but also fast and easy. As a result the Terrans have expanded their territory, eventually encountering another bipedal, sentient species; the Vasudans. However, due to cultural differences and difficulties in communicating with each other, the Galactic Terran Alliance (GTA) and the Parliamentary Vasudan Empire (PVE) end up fighting a war that lasts for 14 years.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 1===&lt;br /&gt;
Descent: FreeSpace — The Great War (also known as Conflict: FreeSpace — The Great War) is the first part of the series, released in 1998. The player is a pilot for the Galactic Terran Alliance. The GTA and the PVN have waged a war for 14 years and there doesn&#039;t seem to be an end in sight. However, suddenly a third race appears. These aliens, designated Shivans, are technologically superior, do not respond to diplomacy, and stage attacks against both the Terrans and the Vasudans. As a result, the GTA and PVN forge a truce and join forces in order to stop these alien invaders.&lt;br /&gt;
&lt;br /&gt;
FreeSpace 1 was well-received in its time by critics and players. Though it didn&#039;t offer much innovation in terms of gameplay and story, all aspects of the game worked well. The controls were easy to assume and the plot was quite compelling, as well as leaving a few questions in the air. Also crucial to the success of FS1 was the excellent mod support. Mod tools were released for the use of players and the game itself shipped with FreeSpace Editor (FRED) that allowed every player to design and create their own missions.&lt;br /&gt;
&lt;br /&gt;
It is good to note that although in certain regions the full title of the game is &#039;&#039;Descent: FreeSpace &amp;amp;ndash; The Great War&#039;&#039;, FS1 has very little to do with the Descent game series. The prefixes &amp;quot;Descent&amp;quot; and &amp;quot;Conflict&amp;quot; were used in some titles because there was already an archive tool called FreeSpace on the market.&lt;br /&gt;
&lt;br /&gt;
===Silent Threat===&lt;br /&gt;
&#039;&#039;Silent Threat&#039;&#039; is an expansion for &#039;&#039;FreeSpace 1&#039;&#039;, also released in 1998. It offered a few new ships and weapons and a campaign regarding a rogue faction within the intelligence branch of the GTA. &#039;&#039;Silent Threat&#039;&#039; was considered as a decent expansion pack. The main campaign suffered from bugs, weird plot development and generic mission designs, but was compensated by the selected user-made mission that were also included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 2===&lt;br /&gt;
&#039;&#039;FreeSpace 2&#039;&#039; was released in 1999 and continued the story 32 years after the events of FS1. The Terrans and Vasudans have increased their cooperation that started during the events of FS1, eventually culminating in the formation of the Galactic Terran-Vasudan Alliance (GTVA). However, not everyone appreciates the situation. A rebel group known as the Neo-Terran Front wages a war against the GTVA, because they do not see a future for the Terran race with the Vasudans.&lt;br /&gt;
&lt;br /&gt;
In terms of gameplay and contents, FreeSpace 2 unsurprisingly improved upon what FreeSpace 1 had offered. The gameplay as such remained the same, but new features were added. Among these were beam weapons for capital ships and missions taking place in nebula environments. Storywise FreeSpace 2 was somewhat different from FS1. Sometimes compared to &#039;&#039; The Empire Strikes Back&#039;&#039;, it didn&#039;t have a clear and happy ending, but instead left a number of questions floating in the air, puzzling and frustrating the fans.&lt;br /&gt;
&lt;br /&gt;
Though critically appraised, &#039;&#039;FreeSpace 2&#039;&#039; was not a commercial success, largely because of the poor advertisement. Many fans of &#039;&#039;FreeSpace 1&#039;&#039; were actually surprised to hear that &#039;&#039;FreeSpace 2&#039;&#039; had been published because the only real source for this information was through game reviews.&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 3?===&lt;br /&gt;
There is no &#039;&#039;FreeSpace 3&#039;&#039;. Volition was bought by THQ in 2000, with the licenses remaining with Interplay. Volition couldn&#039;t create a new game in the series and Interplay was not interested in publishing space simulation games because the genre was deemed dead. More information about FreeSpace 3 and related things can be read from [http://homepage.ntlworld.com/karajorma/FAQ/general.html#WhenFS3 Karajorma&#039;s FreeSpace FAQ].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Where to get the games===&lt;br /&gt;
Though the FreeSpace games are old, they are far from lost. [http://www.gog.com/ Good Old Games] (GOG) sells numerous old classic games, including &#039;&#039;FreeSpace&#039;&#039;, &#039;&#039;Silent Threat&#039;&#039;, and &#039;&#039;FreeSpace 2&#039;&#039;. People who do not yet own these games are recommended to buy them from Good Old Games, because GOG&#039;s games are cheap ($5.99 or $9.99), DRM-free and completely legal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The FreeSpace Source Code Project==&lt;br /&gt;
After Volition was bought by THQ, they no longer had any use for the game engine, since they couldn&#039;t develop new FreeSpace games. Volition released the source code of the FS2 game engine in 2002 so that FreeSpace fans could do what they wanted with it. A group of coders joined forces and formed the FreeSpace 2 Source Code Project (SCP) that began to, and still continues to, improve the game engine. The new open source game engine, known as FreeSpace Open (FSO), has several distingushing features that include:&lt;br /&gt;
*Linux and Mac OS X support&lt;br /&gt;
*OpenGL support&lt;br /&gt;
*OpenAL positional audio support&lt;br /&gt;
*Easy mod installation&lt;br /&gt;
*OGG support&lt;br /&gt;
*Hardware transform, clipping, and lighting&lt;br /&gt;
&lt;br /&gt;
===The FreeSpace Upgrade Project===&lt;br /&gt;
While the SCP improve the code of the game engine to enable new and exciting features, the FreeSpace Upgrade Project (FSU) creates material that takes advantage of the improved game engine. The FSU improves the ships, effects and background elements of FreeSpace 2 continuously. Every now and then these improvements are released as a pack. Known as MediaVPs, these assorted improvements enhance the graphics of the game drastically. Though [[Screenshots|screenshots]] give some idea of what the MediaVPs can do, the best way is to experience them in-game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Games based on the FSO engine===&lt;br /&gt;
In addition to improving the original FS2, the FSO engine has also made it possible for people to create new space sim games. for a list of FSO-based games, see [[Total conversions]]. Note that all of these games are standalone, which means that they do not require the original FS2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hard Light Productions==&lt;br /&gt;
Hard Light Productions (HLP) is the most active online FreeSpace community. HLP consists of hundreds of dedicated FreeSpace fans, with everyone contributing to the community in one or more ways. Members of HLP are&lt;br /&gt;
*Coders, who continuously improve the FSO game engine to include new and exciting features, as well as fix bugs in the game engine&lt;br /&gt;
*Modellers, who create new ship models and improve old ones&lt;br /&gt;
*Texture artists, who make textures for new and old ships&lt;br /&gt;
*Effect artists, who create effects such as weapons fire and afterburner trails&lt;br /&gt;
*FREDders, who use the FreeSpace Editor to create new missions and campaigns for people to play&lt;br /&gt;
*Support people, who help players with any problems regarding FreeSpace&lt;br /&gt;
*Players, who keep FreeSpace alive by playing the game year after year.&lt;br /&gt;
&lt;br /&gt;
HLP has forums for the SCP, where new versions of the FSO game engine are released. People can also request new features, as well as post their contributions in the FSO code. HLP also has a board for the FSU project. This board has release threads for the latest MediaVPs, as well as other graphical updates.&lt;br /&gt;
&lt;br /&gt;
In addition to these two important sections, HLP has boards for the following aspects:&lt;br /&gt;
*FreeSpace &amp;amp; FreeSpace Open Support - for any technical problems and questions related to FreeSpace&lt;br /&gt;
*FREDding - discussion about the FreeSpace Editor&lt;br /&gt;
*Modding - discussion about creating various modifications&lt;br /&gt;
*Multiplayer - discussion about FS2 multiplayer, accompanied by schedules&lt;br /&gt;
*Several mods and total conversions.&lt;br /&gt;
&lt;br /&gt;
Registering to HLP is free and highly recommended. Though viewing the forums is possible as a guest, only registered members can post in the forums and ask any questions they might have. And HLP is notorious for responding to questions quickly, sometimes within minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installing FreeSpace Open==&lt;br /&gt;
Installing FreeSpace Open is not rocket science as long as you follow the proper guidelines.&lt;br /&gt;
&lt;br /&gt;
===Turey&#039;s FreeSpace Open Installer===&lt;br /&gt;
Turey&#039;s Installer is probably the most popular method for installing FSO. The idea of Turey&#039;s Installer is that it is a small program that downloads FSO-related files from the web. The user tells the Installer where his FreeSpace 2 installation is located, selects the components he wants to download and then starts up the Installer. It will then download the selected files from appropriate servers and place them to correct folders on the user&#039;s computer. Even though it has had its problems in the past, it is once again in working order and should provide working results. Instructions on how to use Turey&#039;s Installer can be found [http://www.hard-light.net/forums/index.php?topic=61606.0 here].&lt;br /&gt;
&lt;br /&gt;
===Manual installation===&lt;br /&gt;
If you want to set things up yourself and possibly learn some things about the game in the process, you can install FSO manually. There are manual installation instructions for [http://www.hard-light.net/forums/index.php?topic=78710.0 Windows], [http://www.hard-light.net/forums/index.php?topic=79545.0 Linux], and [http://www.hard-light.net/forums/index.php?topic=79546.0 Mac OS X] among the stickied threads in the [http://www.hard-light.net/forums/index.php?board=7.0 General FreeSpace Discussion board], as well as a vast amount of [http://www.hard-light.net/forums/index.php?topic=56279.0 troubleshooting help] and some additional information on [[Installing FreeSpace 2 Open|this page]]. Don&#039;t think about manual installation as a 1337 h4x0r thing: there&#039;s more work involved, but none of it is hard.&lt;br /&gt;
&lt;br /&gt;
==Post-installation instructions==&lt;br /&gt;
After you&#039;ve installed FSO, there are some things you need to do in order to enjoy FSO to its fullest (these steps are also mentioned in the manual installation instructions mentioned earlier):&lt;br /&gt;
&lt;br /&gt;
*Open the Launcher and click the &amp;quot;Browse&amp;quot; button at the top.&lt;br /&gt;
*Select fs2_open_3_6_12_INF_r.exe (do not use a -d or -debug build) and click OK.&lt;br /&gt;
*Open the Audio/Joystick tab and make sure that Generic Software is selected.&lt;br /&gt;
*Open the Video tab and make sure that OpenGL and 32-bit colors are selected.&lt;br /&gt;
*If you&#039;ve installed the MediaVPs (the graphical updates):&lt;br /&gt;
**Open the MOD tab.&lt;br /&gt;
***Click &amp;quot;Select MOD&amp;quot; and select the &amp;quot;mediavps_3612&amp;quot; folder. Just select the folder, you do not need to select files inside it.&lt;br /&gt;
**Open the Features tab of the Launcher.&lt;br /&gt;
***Select &amp;quot;Graphics&amp;quot; as the list type.&lt;br /&gt;
***Tick at least &amp;quot;Enable specular&amp;quot;, &amp;quot;Enable glowmaps&amp;quot;, &amp;quot;Enable environment maps&amp;quot;, and &amp;quot;Enable normal maps&amp;quot;.&lt;br /&gt;
***Select &amp;quot;Gameplay&amp;quot; as the list type.&lt;br /&gt;
***Tick &amp;quot;Use models for ship selection&amp;quot; and &amp;quot;Use models for weapon selection&amp;quot;.&lt;br /&gt;
*Save the changes by clicking &amp;quot;Apply&amp;quot; at the bottom of the Launcher.&lt;br /&gt;
*Start the game by clicking &amp;quot;Run&amp;quot; (it is easiest to always use the Launcher to start FSO, so you may want to create a shortcut of it to your desktop).&lt;br /&gt;
**If this is your very first time running the game, you&#039;ll be asked for a &amp;quot;callsign&amp;quot;, that is, a name for your pilot/profile. Type it and press Enter. In subsequent runs, a list of pilots is shown here and you can select the one you like.&lt;br /&gt;
**When you get to the main hall, press F2, then select &amp;quot;Detail&amp;quot; from the top of the screen.&lt;br /&gt;
***Max all the settings in the &amp;quot;Detail&amp;quot; screen, unless you know what you&#039;re doing and have some compelling reason to do otherwise. These settings affect the quality of the graphics even when you are using everything the MediaVPs and the FSO engine provide.&lt;br /&gt;
&lt;br /&gt;
==Related links==&lt;br /&gt;
Here are a few useful FreeSpace-related links.&lt;br /&gt;
&lt;br /&gt;
*[http://www.gog.com/en/gamecard/freespace_2 FreeSpace 2 at Good Old Games] - The best place to buy FreeSpace 2 from.&lt;br /&gt;
*[http://www.hard-light.net/forums/index.php/topic,56279.0.html The FreeSpace Troubleshooting FAQ] - A FAQ that includes solutions to all the most common problems with FreeSpace, FreeSpace 2 and FreeSpace Open. If you have any problems with the games, start here.&lt;br /&gt;
*[http://www.freespacemods.net/ FreeSpaceMods.net] - A site that hosts a ton of FreeSpace-related things, including campaigns, mods and total conversions.&lt;br /&gt;
*[http://www.hard-light.net/ Hard-Light Productions.net] - The largest FreeSpace community on the web, where most modders and coders are available to provide help.&lt;br /&gt;
&lt;br /&gt;
[[Category:Main]]&lt;br /&gt;
[[Category:The games|*]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Getting_started&amp;diff=37526</id>
		<title>Getting started</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Getting_started&amp;diff=37526"/>
		<updated>2012-01-09T00:42:38Z</updated>

		<summary type="html">&lt;p&gt;Jg18: updated links to Linux/OS X manual install instructions and other corrections/revisions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Getting Started: FreeSpace in a Nutshell&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hello and welcome! You&#039;ve arrived at &amp;quot;FreeSpace in a Nutshell&amp;quot;, an article for people new to FreeSpace. This article will provide information about the FreeSpace game series, FreeSpace Open and [[Hard Light Productions]]. There are also instructions for getting the games and installing FreeSpace Open.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is FreeSpace?==&lt;br /&gt;
FreeSpace is a series of space combat simulation games developed by Volition, Inc. and published by Interplay Entertainment. The games take place in the 24th century. Mankind, referred to as Terrans, has developed means for space traveling, further fueled by the discovery of subspace which makes interstellar travel not only possible but also fast and easy. As a result the Terrans have expanded their territory, eventually encountering another bipedal, sentient species; the Vasudans. However, due to cultural differences and difficulties in communicating with each other, the Galactic Terran Alliance (GTA) and the Parliamentary Vasudan Empire (PVE) end up fighting a war that lasts for 14 years.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 1===&lt;br /&gt;
Descent: FreeSpace — The Great War (also known as Conflict: FreeSpace — The Great War) is the first part of the series, released in 1998. The player is a pilot for the Galactic Terran Alliance. The GTA and the PVN have waged a war for 14 years and there doesn&#039;t seem to be an end in sight. However, suddenly a third race appears. These aliens, designated Shivans, are technologically superior, do not respond to diplomacy, and stage attacks against both the Terrans and the Vasudans. As a result, the GTA and PVN forge a truce and join forces in order to stop these alien invaders.&lt;br /&gt;
&lt;br /&gt;
FreeSpace 1 was well-received in its time by critics and players. Though it didn&#039;t offer much innovation in terms of gameplay and story, all aspects of the game worked well. The controls were easy to assume and the plot was quite compelling, as well as leaving a few questions in the air. Also crucial to the success of FS1 was the excellent mod support. Mod tools were released for the use of players and the game itself shipped with FreeSpace Editor (FRED) that allowed every player to design and create their own missions.&lt;br /&gt;
&lt;br /&gt;
It is good to note that although in certain regions the full title of the game is &#039;&#039;Descent: FreeSpace &amp;amp;ndash; The Great War&#039;&#039;, FS1 has very little to do with the Descent game series. The prefixes &amp;quot;Descent&amp;quot; and &amp;quot;Conflict&amp;quot; were used in some titles because there was already an archive tool called FreeSpace on the market.&lt;br /&gt;
&lt;br /&gt;
===Silent Threat===&lt;br /&gt;
&#039;&#039;Silent Threat&#039;&#039; is an expansion for &#039;&#039;FreeSpace 1&#039;&#039;, also released in 1998. It offered a few new ships and weapons and a campaign regarding a rogue faction within the intelligence branch of the GTA. &#039;&#039;Silent Threat&#039;&#039; was considered as a decent expansion pack. The main campaign suffered from bugs, weird plot development and generic mission designs, but was compensated by the selected user-made mission that were also included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 2===&lt;br /&gt;
&#039;&#039;FreeSpace 2&#039;&#039; was released in 1999 and continued the story 32 years after the events of FS1. The Terrans and Vasudans have increased their cooperation that started during the events of FS1, eventually culminating in the formation of the Galactic Terran-Vasudan Alliance (GTVA). However, not everyone appreciates the situation. A rebel group known as the Neo-Terran Front wages a war against the GTVA, because they do not see a future for the Terran race with the Vasudans.&lt;br /&gt;
&lt;br /&gt;
In terms of gameplay and contents, FreeSpace 2 unsurprisingly improved upon what FreeSpace 1 had offered. The gameplay as such remained the same, but new features were added. Among these were beam weapons for capital ships and missions taking place in nebula environments. Storywise FreeSpace 2 was somewhat different from FS1. Sometimes compared to &#039;&#039; The Empire Strikes Back&#039;&#039;, it didn&#039;t have a clear and happy ending, but instead left a number of questions floating in the air, puzzling and frustrating the fans.&lt;br /&gt;
&lt;br /&gt;
Though critically appraised, &#039;&#039;FreeSpace 2&#039;&#039; was not a commercial success, largely because of the poor advertisement. Many fans of &#039;&#039;FreeSpace 1&#039;&#039; were actually surprised to hear that &#039;&#039;FreeSpace 2&#039;&#039; had been published because the only real source for this information was through game reviews.&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 3?===&lt;br /&gt;
There is no &#039;&#039;FreeSpace 3&#039;&#039;. Volition was bought by THQ in 2000, with the licenses remaining with Interplay. Volition couldn&#039;t create a new game in the series and Interplay was not interested in publishing space simulation games because the genre was deemed dead. More information about FreeSpace 3 and related things can be read from [http://homepage.ntlworld.com/karajorma/FAQ/general.html#WhenFS3 Karajorma&#039;s FreeSpace FAQ].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Where to get the games===&lt;br /&gt;
Though the FreeSpace games are old, they are far from lost. [http://www.gog.com/ Good Old Games] (GOG) sells numerous old classic games, including &#039;&#039;FreeSpace&#039;&#039;, &#039;&#039;Silent Threat&#039;&#039;, and &#039;&#039;FreeSpace 2&#039;&#039;. People who do not yet own these games are recommended to buy them from Good Old Games, because GOG&#039;s games are cheap ($5.99 or $9.99), DRM-free and completely legal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The FreeSpace Source Code Project==&lt;br /&gt;
After Volition was bought by THQ, they no longer had any use for the game engine, since they couldn&#039;t develop new FreeSpace games. Volition released the source code of the FS2 game engine in 2002 so that FreeSpace fans could do what they wanted with it. A group of coders joined forces and formed the FreeSpace 2 Source Code Project (SCP) that began to, and still continues to, improve the game engine. The new open source game engine, known as FreeSpace Open (FSO), has several distingushing features that include:&lt;br /&gt;
*Linux and Mac OS X support&lt;br /&gt;
*OpenGL support&lt;br /&gt;
*OpenAL positional audio support&lt;br /&gt;
*Easy mod installation&lt;br /&gt;
*OGG support&lt;br /&gt;
*Hardware transform, clipping, and lighting&lt;br /&gt;
&lt;br /&gt;
===The FreeSpace Upgrade Project===&lt;br /&gt;
While the SCP improve the code of the game engine to enable new and exciting features, the FreeSpace Upgrade Project (FSU) creates material that takes advantage of the improved game engine. The FSU improves the ships, effects and background elements of FreeSpace 2 continuously. Every now and then these improvements are released as a pack. Known as MediaVPs, these assorted improvements enhance the graphics of the game drastically. Though [[Screenshots|screenshots]] give some idea of what the MediaVPs can do, the best way is to experience them in-game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Games based on the FSO engine===&lt;br /&gt;
In addition to improving the original FS2, the FSO engine has also made it possible for people to create new space sim games. for a list of FSO-based games, see [[Total conversions]]. Note that all of these games are standalone, which means that they do not require the original FS2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hard Light Productions==&lt;br /&gt;
Hard Light Productions (HLP) is the most active online FreeSpace community. HLP consists of hundreds of dedicated FreeSpace fans, with everyone contributing to the community in one or more ways. Members of HLP are&lt;br /&gt;
*Coders, who continuously improve the FSO game engine to include new and exciting features, as well as fix bugs in the game engine&lt;br /&gt;
*Modellers, who create new ship models and improve old ones&lt;br /&gt;
*Texture artists, who make textures for new and old ships&lt;br /&gt;
*Effect artists, who create effects such as weapons fire and afterburner trails&lt;br /&gt;
*FREDders, who use the FreeSpace Editor to create new missions and campaigns for people to play&lt;br /&gt;
*Support people, who help players with any problems regarding FreeSpace&lt;br /&gt;
*Players, who keep FreeSpace alive by playing the game year after year.&lt;br /&gt;
&lt;br /&gt;
HLP has forums for the SCP, where new versions of the FSO game engine are released. People can also request new features, as well as post their contributions in the FSO code. HLP also has a board for the FSU project. This board has release threads for the latest MediaVPs, as well as other graphical updates.&lt;br /&gt;
&lt;br /&gt;
In addition to these two important sections, HLP has boards for the following aspects:&lt;br /&gt;
*FreeSpace &amp;amp; FreeSpace Open Support - for any technical problems and questions related to FreeSpace&lt;br /&gt;
*FREDding - discussion about the FreeSpace Editor&lt;br /&gt;
*Modding - discussion about creating various modifications&lt;br /&gt;
*Multiplayer - discussion about FS2 multiplayer, accompanied by schedules&lt;br /&gt;
*Several mods and total conversions.&lt;br /&gt;
&lt;br /&gt;
Registering to HLP is free and highly recommended. Though viewing the forums is possible as a guest, only registered members can post in the forums and ask any questions they might have. And HLP is notorious for responding to questions quickly, sometimes within minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installing FreeSpace Open==&lt;br /&gt;
Installing FreeSpace Open is not rocket science as long as you follow the proper guidelines.&lt;br /&gt;
&lt;br /&gt;
===Turey&#039;s FreeSpace Open Installer===&lt;br /&gt;
Turey&#039;s Installer is probably the most popular method for installing FSO. The idea of Turey&#039;s Installer is that it is a small program that downloads FSO-related files from the web. The user tells the Installer where his FreeSpace 2 installation is located, selects the components he wants to download and then starts up the Installer. It will then download the selected files from appropriate servers and place them to correct folders on the user&#039;s computer. Even though it has had its problems in the past, it is once again in working order and should provide working results. Instructions on how to use Turey&#039;s Installer can be found [http://www.hard-light.net/forums/index.php?topic=61606.0 here].&lt;br /&gt;
&lt;br /&gt;
===Manual installation [[Installing fs2 open | (details)]]===&lt;br /&gt;
If you want to set things up yourself and possibly learn some things about the game in the process, you can install FSO manually. There are manual installation instructions for [http://www.hard-light.net/forums/index.php?topic=78710.0 Windows], [http://www.hard-light.net/forums/index.php?topic=79545.0 Linux], and [http://www.hard-light.net/forums/index.php?topic=79546.0 Mac OS X] among the stickied threads in the [http://www.hard-light.net/forums/index.php?board=7.0 General FreeSpace Discussion board], as well as a vast amount of [http://www.hard-light.net/forums/index.php?topic=56279.0 troubleshooting help]. Don&#039;t think about manual installation as a 1337 h4x0r thing: there&#039;s more work involved, but none of it is hard.&lt;br /&gt;
&lt;br /&gt;
==Post-installation instructions==&lt;br /&gt;
After you&#039;ve installed FSO, there are some things you need to do in order to enjoy FSO to its fullest (these steps are also mentioned in the manual installation instructions mentioned earlier):&lt;br /&gt;
&lt;br /&gt;
*Open the Launcher and click the &amp;quot;Browse&amp;quot; button at the top.&lt;br /&gt;
*Select fs2_open_3_6_12_INF_r.exe (do not use a -d or -debug build) and click OK.&lt;br /&gt;
*Open the Audio/Joystick tab and make sure that Generic Software is selected.&lt;br /&gt;
*Open the Video tab and make sure that OpenGL and 32-bit colors are selected.&lt;br /&gt;
*If you&#039;ve installed the MediaVPs (the graphical updates):&lt;br /&gt;
**Open the MOD tab.&lt;br /&gt;
***Click &amp;quot;Select MOD&amp;quot; and select the &amp;quot;mediavps_3612&amp;quot; folder. Just select the folder, you do not need to select files inside it.&lt;br /&gt;
**Open the Features tab of the Launcher.&lt;br /&gt;
***Select &amp;quot;Graphics&amp;quot; as the list type.&lt;br /&gt;
***Tick at least &amp;quot;Enable specular&amp;quot;, &amp;quot;Enable glowmaps&amp;quot;, &amp;quot;Enable environment maps&amp;quot;, and &amp;quot;Enable normal maps&amp;quot;.&lt;br /&gt;
***Select &amp;quot;Gameplay&amp;quot; as the list type.&lt;br /&gt;
***Tick &amp;quot;Use models for ship selection&amp;quot; and &amp;quot;Use models for weapon selection&amp;quot;.&lt;br /&gt;
*Save the changes by clicking &amp;quot;Apply&amp;quot; at the bottom of the Launcher.&lt;br /&gt;
*Start the game by clicking &amp;quot;Run&amp;quot; (it is easiest to always use the Launcher to start FSO, so you may want to create a shortcut of it to your desktop).&lt;br /&gt;
**If this is your very first time running the game, you&#039;ll be asked for a &amp;quot;callsign&amp;quot;, that is, a name for your pilot/profile. Type it and press Enter. In subsequent runs, a list of pilots is shown here and you can select the one you like.&lt;br /&gt;
**When you get to the main hall, press F2, then select &amp;quot;Detail&amp;quot; from the top of the screen.&lt;br /&gt;
***Max all the settings in the &amp;quot;Detail&amp;quot; screen, unless you know what you&#039;re doing and have some compelling reason to do otherwise. These settings affect the quality of the graphics even when you are using everything the MediaVPs and the FSO engine provide.&lt;br /&gt;
&lt;br /&gt;
==Related links==&lt;br /&gt;
Here are a few useful FreeSpace-related links.&lt;br /&gt;
&lt;br /&gt;
*[http://www.gog.com/en/gamecard/freespace_2 FreeSpace 2 at Good Old Games] - The best place to buy FreeSpace 2 from.&lt;br /&gt;
*[http://www.hard-light.net/forums/index.php/topic,56279.0.html The FreeSpace Troubleshooting FAQ] - A FAQ that includes solutions to all the most common problems with FreeSpace, FreeSpace 2 and FreeSpace Open. If you have any problems with the games, start here.&lt;br /&gt;
*[http://www.freespacemods.net/ FreeSpaceMods.net] - A site that hosts a ton of FreeSpace-related things, including campaigns, mods and total conversions.&lt;br /&gt;
*[http://www.hard-light.net/ Hard-Light Productions.net] - The largest FreeSpace community on the web, where most modders and coders are available to provide help.&lt;br /&gt;
&lt;br /&gt;
[[Category:Main]]&lt;br /&gt;
[[Category:The games|*]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Getting_started&amp;diff=37525</id>
		<title>Getting started</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Getting_started&amp;diff=37525"/>
		<updated>2012-01-09T00:34:17Z</updated>

		<summary type="html">&lt;p&gt;Jg18: removed some instructions that are already included in the linked-to instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;font size=3&amp;gt;&#039;&#039;&#039;Getting Started: FreeSpace in a Nutshell&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hello and welcome! You&#039;ve arrived at &amp;quot;FreeSpace in a Nutshell&amp;quot;, an article for people new to FreeSpace. This article will provide information about the FreeSpace game series, FreeSpace Open and [[Hard Light Productions]]. There are also instructions for getting the games and installing FreeSpace Open.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==What is FreeSpace?==&lt;br /&gt;
FreeSpace is a series of space combat simulation games developed by Volition, Inc. and published by Interplay Entertainment. The games take place in the 24th century. Mankind, referred to as Terrans, has developed means for space traveling, further fueled by the discovery of subspace which makes interstellar travel not only possible but also fast and easy. As a result the Terrans have expanded their territory, eventually encountering another bipedal, sentient species; the Vasudans. However, due to cultural differences and difficulties in communicating with each other, the Galactic Terran Alliance (GTA) and the Parliamentary Vasudan Empire (PVE) end up fighting a war that lasts for 14 years.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 1===&lt;br /&gt;
Descent: FreeSpace — The Great War (also known as Conflict: FreeSpace — The Great War) is the first part of the series, released in 1998. The player is a pilot for the Galactic Terran Alliance. The GTA and the PVN have waged a war for 14 years and there doesn&#039;t seem to be an end in sight. However, suddenly a third race appears. These aliens, designated Shivans, are technologically superior, do not respond to diplomacy, and stage attacks against both the Terrans and the Vasudans. As a result, the GTA and PVN forge a truce and join forces in order to stop these alien invaders.&lt;br /&gt;
&lt;br /&gt;
FreeSpace 1 was well-received in its time by critics and players. Though it didn&#039;t offer much innovation in terms of gameplay and story, all aspects of the game worked well. The controls were easy to assume and the plot was quite compelling, as well as leaving a few questions in the air. Also crucial to the success of FS1 was the excellent mod support. Mod tools were released for the use of players and the game itself shipped with FreeSpace Editor (FRED) that allowed every player to design and create their own missions.&lt;br /&gt;
&lt;br /&gt;
It is good to note that although in certain regions the full title of the game is &#039;&#039;Descent: FreeSpace &amp;amp;ndash; The Great War&#039;&#039;, FS1 has very little to do with the Descent game series. The prefixes &amp;quot;Descent&amp;quot; and &amp;quot;Conflict&amp;quot; were used in some titles because there was already an archive tool called FreeSpace on the market.&lt;br /&gt;
&lt;br /&gt;
===Silent Threat===&lt;br /&gt;
&#039;&#039;Silent Threat&#039;&#039; is an expansion for &#039;&#039;FreeSpace 1&#039;&#039;, also released in 1998. It offered a few new ships and weapons and a campaign regarding a rogue faction within the intelligence branch of the GTA. &#039;&#039;Silent Threat&#039;&#039; was considered as a decent expansion pack. The main campaign suffered from bugs, weird plot development and generic mission designs, but was compensated by the selected user-made mission that were also included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 2===&lt;br /&gt;
&#039;&#039;FreeSpace 2&#039;&#039; was released in 1999 and continued the story 32 years after the events of FS1. The Terrans and Vasudans have increased their cooperation that started during the events of FS1, eventually culminating in the formation of the Galactic Terran-Vasudan Alliance (GTVA). However, not everyone appreciates the situation. A rebel group known as the Neo-Terran Front wages a war against the GTVA, because they do not see a future for the Terran race with the Vasudans.&lt;br /&gt;
&lt;br /&gt;
In terms of gameplay and contents, FreeSpace 2 unsurprisingly improved upon what FreeSpace 1 had offered. The gameplay as such remained the same, but new features were added. Among these were beam weapons for capital ships and missions taking place in nebula environments. Storywise FreeSpace 2 was somewhat different from FS1. Sometimes compared to &#039;&#039; The Empire Strikes Back&#039;&#039;, it didn&#039;t have a clear and happy ending, but instead left a number of questions floating in the air, puzzling and frustrating the fans.&lt;br /&gt;
&lt;br /&gt;
Though critically appraised, &#039;&#039;FreeSpace 2&#039;&#039; was not a commercial success, largely because of the poor advertisement. Many fans of &#039;&#039;FreeSpace 1&#039;&#039; were actually surprised to hear that &#039;&#039;FreeSpace 2&#039;&#039; had been published because the only real source for this information was through game reviews.&lt;br /&gt;
&lt;br /&gt;
===FreeSpace 3?===&lt;br /&gt;
There is no &#039;&#039;FreeSpace 3&#039;&#039;. Volition was bought by THQ in 2000, with the licenses remaining with Interplay. Volition couldn&#039;t create a new game in the series and Interplay was not interested in publishing space simulation games because the genre was deemed dead. More information about FreeSpace 3 and related things can be read from [http://homepage.ntlworld.com/karajorma/FAQ/general.html#WhenFS3 Karajorma&#039;s FreeSpace FAQ].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Where to get the games===&lt;br /&gt;
Though the FreeSpace games are old, they are far from lost. [http://www.gog.com/ Good Old Games] (GOG) sells numerous old classic games, including &#039;&#039;FreeSpace&#039;&#039;, &#039;&#039;Silent Threat&#039;&#039;, and &#039;&#039;FreeSpace 2&#039;&#039;. People who do not yet own these games are recommended to buy them from Good Old Games, because GOG&#039;s games are cheap ($5.99 or $9.99), DRM-free and completely legal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The FreeSpace Source Code Project==&lt;br /&gt;
After Volition was bought by THQ, they no longer had any use for the game engine, since they couldn&#039;t develop new FreeSpace games. Volition released the source code of the FS2 game engine in 2002 so that FreeSpace fans could do what they wanted with it. A group of coders joined forces and formed the FreeSpace 2 Source Code Project (SCP) that began to, and still continues to, improve the game engine. The new open source game engine, known as FreeSpace Open (FSO), has several distingushing features that include:&lt;br /&gt;
*Linux and Mac OS X support&lt;br /&gt;
*OpenGL support&lt;br /&gt;
*OpenAL positional audio support&lt;br /&gt;
*Easy mod installation&lt;br /&gt;
*OGG support&lt;br /&gt;
*Hardware transform, clipping, and lighting&lt;br /&gt;
&lt;br /&gt;
===The FreeSpace Upgrade Project===&lt;br /&gt;
While the SCP improve the code of the game engine to enable new and exciting features, the FreeSpace Upgrade Project (FSU) creates material that takes advantage of the improved game engine. The FSU improves the ships, effects and background elements of FreeSpace 2 continuously. Every now and then these improvements are released as a pack. Known as MediaVPs, these assorted improvements enhance the graphics of the game drastically. Though [[Screenshots|screenshots]] give some idea of what the MediaVPs can do, the best way is to experience them in-game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Games based on the FSO engine===&lt;br /&gt;
In addition to improving the original FS2, the FSO engine has also made it possible for people to create new space sim games. for a list of FSO-based games, see [[Total conversions]]. Note that all of these games are standalone, which means that they do not require the original FS2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hard Light Productions==&lt;br /&gt;
Hard Light Productions (HLP) is the most active online FreeSpace community. HLP consists of hundreds of dedicated FreeSpace fans, with everyone contributing to the community in one or more ways. Members of HLP are&lt;br /&gt;
*Coders, who continuously improve the FSO game engine to include new and exciting features, as well as fix bugs in the game engine&lt;br /&gt;
*Modellers, who create new ship models and improve old ones&lt;br /&gt;
*Texture artists, who make textures for new and old ships&lt;br /&gt;
*Effect artists, who create effects such as weapons fire and afterburner trails&lt;br /&gt;
*FREDders, who use the FreeSpace Editor to create new missions and campaigns for people to play&lt;br /&gt;
*Support people, who help players with any problems regarding FreeSpace&lt;br /&gt;
*Players, who keep FreeSpace alive by playing the game year after year.&lt;br /&gt;
&lt;br /&gt;
HLP has forums for the SCP, where new versions of the FSO game engine are released. People can also request new features, as well as post their contributions in the FSO code. HLP also has a board for the FSU project. This board has release threads for the latest MediaVPs, as well as other graphical updates.&lt;br /&gt;
&lt;br /&gt;
In addition to these two important sections, HLP has boards for the following aspects:&lt;br /&gt;
*FreeSpace &amp;amp; FreeSpace Open Support - for any technical problems and questions related to FreeSpace&lt;br /&gt;
*FREDding - discussion about the FreeSpace Editor&lt;br /&gt;
*Modding - discussion about creating various modifications&lt;br /&gt;
*Multiplayer - discussion about FS2 multiplayer, accompanied by schedules&lt;br /&gt;
*Several mods and total conversions.&lt;br /&gt;
&lt;br /&gt;
Registering to HLP is free and highly recommended. Though viewing the forums is possible as a guest, only registered members can post in the forums and ask any questions they might have. And HLP is notorious for responding to questions quickly, sometimes within minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installing FreeSpace Open==&lt;br /&gt;
Installing FreeSpace Open is not rocket science as long as you follow the proper guidelines.&lt;br /&gt;
&lt;br /&gt;
===Turey&#039;s FreeSpace Open Installer===&lt;br /&gt;
Turey&#039;s Installer is probably the most popular method for installing FSO. The idea of Turey&#039;s Installer is that it is a small program that downloads FSO-related files from the web. The user tells the Installer where his FreeSpace 2 installation is located, selects the components he wants to download and then starts up the Installer. It will then download the selected files from appropriate servers and place them to correct folders on the user&#039;s computer. Even though it has had its problems in the past, it is once again in working order and should provide working results. Instructions on how to use Turey&#039;s Installer can be found [http://www.hard-light.net/forums/index.php?topic=61606.0 here].&lt;br /&gt;
&lt;br /&gt;
===Manual installation [[Installing fs2 open | (details)]]===&lt;br /&gt;
If you want to do things yourself and possibly learn some things about the game in the process, you can install FSO manually. There are instructions for manual installation for [http://www.hard-light.net/forums/index.php?topic=78710.0 Windows] and [http://www.hard-light.net/forums/index.php?topic=60842.0 Linux/OS X] in the stickies in the [http://www.hard-light.net/forums/index.php?board=151.0 Tech Support board], as well as a vast amount of [http://www.hard-light.net/forums/index.php?topic=56279.0 troubleshooting help]. The Windows instructions in particular contain links to the most reliable and up-to-date components, accompanied by short explanations on what does what. And don&#039;t think about manual installation as a 1337 h4x0r thing. There&#039;s more work involved, but it is all easy in the end, and you&#039;ll most likely gain more from manual installation. Also, by installing FSO manually you are free (to a degree) to choose just what you want to install in the first place. You won&#039;t have to download graphical enhancements and user-made campaigns unless you want to.&lt;br /&gt;
&lt;br /&gt;
==Post-installation instructions==&lt;br /&gt;
After you&#039;ve installed FSO, there are some things you need to do in order to enjoy FSO to its fullest (these steps are also mentioned in the manual installation instructions mentioned earlier):&lt;br /&gt;
&lt;br /&gt;
*Open the Launcher and click the &amp;quot;Browse&amp;quot; button at the top.&lt;br /&gt;
*Select fs2_open_3_6_12_INF_r.exe (do not use a -d or -debug build) and click OK.&lt;br /&gt;
*Open the Audio/Joystick tab and make sure that Generic Software is selected.&lt;br /&gt;
*Open the Video tab and make sure that OpenGL and 32-bit colors are selected.&lt;br /&gt;
*If you&#039;ve installed the MediaVPs (the graphical updates):&lt;br /&gt;
**Open the MOD tab.&lt;br /&gt;
***Click &amp;quot;Select MOD&amp;quot; and select the &amp;quot;mediavps_3612&amp;quot; folder. Just select the folder, you do not need to select files inside it.&lt;br /&gt;
**Open the Features tab of the Launcher.&lt;br /&gt;
***Select &amp;quot;Graphics&amp;quot; as the list type.&lt;br /&gt;
***Tick at least &amp;quot;Enable specular&amp;quot;, &amp;quot;Enable glowmaps&amp;quot;, &amp;quot;Enable environment maps&amp;quot;, and &amp;quot;Enable normal maps&amp;quot;.&lt;br /&gt;
***Select &amp;quot;Gameplay&amp;quot; as the list type.&lt;br /&gt;
***Tick &amp;quot;Use models for ship selection&amp;quot; and &amp;quot;Use models for weapon selection&amp;quot;.&lt;br /&gt;
*Save the changes by clicking &amp;quot;Apply&amp;quot; at the bottom of the Launcher.&lt;br /&gt;
*Start the game by clicking &amp;quot;Run&amp;quot; (it is easiest to always use the Launcher to start FSO, so you may want to create a shortcut of it to your desktop).&lt;br /&gt;
**If this is your very first time running the game, you&#039;ll be asked for a &amp;quot;callsign&amp;quot;, that is, a name for your pilot/profile. Type it and press Enter. In subsequent runs, a list of pilots is shown here and you can select the one you like.&lt;br /&gt;
**When you get to the main hall, press F2, then select &amp;quot;Detail&amp;quot; from the top of the screen.&lt;br /&gt;
***Max all the settings in the &amp;quot;Detail&amp;quot; screen, unless you know what you&#039;re doing and have some compelling reason to do otherwise. These settings affect the quality of the graphics even when you are using everything the MediaVPs and the FSO engine provide.&lt;br /&gt;
&lt;br /&gt;
==Related links==&lt;br /&gt;
Here are a few useful FreeSpace-related links.&lt;br /&gt;
&lt;br /&gt;
*[http://www.gog.com/en/gamecard/freespace_2 FreeSpace 2 at Good Old Games] - The best place to buy FreeSpace 2 from.&lt;br /&gt;
*[http://www.hard-light.net/forums/index.php/topic,56279.0.html The FreeSpace Troubleshooting FAQ] - A FAQ that includes solutions to all the most common problems with FreeSpace, FreeSpace 2 and FreeSpace Open. If you have any problems with the games, start here.&lt;br /&gt;
*[http://www.freespacemods.net/ FreeSpaceMods.net] - A site that hosts a ton of FreeSpace-related things, including campaigns, mods and total conversions.&lt;br /&gt;
*[http://www.hard-light.net/ Hard-Light Productions.net] - The largest FreeSpace community on the web, where most modders and coders are available to provide help.&lt;br /&gt;
&lt;br /&gt;
[[Category:Main]]&lt;br /&gt;
[[Category:The games|*]]&lt;/div&gt;</summary>
		<author><name>Jg18</name></author>
	</entry>
</feed>