<?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=MjnMixael</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=MjnMixael"/>
	<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php/Special:Contributions/MjnMixael"/>
	<updated>2026-11-15T10:40:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Template:Table270&amp;diff=67855</id>
		<title>Template:Table270</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Template:Table270&amp;diff=67855"/>
		<updated>2026-11-10T17:29:51Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Created page with &amp;quot;&amp;lt;noinclude&amp;gt;Table270&amp;lt;/noinclude&amp;gt; &amp;lt;div style=&amp;quot;padding: 1px 2px 1px 2px; background-color: #16210A; border: solid 1px #51BE08; padding: 0px 4px; font-size:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;[[Category:Templates|Table270]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 1px 2px 1px 2px; background-color: #16210A; border: solid 1px #51BE08; padding: 0px 4px; font-size: -1; color: #7BE833&amp;quot;&amp;gt;&#039;&#039;&#039;&amp;lt;font color=#7BE833&amp;gt;FS2 Open, 27.0&amp;lt;/font&amp;gt;:&#039;&#039;&#039; {{{1}}}&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Guide_to_FS_mod_translations&amp;diff=67853</id>
		<title>Guide to FS mod translations</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Guide_to_FS_mod_translations&amp;diff=67853"/>
		<updated>2026-10-28T18:39:36Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Translations have been quite rare in [[FreeSpace 2]] despite the longevity of the community, so community member &#039;&#039;&#039;Achille44&#039;&#039;&#039; decided to create this guide, hoping it will motivate some people to join the endeavor. The objective of this tutorial is to explain how to translate FreeSpace 2 mods into non English languages.&lt;br /&gt;
&lt;br /&gt;
This guide will be divided in 2 parts:&lt;br /&gt;
# Internationalization - this part will be interesting for modders who want to make their mod easily translatable, or translators really motivated and who are ready to dive into technical stuff themselves.&lt;br /&gt;
# Localization - this part will focus on the translation itself, so translators can directly skip to this part.&lt;br /&gt;
&lt;br /&gt;
===Internationalization (i18n)===&lt;br /&gt;
Let&#039;s start with a bit of wikipedia explanation: &amp;quot;internationalization is the process of designing a software application so that it can be adapted to various languages and regions without engineering changes.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Historically, FreeSpace 2 has always been terrible in terms of internationalization, many parts of the original game were &amp;quot;hardcoded&amp;quot;, which means that they were just not translatable, so translations could only be partial. But thanks to the hard work of the SCP devs, most of the game is now translatable.&lt;br /&gt;
&lt;br /&gt;
BUT so far, most of the modders don&#039;t use the recent internationalization features for their mods, probably because the process is quite tedious and difficult to maintain. And given the small number of translations and translators, the effort may not seem worth it.&lt;br /&gt;
&lt;br /&gt;
Here is the list of folders/files which may contain strings that need to be internationalized: &amp;lt;br&amp;gt;&lt;br /&gt;
/data &amp;lt;br&amp;gt;&lt;br /&gt;
* /fiction: if the mod uses visual novel briefings, those cannot handle localized files by just appending the language suffix, unlike fiction viewer files. so you need to adapt the vn script to use XSTR features. You can find an example in the French translation of Solaris.&lt;br /&gt;
* /missions:&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;.fc2 files: all &#039;$Name&#039; properties must use XSTR.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;.fs2 files:&lt;br /&gt;
*** &#039;$label&#039;, &#039;$Callsign&#039;, and &#039;$Name&#039; properties must use XSTR.&lt;br /&gt;
*** Convert sexp show-subtitle to show-subtitle-text, and then extract hardcoded strings from show-subtitle-text and put them into new messages so they can be translated.&lt;br /&gt;
*** Convert ship alt names to sexp variables so that they can be translated via modify-variable-xstr sexp.&lt;br /&gt;
*** Convert hardcoded texts in hud-set-text sexp to variables to be treated by XSTR.&lt;br /&gt;
*** Convert the special senders to variables in the following sexps: send-random-message, send-message, send-message-list, send-message-chain.&lt;br /&gt;
*** Add +Display Name property for all jump nodes.&lt;br /&gt;
*** Convert the first sexp parameter to variable for the following sexps: add-nav-waypoint, add-nav-ship, del-nav, hide-nav, restrict-nav, unhide-nav, unrestrict-nav, set-nav-visited, unset-nav-visited, select-nav, unselect-nav, is-nav-visited, lua-mark-ship, lua-mark-wing, ship-create, lua-staged-countdown-start, set-cargo, ship-change-alt-name.&lt;br /&gt;
*** Convert the second sexp parameter to variable for the following sexps: change-subsystem-name, lua-mark-subsystem.&lt;br /&gt;
*** Convert the fourth sexp parameter to variable for the following sexp: lua-turrethotkey-add.&lt;br /&gt;
*** Convert all sexp parameters to variables for the following sexps: set-nav-color, Add-Object-Role.&lt;br /&gt;
*** All the new variables must be modified at the beginning of the mission in a new event with the modify-variable-xstr sexp.&lt;br /&gt;
*** When using FRED, check &#039;Always save Dipplay Names&#039; in the Settings to allow the use of ship display names. Keep in mind that the ship display names are not added automatically by Fred, so you&#039;ll have to edit the file manually to add them.&lt;br /&gt;
* /tables:&lt;br /&gt;
** Controlconfigdefaults.tbl: all &#039;$Text&#039; properties must use XSTR.&lt;br /&gt;
** credits.tbl and *-crd.tbm files: all lines to be translated must be wrapped into XSTR function.&lt;br /&gt;
** cutscenes.tbl and *-csn.tbm files: all &#039;$Name&#039; properties must use XSTR.&lt;br /&gt;
** hud_gauges.tbl and *-hdg.tbm files: all &#039;Text&#039; properties must use XSTR.&lt;br /&gt;
** mainhall.tbl and *-hall.tbm files: all &#039;+Door description&#039; properties must use XSTR.&lt;br /&gt;
** medals.tbl and *-mdl.tbm files: all &#039;$Alt Name&#039; and &#039;$Name&#039; properties must use XSTR.&lt;br /&gt;
** rank.tbl and *-rnk.tbm files: all &#039;$Name&#039; properties must use XSTR.&lt;br /&gt;
** *-sct.tbm files: all strings displayed in-game must use the ba.XSTR() function.&lt;br /&gt;
** ships.tbl and *-shp.tbm files:&lt;br /&gt;
*** All ships must have an &#039;$Alt Name&#039; property with XSTR. If the ship is present in different files (using +nocreate), you only need one $Alt Name.&lt;br /&gt;
*** For each &#039;$Subsystem&#039;, unless it is &#039;untargetable&#039; or it&#039;s &#039;afterburner&#039;, you&#039;ll need to add &#039;$Alt Subsystem Name&#039; (and &#039;$Alt Damage Popup Subsystem Name&#039; only for playable ships) with XSTR.&lt;br /&gt;
*** &#039;+Tech Description&#039; and &#039;+Length&#039; (only the one before &#039;$thruster&#039;) must use XSTR.&lt;br /&gt;
** weapons.tbl and *-wep.tbm files:&lt;br /&gt;
*** All weapons must have &#039;$Alt Name&#039;, &#039;+Title&#039; and &#039;Tech Title&#039; properties with XSTR. If the ship is present in different files (using +nocreate), you only need one $Alt Name.&lt;br /&gt;
*** &#039;$Turret Name&#039;, &#039;+Description&#039; and &#039;+Tech Description&#039; properties must use XSTR.&lt;br /&gt;
&lt;br /&gt;
In order to automate the process of internationalization across several mods, I developed a tool to do most of the work automatically. You can try it here if you are interested: https://codeberg.org/AchilleParmentier/FreeSpace2TranslationTools/releases.&lt;br /&gt;
&lt;br /&gt;
===Localization (l10n)===&lt;br /&gt;
It may seem obvious, but before you start translating a mod, you should first ask the authors for permission to avoid any unpleasant surprises.&lt;br /&gt;
====Setting your language====&lt;br /&gt;
The first step of any translation is to make your language supported by the game. To do so, create a file with the *-lcl.tbm pattern (e. g. fr-lcl.tbm) with the following content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$Language: French&lt;br /&gt;
+Extension: fr&lt;br /&gt;
+Special Character Index: 164&lt;br /&gt;
&lt;br /&gt;
#End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$Language property is the name of the section you will have to use in all the strings/tstrings files where you put your translations. This name will also be displayed in the language choice in the in-game settings.&lt;br /&gt;
+Extension property is the suffix you will use in all the language-specific files (see the list in the next chapter).&lt;br /&gt;
&lt;br /&gt;
Note that this step is not required if you translate a mod not using [https://github.com/MjnMixael/SCPUI/wiki SCPUI] with the French, German and Polish languages, as they are already supported by the original game.&lt;br /&gt;
&lt;br /&gt;
====In case your language uses special characters not provided by the original fonts====&lt;br /&gt;
In such case, you&#039;ll need an extra step to use another font. I can&#039;t help you to find what font you need to use, but you&#039;ll need to use a ttf file. Once you have found your desired font file, put it into /data/fonts.&lt;br /&gt;
&lt;br /&gt;
Then you have to tell the mod to use that font instead of the original file. To do so, find the fonts.tbl (and/or *-fnt.tbm) file in /data/tables, and change the $TrueType property with the name of your new font file for each font you want to change.&lt;br /&gt;
&lt;br /&gt;
Be aware that your new font might have a different size from the original and change how the text is displayed ingame. In that case you can modify the +Size, +Top offset and +Bottom offset properties to try to replicate the original display.&lt;br /&gt;
&lt;br /&gt;
====The files to translate====&lt;br /&gt;
From here we consider the mod we want to translate is technically ready, so as a translator I just want to know where to find the texts to translate.&lt;br /&gt;
&lt;br /&gt;
Regarding the tools, all txt/tbl/tbm files are simple text files and can be opened and modified with any text editing software, like notepad++ or VSCode.&lt;br /&gt;
&lt;br /&gt;
You&#039;ll find below the list of folders/files which can contain texts to be translated.&lt;br /&gt;
&lt;br /&gt;
=====Fiction=====&lt;br /&gt;
The *.txt files here can be translated by creating a copy of the same file with a language suffix (e. g. db_bosch.txt =&amp;gt; db_bosch-fr.txt).&lt;br /&gt;
&lt;br /&gt;
Some mods may include briefing files here, and these files cannot be translated this way. You&#039;ll have to either overwrite the original file, or modify the custom briefing script to make the content internationalized (check the French translation of Solaris to see an example).&lt;br /&gt;
&lt;br /&gt;
=====Movies=====&lt;br /&gt;
Here you can add subtitles to cutscenes by creating a *.srt file with the name of the video with language suffix (e. g. colossus.mp4 =&amp;gt; colossus-fr.srt).&lt;br /&gt;
&lt;br /&gt;
Subtitle Edit (https://www.nikse.dk/subtitleedit) is a good user-friendly tool to create your subtitles.&lt;br /&gt;
&lt;br /&gt;
If you want to use a distinct font for movie subtitles, create a new one in fonts.tbl, and in game_settings.tbl or any *-mod.tbm file, add the $Movie Subtitle Font property (in the following example, &#039;Movie&#039; is the name of the new font):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#OTHER SETTINGS&lt;br /&gt;
	$Movie Subtitle Font: Movie&lt;br /&gt;
&lt;br /&gt;
#END&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====HUD and interface=====&lt;br /&gt;
Some mods use custom interfaces, with images containing text. You will need some basic image editing skill to translate them. Beware that these files are not internationalized, so you will have to overwrite the original files!&lt;br /&gt;
&lt;br /&gt;
=====Maps=====&lt;br /&gt;
In some mods you can find *.dds files which contain nameplates for terran ships. You will need some basic image editing skill to translate them. Beware that these files are not internationalized, so you will have to overwrite the original files!&lt;br /&gt;
&lt;br /&gt;
=====Tables=====&lt;br /&gt;
The following files are the most important, as they contain most of the text displayed in the game:&lt;br /&gt;
&lt;br /&gt;
strings.tbl, and all files with the *-lcl.tbm pattern (these contain all the menu strings)&lt;br /&gt;
tstrings.tbl and all files with the *-tlc.tbm pattern (these contain the mod content strings, so all missions, ship and weapon descriptions, credits...)&lt;br /&gt;
&lt;br /&gt;
They can be translated by adding a new section with the name of your language copying inside all the original XSTR entries replaced with your new translation.&lt;br /&gt;
&lt;br /&gt;
Example of an original strings.tbl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#Default&lt;br /&gt;
&lt;br /&gt;
0, &amp;quot;Player ship changed to %s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example of a translated strings.tbl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#Default&lt;br /&gt;
&lt;br /&gt;
0, &amp;quot;Player ship changed to %s&amp;quot;&lt;br /&gt;
;the rest of the strings&lt;br /&gt;
&lt;br /&gt;
#End&lt;br /&gt;
&lt;br /&gt;
#French&lt;br /&gt;
&lt;br /&gt;
0, &amp;quot;Vaisseau du joueur à présent %s&amp;quot;&lt;br /&gt;
;the rest of the strings&lt;br /&gt;
&lt;br /&gt;
#End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The number at the beginning of each row must stay the same between languages, as it is the ID used by the game to look for the matching string.&lt;br /&gt;
&lt;br /&gt;
Note that the new translated section can also be placed in a distinct *-lcl.tbm/*-tlc.tbm file if you are familiar enough with modular tables.&lt;br /&gt;
&lt;br /&gt;
Some variables can be used inside the strings for special uses. These are the most useful but there are probably more:&lt;br /&gt;
* $quote: replaces the &amp;quot; character, as it is already used by the table format to recognize the string&lt;br /&gt;
* $rank: this will be replaced by the current rank of the player ($Alt Name property in rank.tbl)&lt;br /&gt;
* $rtitle: similar to $rank, but can be used in case your language uses different names for the same rank depending on the context ($Title property in rank.tbl)&lt;br /&gt;
&lt;br /&gt;
=====Voices=====&lt;br /&gt;
Contains all the voice acting files, if you are extremely motivated. Beware that these files are not internationalized, so you will have to overwrite the original files!&lt;br /&gt;
&lt;br /&gt;
====Updating your existing translation====&lt;br /&gt;
Let&#039;s say you previously translated the v1 of a mod, and now you want to translate v2 but you are not sure what strings changed or were added between both versions.&lt;br /&gt;
&lt;br /&gt;
For this case, I developed a tool you can use: https://codeberg.org/AchilleParmentier/FreeSpace2TranslationTools/releases.&lt;br /&gt;
In the second tab &#039;Update translations&#039; of this tool, you can automatically transfer all unchanged texts from your translated v1 to your new translated v2 file (even if they don&#039;t have the same ID anymore). Then you will only have to translate the new and modified strings.&lt;br /&gt;
&lt;br /&gt;
===Related Links===&lt;br /&gt;
[https://www.hard-light.net/forums/index.php?topic=99978.0 &#039;&#039;&#039;Discussion thread | Hard-Light Productions&#039;&#039;&#039;]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Briefing_Text&amp;diff=67852</id>
		<title>Briefing Text</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Briefing_Text&amp;diff=67852"/>
		<updated>2026-10-28T18:39:03Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These tags can be used to manipulate text messages in command and mission briefings, and the fiction viewer. As of r10846, they work in debriefings, too.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/MjnMixael/SCPUI/wiki SCPUI] has its own HTML-based syntax to styling text.&lt;br /&gt;
&lt;br /&gt;
==Colors==&lt;br /&gt;
&lt;br /&gt;
The hue of these colors can be changed with the [[Colors.tbl]] but the tags will remain the same. As of r10926, the tags can also be customized.&lt;br /&gt;
&lt;br /&gt;
A note about color tags: The color tag will work on all font until a space is encountered. There needs to be a space after the tag, before the text to be colorized (although it&#039;s not actually required after r5840, it is recommended due to the way FSO wordwrapping works). There is a method to color spans of text, which is discussed in the Misc section below.&lt;br /&gt;
&lt;br /&gt;
Example: &#039;$b This is $b blue $b text&#039; will show as &#039;&amp;lt;span style=&amp;quot;color:#5D5D80&amp;quot;&amp;gt;This&amp;lt;/span&amp;gt; is &amp;lt;span style=&amp;quot;color:#5D5D80&amp;quot;&amp;gt;blue text&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#FFFFFF&amp;quot;&amp;gt;Bright White&amp;lt;/span&amp;gt;: $W&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#696969&amp;quot;&amp;gt;Standard (default) White&amp;lt;/span&amp;gt;: $w&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#000000&amp;quot;&amp;gt;Black&amp;lt;/span&amp;gt;: $k (Black)&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#5D5D80&amp;quot;&amp;gt;Standard Blue&amp;lt;/span&amp;gt;: $b&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#B9B9FF&amp;quot;&amp;gt;Bright Blue&amp;lt;/span&amp;gt;: $B&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#007800&amp;quot;&amp;gt;Standard Green&amp;lt;/span&amp;gt;: $g&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#32BE32&amp;quot;&amp;gt;Bright Green&amp;lt;/span&amp;gt;: $G&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#FFFF7A&amp;quot;&amp;gt;Standard Yellow&amp;lt;/span&amp;gt;: $y&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#FFFF00&amp;quot;&amp;gt;Bright Yellow&amp;lt;/span&amp;gt;: $Y&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#414141&amp;quot;&amp;gt;Gray&amp;lt;/span&amp;gt;: $e&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#A0A0A0&amp;quot;&amp;gt;Silver&amp;lt;/span&amp;gt;: $E&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#A090A0&amp;quot;&amp;gt;Violet Gray&amp;lt;/span&amp;gt;: $v&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#C068C0&amp;quot;&amp;gt;Violet&amp;lt;/span&amp;gt;: $V&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#7E0606&amp;quot;&amp;gt;Standard Red&amp;lt;/span&amp;gt;: $r&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#C80000&amp;quot;&amp;gt;Bright Red&amp;lt;/span&amp;gt;: $R&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#B99696&amp;quot;&amp;gt;Pink&amp;lt;/span&amp;gt;: $p&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#E6BEBE&amp;quot;&amp;gt;Bright Pink&amp;lt;/span&amp;gt;: $P&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#FF7F00&amp;quot;&amp;gt;Orange&amp;lt;/span&amp;gt;: $o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
&lt;br /&gt;
*The breaking tag $| can be used to stop a color before a character.&lt;br /&gt;
**$g Standard Green = &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#007800&amp;quot;&amp;gt;Standard&amp;lt;/span&amp;gt; Green&#039;&#039;&#039;.&lt;br /&gt;
**$g Stand$|ard Green = &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#007800&amp;quot;&amp;gt;Stand&amp;lt;/span&amp;gt;ard Green&#039;&#039;&#039;.&lt;br /&gt;
***If the above causes wordwrapping oddness, you may want to write $g Stand$| ard Green (output is identical: &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#007800&amp;quot;&amp;gt;Stand&amp;lt;/span&amp;gt;ard Green&#039;&#039;&#039;).&lt;br /&gt;
*$quote will create double quotes.&lt;br /&gt;
**Goober is $quotesilly$quote = Goober is &amp;quot;silly&amp;quot;.&lt;br /&gt;
*$semicolon will create a semicolon.&lt;br /&gt;
*$callsign places the pilot name in its place.&lt;br /&gt;
*$rank places the player&#039;s rank in its place.&lt;br /&gt;
*$f, $h, &amp;amp; $n will color the text with the default colors for Friendly, Hostile and Neutral respectively. The colors are defined in the [[iff_defs.tbl]].&lt;br /&gt;
*Most special characters such as the comma &#039;,&#039;, question mark &#039;?&#039;, and exclamation point &#039;!&#039; cannot be colored as of 3.6.14.&lt;br /&gt;
*To color spans of text use $c{ and $}.&lt;br /&gt;
**The $y{ quick $g{ brown fox $r jumps over $} the lazy $} dog. = &#039;&#039;&#039;The &amp;lt;span style=&amp;quot;color:#FFFF7A&amp;quot;&amp;gt;quick &amp;lt;span style=&amp;quot;color:#007800&amp;quot;&amp;gt;brown fox &amp;lt;span style=&amp;quot;color:#7E0606&amp;quot;&amp;gt;jumps&amp;lt;/span&amp;gt; over&amp;lt;/span&amp;gt; the lazy&amp;lt;/span&amp;gt; dog.&#039;&#039;&#039;&lt;br /&gt;
**This method will color special characters such as the comma &#039;,&#039;, question mark &#039;?&#039;, and exclamation point &#039;!&#039;&lt;br /&gt;
**This method requires FSO build 8786 or later.&lt;br /&gt;
**As of r10846, color spans work across linebreaks as well (either manually-added, or automatic from wordwrapping).&lt;br /&gt;
&lt;br /&gt;
==Styling text in SCPUI==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/MjnMixael/SCPUI/wiki SCPUI] has its own HTML-based approach to styling text. It works everywhere that classic color tags do - briefings (including command, loop, and red alert briefings), debriefings, and the fiction viewer - but also the tech room, campaign descriptions, and nearly everywhere that long-form text is supported. For it to work in briefings, the text must be put in &amp;quot;HTML mode&amp;quot; by putting &amp;lt;code&amp;gt;!html&amp;lt;/code&amp;gt; at the start, followed by a space. Everywhere else will work without that tag.&lt;br /&gt;
&lt;br /&gt;
Text in HTML mode may contain HTML markup. Text may be styled using &amp;lt;code&amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;lt;/code&amp;gt; tags with appropriate classes drawn from common.rcss; inline styles are also supported. FSO and HTML both make use of double quotes and slashes; to minimize conflicts, using single quotes and writing slashes as &amp;lt;code&amp;gt;$slash&amp;lt;/code&amp;gt; is recommended. A complete example might look something like this: &amp;lt;code&amp;gt;!html &amp;amp;lt;span class=&#039;white&#039;&amp;amp;gt;Pilot attend!&amp;amp;lt;$slashspan&amp;amp;gt; Today, we&#039;ll be escorting the &amp;amp;lt;span class=&#039;green italic&#039;&amp;amp;gt;GTC Examplar&amp;amp;lt;$slashspan&amp;amp;gt; as she raids &amp;amp;lt;span class=&#039;red&#039;&amp;amp;gt;Shivan&amp;amp;lt;$slashspan&amp;amp;gt; positions throughout &amp;amp;lt;span class=&#039;yellow&#039;&amp;amp;gt;Gamma Draconis&amp;amp;lt;$slashspan&amp;amp;gt;.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is, however, rarely necessary to perform simple styling like this manually: SCPUI&#039;s [https://github.com/MjnMixael/SCPUI/wiki/keywords.tbl Keywords.tbl] may be used to automate common styling rules.&lt;br /&gt;
&lt;br /&gt;
[[Category:FRED Tips]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Game_settings.tbl&amp;diff=67851</id>
		<title>Game settings.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Game_settings.tbl&amp;diff=67851"/>
		<updated>2026-10-28T18:37:51Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCP_table}}&lt;br /&gt;
{{TableVersionGit|2025-02-10|642111676012bc6696f4024c40296a6c20b3b958}}&lt;br /&gt;
{{Tables}}&lt;br /&gt;
The &#039;&#039;&#039;game_settings.tbl&#039;&#039;&#039;, also known as mod.tbl, defines options that can be changed globally.  All settings are optional.&lt;br /&gt;
&lt;br /&gt;
This table is one of the [[Modular Tables]] and can be extended with xxx-mod.tbm&lt;br /&gt;
&lt;br /&gt;
If the version targeted in [[game_settings.tbl#$Target_Version:|target version]] is equal to or later than these listed, the following options are enabled by default:&lt;br /&gt;
{{Table220|&lt;br /&gt;
*[[game_settings.tbl#$Fixed_Turret_Collisions:|Fixed Turret Collisions]]&lt;br /&gt;
*[[game_settings.tbl#$Fixed_Missile_Detonation:|Fixed Missile Detonation]]&lt;br /&gt;
*[[game_settings.tbl#$Shockwaves_Damage_All_Object_Types_Once:|Shockwaves Damage All Object Types Once]]&lt;br /&gt;
*[[game_settings.tbl#$AI_use_framerate_independent_turning:|AI use framerate independent turning]]&lt;br /&gt;
*[[game_settings.tbl#$Use_host_orientation_for_set-camera-facing:|Use host orientation for set-camera-facing]]&lt;br /&gt;
}}&lt;br /&gt;
{{Table230|&lt;br /&gt;
*[[game_settings.tbl#$Shockwaves_Inherit_Parent_Weapon_Damage_Type:|Shockwaves Inherit Parent Weapon Damage Type]]&lt;br /&gt;
*[[game_settings.tbl#$Fixed_Chaining_To_Repeating_Events:|Fixed Chaining To Repeating Events]]&lt;br /&gt;
}}&lt;br /&gt;
{{Table240|&lt;br /&gt;
*[[game_settings.tbl#$Calculate_subsystem_hitpoints_after_parsing:|Calculate subsystem hitpoints after parsing]]}}&lt;br /&gt;
{{Table242|&lt;br /&gt;
*[[game_settings.tbl#$Fix_scripted_velocity:|Fix scripted velocity]]}}&lt;br /&gt;
{{Table250|&lt;br /&gt;
*[[game_settings.tbl#$Use_model_eyepoint_for_set-camera-host:|Use model eyepoint for set-camera-host]]&lt;br /&gt;
*[[game_settings.tbl#$Use_model_eyepoint_normals:|Use model eyepoint normals]]&lt;br /&gt;
*[[game_settings.tbl#$Fix_asteroid/debris_field_bounding_box_checks:|Fix asteroid/debris field bounding box checks]]&lt;br /&gt;
*[[game_settings.tbl#$Disable_expensive_turret_target_check:|Disable expensive turret target check]]&lt;br /&gt;
*[[game_settings.tbl#$Skybox_internal_depth_consistency:|Skybox internal depth consistency]]&lt;br /&gt;
}}&lt;br /&gt;
{{Table260|&lt;br /&gt;
*[[game_settings.tbl#$Zero-radius_explosions_skip_fireballs:|Zero-radius explosions skip fireballs]]&lt;br /&gt;
*[[game_settings.tbl#$Render_insignias_as_decals:|Render insignias as decals:]]}}&lt;br /&gt;
{{Table262|&lt;br /&gt;
*[[game_settings.tbl#$Fix collision moment of inertia:|Fix collision moment of inertia]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#GAME SETTINGS==&lt;br /&gt;
Contains settings that affect how the engine works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Target Version:===&lt;br /&gt;
{{Table373|&lt;br /&gt;
Specifies the minimum version of FreeSpace Open that this mod supports. If the version specified here is greater than the version of the current build, an error message is displayed.&lt;br /&gt;
}}&lt;br /&gt;
{{Table381|&lt;br /&gt;
The $Minimum version option has been renamed to $Target Version. The old name is kept with the same functionality for backwards-compatibility.&lt;br /&gt;
&lt;br /&gt;
The target version specifies what version of the FSO engine this mod was created for. It will be used by the engine to enable or disable backwards-incompatible changes by default. The default value is 2.0 which specifies that the mod targets the retail engine version.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====+Major:====&lt;br /&gt;
{{Table373|&lt;br /&gt;
Required. Sets the major component of the target version.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Example: &#039;&#039;&#039;&#039;&#039;3&#039;&#039;&#039;&#039;&#039; (for a minimum version of 3.7.3.20151121)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====+Minor:====&lt;br /&gt;
{{Table373|&lt;br /&gt;
Required. Sets the minor component of the target version.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Example: &#039;&#039;&#039;&#039;&#039;7&#039;&#039;&#039;&#039;&#039; (for a minimum version of 3.7.3.20151121)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====+Build:====&lt;br /&gt;
{{Table373|&lt;br /&gt;
Required. Sets the build component of the target version.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Example: &#039;&#039;&#039;&#039;&#039;3&#039;&#039;&#039;&#039;&#039; (for a minimum version of 3.7.3.20151121)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====+Revision:====&lt;br /&gt;
{{Table373|&lt;br /&gt;
Sets the revision component of the target version. If no revision is given then all builds of that release are supported (even nightly builds if there are any).&lt;br /&gt;
For nightly builds this is the date in YYYYMMDD format.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Example: &#039;&#039;&#039;&#039;&#039;20151121&#039;&#039;&#039;&#039;&#039; (for a minimum version of 3.7.3.20151121)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Window title:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
Specifies the name of the FSO window when this mod is running. If blank or unspecified, the window will have the default title of &amp;quot;FreeSpace 2&amp;quot;.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Window icon:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
Specifies the icon filename of the FSO window when this mod is running. If blank or unspecified, the window will have the default icon.&lt;br /&gt;
&lt;br /&gt;
The icon should be in data/maps or data/interface, and can apparently be any single-frame image format supported by FSO. The default icon is .png.&lt;br /&gt;
&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===$Mod title:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Specifies the title of the mod and will be displayed at the mainhall near the FSO version.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Table250|&lt;br /&gt;
It is now possible to display the mod title on its own.  Previously, the mod version was also required.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Mod version:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Specifies the version of the mod and will be displayed at the mainhall near the FSO version. Can be a string or it can be semantic versioning such as 2.0.0.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Table250|&lt;br /&gt;
It is now possible to display the mod version on its own.  Previously, the mod title was also required.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Unicode mode:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
Enabled the Unicode text mode for this mod. In Unicode mode all text is assumed to be UTF-8 encoded Unicode and certain features are disabled if they do not have full Unicode support. Most notably, if this is enabled then the engine will no longer support the old bitmap fonts that were used by Retail FreeSpace. Only the newer TrueType fonts will be supported.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Splash screens:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
Defines a list of splash screens that FSO can display upon game startup. The actual image displayed is chosen at random from the applicable entries. Entries with exact aspect ratio matches will be prioritized first, followed by aspect ratio ranged matches, followed by entries without an aspect ratio specified.}}&lt;br /&gt;
&lt;br /&gt;
====+Bitmap:====&lt;br /&gt;
{{table232|&lt;br /&gt;
The name of the bitmap to use as a splash screen. Extension will be removed if included.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;+Bitmap: String&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
====+Aspect Ratio:====&lt;br /&gt;
{{table234|&lt;br /&gt;
Only consider this bitmap to be an applicable entry if the user&#039;s screen aspect ratio matches the specified number within +/- 0.01.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;+Aspect Ratio: Float&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
====+Aspect Ratio Min:====&lt;br /&gt;
{{table234|&lt;br /&gt;
Only consider this bitmap to be an applicable entry if the user&#039;s screen aspect ratio is at least the specified number.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;+Aspect Ratio Min: Float&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
====+Aspect Ratio Max:====&lt;br /&gt;
{{table234|&lt;br /&gt;
Only consider this bitmap to be an applicable entry if the user&#039;s screen aspect ratio is at most the specified number.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;+Aspect Ratio Max: Float&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Splash fade in time:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
Sets the time in milliseconds it takes for a splash screen to fade in.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Splash fade out time:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
Sets the time in milliseconds it takes for a splash screen to fade out.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Center splash logo:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
Sets whether the splash logo will be displayed in the middle of the screen.  If this is false (the default), it will be displayed at the top-left.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Disable FSO Internal Loadout Restoration System:===&lt;br /&gt;
{{Table234|&lt;br /&gt;
When the player configures the ships and weapons of the wings in the loadout screen, FSO will remember these settings and attempt to apply them again if the player quits the mission and comes back to it later.  FSO will only remember the most recent mission&#039;s loadout, so it will not attempt to restore the loadout if the player loads a different mission.  It will also not attempt this if the mission&#039;s &#039;&#039;$Modified:&#039;&#039; date has changed.  This flag can be used to prevent FSO from attempting restoration even if it normally would.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Lua API returns nil instead of invalid object:===&lt;br /&gt;
{{Table242|&lt;br /&gt;
A design choice very early in FSO&#039;s scripting development established that invalid results return invalid objects.  By using this flag, invalid results will return nil instead.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#LOCALIZATION SETTINGS==&lt;br /&gt;
Contains various settings related to localization and language support.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use tabled strings for the default language:===&lt;br /&gt;
{{Table202|&lt;br /&gt;
Causes the game to use the text in strings.tbl and tstrings.tbl even when the current language is English.  By default, the game will use the literal text in the source code and the data files (tables and missions) and will not look up the entry when the language is English.  For other languages, the translation is always used, if it exists, regardless of this setting.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Don&#039;t initalize built-in languages by default:===&lt;br /&gt;
{{Table240|&lt;br /&gt;
Prevent FSO from initializing the three additional built-in languages (German, French, and Polish).  This allows mods which don&#039;t support those languages to remove them from the [https://github.com/MjnMixael/SCPUI/wiki SCPUI] language selector.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Don&#039;t pre-empt training message voice:===&lt;br /&gt;
{{Table214|&lt;br /&gt;
Prevents training messages from being interrupted by other training messages.  If a training message has a voice file associated with it, or simulated speech is active, the next message will not be played until the current message has finished.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#CAMPAIGN SETTINGS==&lt;br /&gt;
This group contains various Campaign related settings and overrides.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default Campaign File Name:===&lt;br /&gt;
Defines which campaign will be selected by default for new pilots. A file extension is not needed and, if present, is removed by the code.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===#Ignored Campaign File Names===&lt;br /&gt;
Defines which campaigns, if present, will not appear in the Campaign Room. In the original implementation, only single-player campaigns could be ignored and file extensions were required, but see below.&lt;br /&gt;
{{Table371|As of 3.7.1, file extensions are not required and, if present, are removed by the code.}}&lt;br /&gt;
{{Table382|As of 3.8.2, file name comparisons are not case sensitive and multiplayer campaigns can be ignored.}}&lt;br /&gt;
====$Campaign File Name:====&lt;br /&gt;
File name of the campaign to ignore. Multiple entries may exist.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===#Ignored Mission File Names===&lt;br /&gt;
{{Table382|Defines which standalone missions, if present, will not appear in the Tech Room or Multiplayer Lobby.  Both single-player and multiplayer missions can be ignored, but missions which appear in a campaign cannot.  File extensions are not required and, if present, are removed by the code.  File name comparisons are not case sensitive.&lt;br /&gt;
====$Mission File Name:====&lt;br /&gt;
File name of the mission to ignore. Multiple entries may exist.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Red-alert applies to delayed ships:===&lt;br /&gt;
{{Table372|Controls whether red-alert saved statistics (hitpoints, weapons, subsystem strengths) will be restored for ships that are not present at mission start.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#HUD SETTINGS==&lt;br /&gt;
This group contains various HUD behavior settings and overrides&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Directive Wait Time:===&lt;br /&gt;
*Defines how long the game will wait before displaying a directive.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Values: &#039;&#039;&#039;&#039;&#039;Greater than or equal to 0 ms&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Cutscene camera displays HUD:===&lt;br /&gt;
Show the HUD when the cutscene camera is enabled.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In earlier versions of the code, this option was controlled by $Cutscene camera disables HUD: and had a default of YES.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Full color head animations:===&lt;br /&gt;
Enables full-color head ANIs. Normal head ANIs will appear in gray.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In earlier versions of the code, this option was controlled by $Color head animations with hud colors: and had a default of YES.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Don&#039;t automatically select a turret when targeting a ship:===&lt;br /&gt;
{{Table220|Uses FS1 behavior where targeting a new ship did not target any turrets.  In FS2 a turret is automatically targeted.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Auto select subsystem under reticle when targeting same ship:===&lt;br /&gt;
{{Table242|This is a streamlining of functionality, that makes it so one doesn&#039;t need to hit a second key to select the subsystem under the reticle. Instead once you have the capital ship selected, hit Target Under Reticle and it will target a subsystem under the reticle if the feature is enabled and there isn&#039;t a new target under the reticle.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Supernova hits at zero:===&lt;br /&gt;
{{Table222|&lt;br /&gt;
Adjusts the HUD timer so that the timer reaches zero when the supernova hits the player.  The actual timing is not affected -- whether the flag is enabled or not, the supernova will always hit the player when 5 seconds remain in the time specified in the sexp.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Always warn player about unbound keys used in Directives Gauge:===&lt;br /&gt;
{{Table222|&lt;br /&gt;
Ensures that the &amp;quot;Key Unbound&amp;quot; message will pop up for a directive with an unbound key in any single-player mission, not just a training mission. Note, that the default string (index 426) will still say &amp;quot;Warning\nYou have no control bound to the action \&amp;quot;%s\&amp;quot;.  You must do so before you can continue with training.&amp;quot; Thus, it is advised to change the string at index 426 using the -lcl.tbm to &amp;quot;Warning\nYou have no control bound to the action \&amp;quot;%s\&amp;quot;.  You must do so before you can continue with this mission.&amp;quot;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$HUD drop shadows enabled by default:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
If this flag is active, certain elements displayed on the HUD (all text, the main targeting reticle, and the background of the ETS gauges) will have a &amp;quot;drop shadow&amp;quot; effect.  Note that whether or not the flag is active, the player can set this using the &amp;quot;Toggle HUD Drop Shadows&amp;quot; control.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Unify scanning behavior:===&lt;br /&gt;
{{Table242|&lt;br /&gt;
*Unifies scanning behavior between subsystem, regular, and cargo allowing missions to use all scan types in all situations.&lt;br /&gt;
*Also allows changing the &amp;quot;Cargo:&amp;quot; text line in a mission by adding &amp;quot;$Cargo Title: STRING&amp;quot; after the &amp;quot;$Cargo 1:&amp;quot; or &amp;quot;$Cargo 2:&amp;quot; lines in the mission file. FRED UI support not yet added for $Cargo Title so you have to do it manually.&lt;br /&gt;
*When this flag is enabled, all ships, no matter the ship class, will react the same way to the cargo-related or scanning-related ship flags:&lt;br /&gt;
**They are not scannable by default&lt;br /&gt;
**Setting the &amp;quot;scannable&amp;quot; flag makes them scannable, and scanning the subsystem will reveal the cargo&lt;br /&gt;
**A new flag available with alter-ship-flag, &amp;quot;no-scanned-cargo&amp;quot;, changes the behavior to scanned/unscanned instead of revealing the cargo&lt;br /&gt;
**The &amp;quot;toggle-subsystem-scanning&amp;quot; flag must be set to swap full-ship scanning mode into subsystem scanning mode and works for all ship types&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Don&#039;t show callsigns in the escort list:===&lt;br /&gt;
{{Table242|&lt;br /&gt;
By default, callsigns are shown in the escort list using the same format as in the target box.  If this flag is active, callsigns will not be displayed.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Hide main Rearm/Repair items in Comms Gauge:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
Prevents 5. Rearm/Repair Subsys and 6. Abort Rearm from being shown in the squad messaging menu.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===$Always show selected item in Comms Gauge:===&lt;br /&gt;
{{Table262|&lt;br /&gt;
Ensures that the visual indicator for which is the active item in the squad messaging menu is always shown. Useful if you are using the select Comms menu item keys. By default this is not shown until the player presses the up or down key for the select Comms menu item keys.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#SEXP SETTINGS==&lt;br /&gt;
This group contains SEXP settings and overrides.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Loop SEXPs Then Arguments:===&lt;br /&gt;
Flips how when-argument settings loop. See: [http://www.hard-light.net/forums/index.php?topic=79602.0 SEXP Argument changes via mod.tbl] &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use Alternate Chaining Behavior:===&lt;br /&gt;
When set, this allows all events in a chain to repeat, instead of only the last one.  It makes the event chaining behavior act as people expected it to be in [http://scp.indiegames.us/mantis/view.php?id=82 Mantis #82].&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Fixed Chaining To Repeating Events:===&lt;br /&gt;
{{Table230|When set, this makes event chaining to repeated events work as designed - that is, the chained event will only be evaluated after the chain delay.  If the repeating event&#039;s interval is shorter than the chain delay, then the delay countdown will continually be restarted until all repetitions have completed.  Without this flag, FSO will emulate retail behavior which, due to a bug, allowed chained events to be evaluated immediately after a repeating event is first evaluated.&lt;br /&gt;
&lt;br /&gt;
NOTE: Although the name does not reflect it, the same issue affects repeating events that are evaluated by &amp;lt;tt&amp;gt;is-event-true-delay&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;is-event-false-delay&amp;lt;/tt&amp;gt;.  Without this flag, FSO will emulate retail behavior which causes these SEXP operators to ignore any delay when evaluating repeated events.  With this flag, the delay will be measured from when the final repeat iteration occurs.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
===$Use host orientation for set-camera-facing:===&lt;br /&gt;
{{Table220|When set, this will take into account the host orientation for cutscene cameras.  This is a bugfix for [https://github.com/scp-fs2open/fs2open.github.com/issues/3889 GitHub issue #3889].&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use model eyepoint for set-camera-host:===&lt;br /&gt;
{{Table250|The default behavior for set-camera-host is to position the camera at the origin coordinates (0,0,0) of the host.  This flag will make the camera use the model eyepoint instead.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use model eyepoint normals:===&lt;br /&gt;
{{Table250|If set, model eyepoints will respect the normal vector set for the eyepoint in the model file for the eyepoint.  If not set, model eyepoints will use the model&#039;s orientation.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Show-subtitle uses pixels:===&lt;br /&gt;
{{Table222|When set, SEXPs which display subtitles will read their arguments as pixels, not percentages.  If &amp;lt;code&amp;gt;$Show-subtitle base resolution:&amp;lt;/code&amp;gt; is set, these pixels will be scaled up or down as needed.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Show-subtitle base resolution:===&lt;br /&gt;
{{Table222|When set, subtitles are assumed to display at the appropriate size in the specified resolution, and will be scaled up or down if the current screen resolution is different.  If this is not set, or is set to a resolution less than (640, 480), subtitles will not be scaled.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;(Integer, Integer)&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;(-1, -1)&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$HUD-set-coords base resolution:===&lt;br /&gt;
{{Table232|The hud-set-coords SEXP has always used exact pixels, without regard for the current screen resolution.  This setting enables a similar scaling mechanism as &#039;&#039;$Show-subtitle base resolution:&#039;&#039;.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;(Integer, Integer)&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;(-1, -1)&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Always Show Directive Value Count:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*If this setting is enabled, Directive-as-Value values in Directives will always show the number. By default this is disabled, and only values &amp;gt; 1 are shown. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#GRAPHICS SETTINGS==&lt;br /&gt;
This group contains settings related to graphics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Enable External Shaders:===&lt;br /&gt;
Enables the use of external shader files. By default, the engine will use the built-in shaders.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default Detail Level:===&lt;br /&gt;
{{Table3615|&lt;br /&gt;
Determines which graphics detail level preset (low, medium, high, very high) acts as the default for new pilots.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039; (0-3)&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;3&#039;&#039;&#039;&#039;&#039; (very high)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Briefing Window FOV:===&lt;br /&gt;
{{Table371|&lt;br /&gt;
Determines the FOV in the briefing Icon window. Retail default for this is 0.29375; some previous versions of FSO used a value of 0.5.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039; (0.0 to 1.0)&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0.29375&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Generic Pain Flash Factor:===&lt;br /&gt;
{{Table373|&lt;br /&gt;
Determines the intensity of the pain red flash when the player is hit.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1.0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shield Pain Flash Factor:===&lt;br /&gt;
{{Table373|&lt;br /&gt;
Determines the intensity of a pain flash when the player&#039;s shields are hit. Color will match the current ships shield color defined in ships.tbl. A value of 0 will give retail behavior (no shield effect). Positive values will cause the effect to start at full intensity at full shields and go to next to no intensity at zero shields. Negative values will cause no effect at full shields and full effect at no shields. Values should be kept between -1.0 and 1.0 for good pilot visibility.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0.0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$EMP Pain Flash Factor:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Determines the intensity of the flash when the player is hit by an EMP blast or weapon.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1.0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
===$EMP Pain Flash Color:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Determines the RGB color value of the flash when the player is hit by an EMP blast or weapon.&lt;br /&gt;
*Syntax: Color, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;(255, 255, 127)&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
===$BMPMAN Slot Limit:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
Determines the maximum number of textures that can be loaded simultaneously. This includes every frame of an animation, unless that animation is streaming (e.g. command briefing animations, message talking heads, etc). Also includes dynamically-created textures (used internally for various functions).&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Int&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Values: &#039;&#039;&#039;&#039;&#039;Greater than or equal to 3500&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;4750&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$EMP Arc Color:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
Allows custom RGB color values to be set for the EMP lightning arc effect. &lt;br /&gt;
*&#039;&#039;&#039;+Primary Color Option 1:&#039;&#039;&#039;&lt;br /&gt;
**The RGB color of the first primary color for the EMP lightning arc effect.&lt;br /&gt;
**The actual lightning arc color shown in-game is randomly selected between the first and second primary color. &lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (64, 64, 5)&lt;br /&gt;
*&#039;&#039;&#039;+Primary Color Option 2:&#039;&#039;&#039;&lt;br /&gt;
**The RGB color of the second primary color for the EMP lightning arc effect.&lt;br /&gt;
**The actual lightning arc color shown in-game is randomly selected between the first and second primary color. &lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (128, 128, 10)&lt;br /&gt;
*&#039;&#039;&#039;+Secondary Color Option 1:&#039;&#039;&#039;&lt;br /&gt;
**The RGB color of the secondary color for the EMP lightning arc effect.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (255, 255, 10)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$EMP Arc Width:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Allows setting how the width is calculated for the EMP lightning arc effect. &lt;br /&gt;
*&#039;&#039;&#039;+Width Default:&#039;&#039;&#039;&lt;br /&gt;
**The default width of the arc. This value will be multiplied by `+Width Radius Multiplier:` if the radius of the ship is less than or equal to `+Do Not Use Width Multiplier Over Radius:`.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Default value: 0.9&lt;br /&gt;
*&#039;&#039;&#039;+Width Radius Multiplier:&#039;&#039;&#039;&lt;br /&gt;
**The value that the width is multiplied by if the radius of the ship is less than or equal to `+Do Not Use Width Multiplier Over Radius:`.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Default value: 0.01&lt;br /&gt;
*&#039;&#039;&#039;+Do Not Use Width Multiplier Over Radius:&#039;&#039;&#039;&lt;br /&gt;
**If the object is larger than this radius, the `+Width Default:` value is used.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Default value: 500&lt;br /&gt;
*&#039;&#039;&#039;+Width Radius Minimum:&#039;&#039;&#039;&lt;br /&gt;
**Minimum width that the arc can be. Any calculated widths lower than this value will be set to this value. &lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Default value: 0.2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Damage Arc Color:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
Allows custom RGB color values to be set for the damage lightning arc effect. &lt;br /&gt;
*&#039;&#039;&#039;+Primary Color Option 1:&#039;&#039;&#039;&lt;br /&gt;
**The RGB color of the first primary color for the damage lightning arc effect.&lt;br /&gt;
**The actual lightning arc color shown in-game is randomly selected between the first and second primary color. &lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (64, 64, 255)&lt;br /&gt;
*&#039;&#039;&#039;+Primary Color Option 2:&#039;&#039;&#039;&lt;br /&gt;
**The RGB color of the second primary color for the damage lightning arc effect.&lt;br /&gt;
**The actual lightning arc color shown in-game is randomly selected between the first and second primary color. &lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (128, 128, 255)&lt;br /&gt;
*&#039;&#039;&#039;+Secondary Color Option 1:&#039;&#039;&#039;&lt;br /&gt;
**The RGB color of the secondary color for the damage lightning arc effect.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (64, 64, 5)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Damage Arc Width:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Allows setting how the width is calculated for the EMP lightning arc effect. &lt;br /&gt;
*&#039;&#039;&#039;+Width Default:&#039;&#039;&#039;&lt;br /&gt;
**The default width of the arc. This value will be multiplied by `+Width Radius Multiplier:` if the radius of the ship is less than or equal to `+Do Not Use Width Multiplier Over Radius:`.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Default value: 0.9&lt;br /&gt;
*&#039;&#039;&#039;+Width Radius Multiplier:&#039;&#039;&#039;&lt;br /&gt;
**The value that the width is multiplied by if the radius of the ship is less than or equal to `+Do Not Use Width Multiplier Over Radius:`.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Default value: 0.01&lt;br /&gt;
*&#039;&#039;&#039;+Do Not Use Width Multiplier Over Radius:&#039;&#039;&#039;&lt;br /&gt;
**If the object is larger than this radius, the `+Width Default:` value is used.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Default value: 500&lt;br /&gt;
*&#039;&#039;&#039;+Width Radius Minimum:&#039;&#039;&#039;&lt;br /&gt;
**Minimum width that the arc can be. Any calculated widths lower than this value will be set to this value. &lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**Default value: 0.2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Requires Rendering Feature:===&lt;br /&gt;
{{Table210|Needs description}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Render player muzzle flashes in cockpit:===&lt;br /&gt;
{{Table212|&lt;br /&gt;
Determines whether muzzle flashes will be shown within the cockpit view.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Glowpoint nebula visibility factor:===&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which glowpoints are affected by nebula fog. 1.0 is exactly the same as regular ship hull obscurity, higher means they stay visible for longer.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 1.2}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shield nebula visibility factor:===&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which shield effects are affected by nebula fog. 1.0 is exactly the same as regular ship hull obscurity, higher means they stay visible for longer.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 1.2}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Thruster nebula visibility factor:===&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which thruster flares are affected by nebula fog. 1.0 is exactly the same as regular ship hull obscurity, higher means they stay visible for longer.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 1.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Beams affected by nebula visibility:===&lt;br /&gt;
{{Table212|&lt;br /&gt;
Determines whether beam weapons will be faded by nebula fog.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
====+Constant visibility factor:====&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which beam effects are affected by nebula fog. 1.0 is exactly the same as regular ship hull obscurity, higher means they stay visible for longer.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 4.0}}&lt;br /&gt;
&lt;br /&gt;
====+Scaled visibility factor:====&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which the &#039;&#039;size&#039;&#039; of a beam effect affects its visibility. This is multiplied by the radius of the beam and added to the above for the final value. This results in larger beams being visible from farther away.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Weapons affected by nebula visibility:===&lt;br /&gt;
{{Table212|&lt;br /&gt;
Determines whether lasers, missiles, countermeasures, etc will be faded by nebula fog.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
====+Weapon visibility factor:====&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which laser-type weapons are affected by nebula fog. 1.0 is exactly the same as regular ship hull obscurity, higher means they stay visible for longer.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 1.3}}&lt;br /&gt;
&lt;br /&gt;
====+$Trail visibility factor:====&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which trails (weapon and ship contrails) are affected by nebula fog. 1.0 is exactly the same as regular ship hull obscurity, higher means they stay visible for longer.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 1.0}}&lt;br /&gt;
&lt;br /&gt;
====+Shockwave visibility factor:====&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which shockwave effects are affected by nebula fog. 1.0 is exactly the same as regular ship hull obscurity, higher means they stay visible for longer.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 2.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Particles affected by nebula visibility:===&lt;br /&gt;
{{Table212|&lt;br /&gt;
Determines whether particle effects, including impact effects, will be faded by nebula fog.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
====+Constant visibility factor:====&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which particle effects are affected by nebula fog. 1.0 is exactly the same as regular ship hull obscurity, higher means they stay visible for longer.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 1.0}}&lt;br /&gt;
&lt;br /&gt;
====+Scaled visibility factor:====&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which the &#039;&#039;size&#039;&#039; of a particle effect affects its visibility. This is multiplied by the radius of the particle and added to the above for the final value. This results in larger particles being visible from farther away.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.08}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Fireballs affected by nebula visibility:===&lt;br /&gt;
{{Table212|&lt;br /&gt;
Determines whether fireballs from ship explosions will be faded by nebula fog.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
====+Constant visibility factor:====&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which fireballs are affected by nebula fog. 1.0 is exactly the same as regular ship hull obscurity, higher means they stay visible for longer.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 1.2}}&lt;br /&gt;
&lt;br /&gt;
====+Scaled visibility factor:====&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the degree to which the &#039;&#039;size&#039;&#039; of a fireball affects its visibility. This is multiplied by the radius of the fireball and added to the above for the final value. This results in larger fireballs being visible from farther away.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.08}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shadow Quality Default:===&lt;br /&gt;
{{Table220|&lt;br /&gt;
Sets the default level for shadow quality if the &#039;enable_shadows&#039; command line is used and &#039;shadow_quality&#039; is not used. By default, the FSO will set the shadow detail level to 2. Valid values are 0 (shadows disabled), 1 (Low, 512x512 shadow map), 2 (Medium, 1024x1024 shadow map), 3 (High, 2048x2048 shadow map), or 4 (Ultra, 4096x4096). Note, the command line &#039;shadow_quality&#039; will override any value set here.  &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;2&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shadow Cascade Distances:===&lt;br /&gt;
{{Table214|&lt;br /&gt;
Sets the distances that the shadow map for the game scene uses. Float values must all be greater than 0 and successively larger than each consecutive value.&lt;br /&gt;
{{Table262|&lt;br /&gt;
*Can now be an arbitrary non-zero number of floats. If not set to 4, you must table [[#$Shadow Smoothness Factor:]]&lt;br /&gt;
}}&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;List of floats&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;(200.0, 600.0, 2500.0, 8000.0)&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shadow Cascade Distances Cockpit:===&lt;br /&gt;
{{Table214|&lt;br /&gt;
Sets the distances that the shadow map for the cockpit pass scene uses. Will only shadow the cockpit model, and does not interact with the external game scene shadow map. Float values must all be greater than 0 and successively larger than each consecutive value.&lt;br /&gt;
{{Table262|&lt;br /&gt;
*Can now be an arbitrary non-zero number of floats. If not set to 4, you must table [[#$Shadow Smoothness Factor:]]&lt;br /&gt;
}}&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;List of floats&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;(0.25, 0.75, 1.5, 3.0)&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
{{Table262|&lt;br /&gt;
===$Shadow Smoothness Factor:===&lt;br /&gt;
Sets the strength of the smoothing for each shadow cascade. Larger values mean smoother / softer shadows. Shadow smoothness also scales with cascade distance, so the same value for a larger cascade will be perceived to be smoother.&lt;br /&gt;
The number of smoothness factors &#039;&#039;must&#039;&#039; match the number of Shadow Cockpit Cascades + Shadow Cascades (each 4 by default).&lt;br /&gt;
The list should first contain the smoothness factors for the cockpit cascades in order, and then the smoothness factors for the main cascades in order&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;List of floats&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;(0.00333,  0.004,  0.005,  0.005, 0.00333,  0.004,  0.005,  0.005)&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
===$Shadow Disable Techroom:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Disables shadows on ships in the techroom.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shadow Disable Cockpit:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Disables shadows on the player cockpit in mission.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shadow Disable Mission Brief Weapons:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Disables shadows on weapons in the mission briefing.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shadow Disable Mission Brief Ships:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Disables shadows on ships in the mission briefing.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Show Ship Casts Shadow:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
When cockpit shadows are enabled, enabling this setting will cause the players ship model shown with &amp;quot;show ship&amp;quot; to cast shadow onto the cockpit.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Ship Model And Cockpit Share Coordinate Space:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
When having the &amp;quot;show ship&amp;quot; flag enabled and cockpit models for a ship, this flag should be on if the cockpits can fit into the actual geometry of the ship model. Disable this flag if this is not the case and the cockpit needs to be rendered on top of the ship regardless of actual coordinates. If this can be enabled, the external show ship model can be rendered using deferred rendering.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Show Ship enabled only if Cockpits enabled:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
Enabling this setting will only use the &#039;show-ship&#039; flag if cockpits are enabled. Useful if your ship uses both &#039;show-ship&#039; and cockpits that exist within the &#039;show-ship&#039; space, and you want to allow players to toggle off cockpits. Note, &#039;show-ship&#039; always only appears if in first-person view. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Minimum Pixel Size Thrusters:===&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the smallest pixel size that thrusters will be rendered. Setting this &amp;gt; 0 can be expensive in larger missions.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Minimum Pixel Size Beams:===&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the smallest pixel size that beams will be rendered. Setting this &amp;gt; 0 can be expensive in larger missions.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Minimum Pixel Size Muzzle Flashes:===&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the smallest pixel size that muzzle flashes will be rendered. Setting this &amp;gt; 0 can be expensive in larger missions.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Minimum Pixel Size Trails:===&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the smallest pixel size that trails will be rendered. Setting this &amp;gt; 0 can be expensive in larger missions.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Minimum Pixel Size Lasers:===&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Specifies the smallest pixel size that lasers will be rendered. Setting this &amp;gt; 0 can be expensive in larger missions.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Do Not Render Lasers Below Length:===&lt;br /&gt;
{{Table250| &lt;br /&gt;
*Specifies the smallest length that lasers will be rendered.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.0001}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Do Not Render Lasers Below Radius:===&lt;br /&gt;
{{Table250| &lt;br /&gt;
*Specifies the smallest radius that lasers will be rendered.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.0001}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Thruster Easing Value:===&lt;br /&gt;
{{Table220| &lt;br /&gt;
*Smooths out the behavior of maneuvering thruster flares the higher above 0 it is.&lt;br /&gt;
*This is the exponential time constant for the visual flare length to reach it&#039;s true length.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Primary Thruster Glow Depth Factor:===&lt;br /&gt;
{{Table262| &lt;br /&gt;
*This value is a multiplier of the Primary Thruster glow&#039;s computed size. By default, Primary Thrusters showed through model geometry, but setting this value to less than or equal to 0 will fix the issue. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: 0.325f}}&lt;br /&gt;
&lt;br /&gt;
===$Tertiary Thruster Glow Depth Factor:===&lt;br /&gt;
{{Table262| &lt;br /&gt;
*This value is a multiplier of the Tertiary Thruster glow&#039;s computed size. By default, Tertiary Thrusters does not show through model geometry, but you could make it so by setting this value to greater than 0. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: -0.5f}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$SCPUI attempts to load hires animations:===&lt;br /&gt;
{{Table230| &lt;br /&gt;
*Prevents [https://github.com/MjnMixael/SCPUI/wiki SCPUI] from trying to load anims prefixed with &amp;quot;2_&amp;quot;&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: true}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table230| &lt;br /&gt;
===$Max draw distance:===&lt;br /&gt;
===$Min draw distance:===&lt;br /&gt;
*These values do more than just cutoff the visuals at certain distances, and they must be adjusted carefully to ensure unintentional rendering artifacts are not introduced.&lt;br /&gt;
*The rendering engine has limited amount of &#039;depth resolution&#039;, the degree to which it can tell a certain polygon is closer or farther away than another. When two polygons are too close, they will Z-fight, picking arbitrarily which is closer. It is the span between the min and max draw distance that determines how well the engine can determine depth, if they are too far from one another, the Z-fighting will become more common as it has to spread its resolution over a wider range. If they are close, Z-fighting will be lessened at the cost of a smaller range of distance able to be rendered.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;, meters&lt;br /&gt;
*Default Values: 10,000,000,000 and 1, respectively&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table232| &lt;br /&gt;
===$Randomize particle rotation:===&lt;br /&gt;
*Particle bitmaps are typically screen-aligned; the upper portion of the bitmap will always be mapped to the upper portion of the particle, from the point of view of the camera. Enabling this option makes &#039;&#039;all&#039;&#039; particles have a random &#039;tilt&#039; in an arbitrary direction when created.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: false&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Disable shield effects:===&lt;br /&gt;
{{Table250| &lt;br /&gt;
*Specifies if FSO attempts to use the shield mesh impact effects. Enabling this flag will prevent the game from preforming any shield mesh effect code, which can be useful if a mod does not use those shield mesh effects. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: false}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Disable all non-custom generic debris:===&lt;br /&gt;
{{Table250| &lt;br /&gt;
*Provides one simple control to turn off all non-custom generic debris (the tiny debris shards that are typically spawned when a ship/subsystem explodes). Note, generic debris that is manually specified in the ships table will still be spawned, this is only for turning off non-custom debris. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: false}}&lt;br /&gt;
&lt;br /&gt;
===$Render insignias as decals:===&lt;br /&gt;
{{Table260| &lt;br /&gt;
*If set, insignias will be rendered using the decal system. This will make insignias render with correct and deferred lighting, and fix issues with apparent fading&lt;br /&gt;
*Models must be set up correctly for this to work! A model can have multiple insignias, with multiple polygon faces each. To enable this option, each visible insignia must have its own insignia entry in the model. If multiple visible insignias are incorrectly consolidated into one insignia entry with disjointed polygons, this will cause graphical artifacts.&lt;br /&gt;
*For reference, check out the retail FS2 models, which are set up correctly.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: false}}&lt;br /&gt;
&lt;br /&gt;
==#NETWORK SETTINGS==&lt;br /&gt;
This group contains network-related settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$FS2NetD port:===&lt;br /&gt;
*(description required)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default object update level for multiplayer:===&lt;br /&gt;
{{Table220|&lt;br /&gt;
Sets the distances default object update rate  for multiplayer matches. By default, the FSO will set the object update level to 2. Valid values are 0 (Low), 1 (Medium), 2 (High), 3 (LAN). FSO caps the bandwidth it uses based on these settings, but they were designed for connections from 1999. LAN has the least restrictive limits and does not require an actual LAN connection. Also, if a player&#039;s connection is within the dial-up speed range then game auto force the use of the lowest level during a match.  &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;2&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#SOUND SETTINGS==&lt;br /&gt;
This group contains sound-related settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default Sound Volume:===&lt;br /&gt;
{{Table371|&lt;br /&gt;
*Defines the default sound fx volume for new pilots.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;, between 0.0 and 1.0&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1.0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default Music Volume:===&lt;br /&gt;
{{Table371|&lt;br /&gt;
*Defines the default music volume for new pilots.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;, between 0.0 and 1.0&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0.5&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default Voice Volume:===&lt;br /&gt;
{{Table371|&lt;br /&gt;
*Defines the default voice volume for new pilots.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;, between 0.0 and 1.0&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0.7&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use weapon class impact sounds for hits to player:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Allows weapons that hit the player to play their specific impact sounds, not the hard-coded default sounds.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Play thruster sounds for the player:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
If the player&#039;s ship has thruster sounds defined, this will ensure they are played like normal, since they are typically suppressed.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Unify minimum engine sound:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
Allows $Minimum Engine Volume in ships.tbl to work for all ship classes. By default, that value only triggers for non-huge ships. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===$Disabled or disrupted engines are silent:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
If set, engines will not play their engine noise if the ship is disabled or a disrupted (such as disruptions caused by an active EMP effect or a weapon with the &amp;quot;electronics&amp;quot; flag).  &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#FRED SETTINGS==&lt;br /&gt;
This group contains settings for FRED. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Disable Hard Coded Message Head Ani Files:===&lt;br /&gt;
{{table371|&lt;br /&gt;
If set, FRED will not fill the head ani selection in the Event Editor with the retail head ani filenames.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
===$Add Message Head Ani Files:===&lt;br /&gt;
{{table224|&lt;br /&gt;
FRED will append each +Head entry listed below to the head ani selection list in the Event Editor.}}&lt;br /&gt;
&lt;br /&gt;
====+Head:====&lt;br /&gt;
{{table224|&lt;br /&gt;
The head ani filename to add. Extensions will be stripped if included.&lt;br /&gt;
NOTE: Pay attention to file names or anis with a,b, c variation not display in-game (unless called directly). Proper name seems to be Head-xxxNa, Head-xxxNb, with N being some number and XXX being whatever you want. Needs further testing and confirmation &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;+Head: String&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Enable scripting in FRED:===&lt;br /&gt;
{{table382|&lt;br /&gt;
If set, scripting will be enabled in FRED. Use with extreme caution. The effects of scripts on FRED have not been fully tested. You can check if a script is running in FRED by using ba.inMissionEditor().&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$FRED Briefing window resolution:===&lt;br /&gt;
{{table224|&lt;br /&gt;
The width and height of the briefing window in FRED. Defaults to 888x371. Note that changing this only affects FRED and can cause a mismatch to the ingame briefing view which defaults to 888x371 (or 555x232 for 640 base res).&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;integer, integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;888,371&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Ignore Music Files In Music Player:===&lt;br /&gt;
{{table232|Music files in this section will not be added to FRED&#039;s built-in music player.}}&lt;br /&gt;
====+File:====&lt;br /&gt;
{{table232|Specifies a file&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$FRED spacemouse nonlinearities:===&lt;br /&gt;
{{table232|&lt;br /&gt;
Allows setting custom nonlinearities and scaling for controlling FRED with a spacemouse.&lt;br /&gt;
}}&lt;br /&gt;
====+Sideways exponent:====&lt;br /&gt;
{{table232|&lt;br /&gt;
The exponent for input for Sideways spacemouse motion.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Sideways scale:====&lt;br /&gt;
{{table232|The multiplier for input for Sideways spacemouse motion.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Forwards exponent:====&lt;br /&gt;
{{table232|The exponent for input for Forwards spacemouse motion.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Forwards scale:====&lt;br /&gt;
{{table232|The multiplier for input for Forwards spacemouse motion.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Upwards exponent:====&lt;br /&gt;
{{table232|The exponent for input for Upwards spacemouse motion.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Upwards scale:====&lt;br /&gt;
{{table232|The multiplier for input for Upwards spacemouse motion.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Pitch exponent:====&lt;br /&gt;
{{table232|The exponent for input for Pitch spacemouse rotation.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Pitch scale:====&lt;br /&gt;
{{table232|The multiplier for input for Pitch spacemouse rotation.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Bank exponent:====&lt;br /&gt;
{{table232|The exponent for input for Bank spacemouse rotation.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Bank scale:====&lt;br /&gt;
{{table232|The multiplier for input for Bank spacemouse rotation.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Heading exponent:====&lt;br /&gt;
{{table232|The exponent for input for Heading spacemouse rotation.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
====+Heading scale:====&lt;br /&gt;
{{table232|The multiplier for input for Heading spacemouse rotation.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Skybox internal depth consistency:===&lt;br /&gt;
{{table250|If enabled, this will allow skyboxes that use submodels to render the submodels with proper Z-sorting if the &#039;No Z-Buffer&#039; check box is set to on in FRED. In other words, parts of the skybox closer to the origin point will render in front of sections further away, as might be expected. This flag is enabled by default for FSO version 25.0 onwards&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;YES&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#OTHER SETTINGS==&lt;br /&gt;
This group contains miscellaneous settings. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Fixed Turret Collisions:===&lt;br /&gt;
Makes all hits to a turret&#039;s barrels count as hits to the turret subsystem. By default, this does not happen unless the point of impact falls inside the model radius of the turret&#039;s base.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Fixed Missile Detonation:===&lt;br /&gt;
{{Table220|&lt;br /&gt;
*When this flag is set, missiles which reach the center of a submodel will not detonate immediately; they will delay detonation until they have traveled another radius of the submodel.  This fixes missile impacts to submodels whose center lies outside the geometry of the submodel.  In other words, without this flag, a missile might detonate in the middle of the &amp;quot;bowl&amp;quot; of a concave submodel; with this flag, the missile will travel to the other side of the submodel before it detonates.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Damage Impacted Subsystem First:===&lt;br /&gt;
If set, a hit to a physical subsystem will always deal damage to that subsystem first, even if another subsystem is closer to the point of impact. By default, the closest subsystem will always receive damage first.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use 3d ship select:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*Whether or not to use 3D models for ship select instead of animations&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default ship select effect:===&lt;br /&gt;
{{Table3615|&lt;br /&gt;
*This specifies which effect to use for ship select animations when no .ani can be found, or the 3d ship select effect is active. This will default to the FS2 effect.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Possible options are &amp;quot;FS2&amp;quot;, &amp;quot;FS1&amp;quot;, and &amp;quot;off&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use 3d ship icons:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*Whether or not to use 3D models for ships in ship/weapon select instead of icons&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use 3d weapon select:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*Whether or not to use 3D models for weapon select instead of animations&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default weapon select effect:===&lt;br /&gt;
{{Table3615|&lt;br /&gt;
*This specifies which effect to use for weapon select animations when no .ani can be found, or the 3d weapon select effect is active. This will default to the FS2 effect.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Possible options are &amp;quot;FS2&amp;quot;, &amp;quot;FS1&amp;quot;, and &amp;quot;off&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use 3d weapon icons:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*Whether or not to use 3D models for weapons in weapon select instead of icons&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$FS2 effect grid color:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*Specifies the grid color for the FS2 loadout animation effect&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer, Integer, Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0, 200, 0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$FS2 effect scanline color:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*Specifies the scan-line color for the FS2 loadout animation effect&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer, Integer, Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0, 255, 0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$FS2 effect grid density:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*Specifies the number of grid lines in the FS2 loadout animation effect&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;7&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$FS2 effect wireframe color:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*Specifies the wireframe color for the FS2 loadout animation effect&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer, Integer, Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;80, 49, 160&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use 3d overhead ship:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*Whether or not to use 3D models for ship overhead view instead of a bitmap in weapon select&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default overhead ship style:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*This specifies which style of overhead view to use if 3d overhead view is active&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Possible options are &amp;quot;ROTATE&amp;quot; or &amp;quot;TOPVIEW&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
{{Table250|&lt;br /&gt;
*&#039;&#039;&#039;+Overhead Line Color 1:&#039;&#039;&#039;&lt;br /&gt;
** The RGB color for ship secondary bank 1.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (64, 192, 192)&lt;br /&gt;
*&#039;&#039;&#039;+Overhead Line Color 2:&#039;&#039;&#039;&lt;br /&gt;
** The RGB color for ship secondary bank 1.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (192, 128, 64)&lt;br /&gt;
*&#039;&#039;&#039;+Overhead Line Color 3:&#039;&#039;&#039;&lt;br /&gt;
** The RGB color for ship secondary bank 1.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (175, 175, 175)&lt;br /&gt;
*&#039;&#039;&#039;+Overhead Line Color 4:&#039;&#039;&#039;&lt;br /&gt;
** The RGB color for ship secondary bank 1.&lt;br /&gt;
**Syntax: &#039;&#039;&#039;&#039;&#039;Color&#039;&#039;&#039;&#039;&#039;, (red, green, blue) respectively, integer value from 0 to 255&lt;br /&gt;
**Default value: (100, 100, 100)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Always refresh selected weapon when viewing loadout:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
*When set to true, this always refreshes the weapon shown in view box on the right side of the screen when opening the weapon loadout view. This ensures the viewed weapon is one that can actually be on the selected ship when first clicking on the weapon loadout screen.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Weapons inherit parent collision group:===&lt;br /&gt;
{{Table3615|&lt;br /&gt;
*When set to true, Weapons fired by a ship will inherit their parents&#039; collision group setting.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Flight controls follow eyepoint orientation:===&lt;br /&gt;
{{Table371|&lt;br /&gt;
*Specifies that if the player ship&#039;s eyepoint happens to rotate into a non-standard orientation, pitch and yaw axes should stay relative to the eyepoint orientation, not the ship. Note that this does not affect the pitch/yaw turning speed, which always remains relative to the ship.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Beams Use Damage Factors:===&lt;br /&gt;
{{Table371|&lt;br /&gt;
*Specifies that beam weapons will use the tabled damage factors for Armour, Shields and Subsystems. Default is false (i.e. all factors are treated as 1.0)&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default fiction viewer UI:===&lt;br /&gt;
{{Table373|&lt;br /&gt;
*Specifies which fiction viewer layout to use in missions that don&#039;t specify one. Possible values are as follows:&lt;br /&gt;
**&amp;quot;FS2&amp;quot;: Standard layout. Requires (2_)fictionviewer and (2_)fictionviewer-m to be present in data\interface.&lt;br /&gt;
**&amp;quot;WCS&amp;quot;: Moves the &amp;quot;Accept&amp;quot; button to the lower-left corner of the screen. Requires (2_)fictionviewerb and (2_)fictionviewer-mb to be present in data\interface.&lt;br /&gt;
**&amp;quot;auto&amp;quot;: Selects &amp;quot;WCS&amp;quot; if the appropriate files are present; otherwise, selects &amp;quot;FS2&amp;quot;. This is the default setting.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Movie subtitle font:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
*Specifies which font should be used for displaying subtitles in the cutscene player. This should be the name given to this font in the fonts table. Since movie subtitles can contain Unicode text it is a good idea to enable Unicode mode when movie subtitles are used but this is not enforced by this option.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Movie subtitle color:===&lt;br /&gt;
{{Table242|&lt;br /&gt;
*Specifies which color should be used for displaying subtitles in the cutscene player.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Integer, Integer, Integer, Integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;255, 255, 255, 255&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Disable built-in translations:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
*Turns off hard-coded translations, e.g. Transport -&amp;gt; Transporter in German.  All strings will either use their XSTR entry or else not be translated.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Weapon shockwave damage respects huge ship flags:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
*Controls whether weapon shockwaves will respect the huge/supercap ship flags.  In retail they do not.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Enable external default scripts:===&lt;br /&gt;
{{Table382|&lt;br /&gt;
*Enables the loading of external scripts with the same name as a built-in script. Otherwise, uses the version of the script included in the executable (currently, just cfile_require.lua).&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Player warpout speed:===&lt;br /&gt;
{{Table190|&lt;br /&gt;
*Defines the speed the player must reach to warp out.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;40.0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Target warpout match percent:===&lt;br /&gt;
{{Table190|&lt;br /&gt;
*Defines how close to the warpout speed the player needs to be to actually warp out.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;, between 0.0 and 1.0&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0.05&#039;&#039;&#039;&#039;&#039; (5%)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Minimum player warpout time:===&lt;br /&gt;
{{Table190|&lt;br /&gt;
*The [[Ships.tbl#.24Warpout_Engage_Time:|default amount of time]], in seconds, warping out will take before actually starting to check whether the player is the right speed.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;3.0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Enable in-game options:===&lt;br /&gt;
{{Table190|&lt;br /&gt;
*Mode whereby various settings can be modified by FSO while it&#039;s still running, rather than being set by the launcher before execution. By default is now ON, and can be accessed by going to the Options menu and pressing F3. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;YES&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
===$Dinky Shockwave Default Multiplier:===&lt;br /&gt;
{{Table190|&lt;br /&gt;
*Amount of damage, as a multiple of normal shockwave damage, assigned to a weapon&#039;s [[Weapons.tbl#.24Dinky shockwave:|dinky shockwave]] by default. To get the same behavior FSO had from 2005-2019, set this to 0.25.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;1.0&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shockwaves Always Damage Bombs:===&lt;br /&gt;
{{Table202|&lt;br /&gt;
*Enables all bombs being damaged by shockwaves. Previously only those marked with flags could be damaged.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shockwaves Damage All Object Types Once:===&lt;br /&gt;
{{Table202|&lt;br /&gt;
*Keeps any object from being damaged more than once by a shockwave.  The default behavior is for asteroids and flagged missiles to be damaged every frame by the shockwave.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Shockwaves Inherit Parent Weapon Damage Type:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*When enabled, the shockwaves of weapons that have a defined damage type automatically inherit that damage type, rather than dealing &amp;quot;typeless&amp;quot; damage. As this behavior is more intuitive than when this flag is disabled, mods targeting 22.4 or newer versions of FSO will have it enabled by default.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;True&#039;&#039;&#039;&#039;&#039; for mods targeting 22.4 or newer versions of FSO, otherwise &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Inherited Shockwave Damage Type Added Suffix:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*When combined with &amp;quot;$Shockwaves Inherit Parent Weapon Damage Type:&amp;quot;, this string is added to the inherited damage type to define the shockwave&#039;s damage type. For example, if a weapon has the damage type &amp;quot;heavy&amp;quot; and the provided suffix is &amp;quot;-shock&amp;quot;, then that weapon&#039;s shockwave&#039;s damage type would default to &amp;quot;heavy-shock&amp;quot;.&lt;br /&gt;
*Note: When defined, this also implicitly sets the equivalent value for dinky shockwaves, below.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Inherited Dinky Shockwave Damage Type Added Suffix:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*The same as &amp;quot;$Inherited Shockwave Damage Type Added Suffix:&amp;quot;, except specifically for &amp;quot;dinky&amp;quot; shockwaves.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default Shockwave Damage Type:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*If a weapon&#039;s shockwave doesn&#039;t have a damage type set, it will have this damage type instead (when &amp;quot;$Shockwaves Inherit Parent Weapon Damage Type:&amp;quot; is enabled, this will only be used if the weapon itself also doesn&#039;t have a damage type set).&lt;br /&gt;
*Note: When defined, this also implicitly sets the equivalent value for dinky shockwaves, below.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Default Dinky Shockwave Damage Type:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*The same as &amp;quot;$Default Shockwave Damage Type:&amp;quot;, except specifically for &amp;quot;dinky&amp;quot; shockwaves.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use Engine Wash Intensity:===&lt;br /&gt;
{{Table190|&lt;br /&gt;
*Allows the game to use the [[ships.tbl#.24Intensity::|Intensity]] value when calculating Engine Wash effects. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Apply HUD shudder to chase view:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
*Applies hud shudder (afterburner and engine wash) also to chase view. Does not override the command line toggle. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Swarmers Lead Targets:===&lt;br /&gt;
{{Table202|&lt;br /&gt;
*Causes swarm missiles to lead their targets by default, and will make use of [[Weapons.tbl#.2BTarget_Lead_Scaler:|Target Lead Scaler]] if specified, like normal aspect seekers. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;NO&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Damage Threshold for Weapons Subsystems to Trigger Turret Inaccuracy:===&lt;br /&gt;
{{Table202|&lt;br /&gt;
*Specifies the damage threshold for when turrets become less accurate due to weapon subsystem damage. In other words, how damaged do a ship&#039;s aggregated weapons systems have to be before the turrets become inaccurate? Value must be between 0.0-1.0 (includes 0.0 and 1.0).   &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0.7&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$AI use framerate independent turning:===&lt;br /&gt;
{{Table202|&lt;br /&gt;
*Without this flag, missiles turn rate is directly dependent on the current framerate. When enabled their turn rate will be consistent, with the &amp;quot;true&amp;quot; turning taken to be observed turning at 60fps. This flag also affects ships, but the instability is only apparent at extremely low framerates, and so the change will not be apparent. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;True&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
====+AI respect tabled turn time and rotdamp:====&lt;br /&gt;
{{Table202|&lt;br /&gt;
*Due to complicated physics issues caused by retail not using the above method, tabled turn times on ships and missiles are not representative of actual observed turn times. The above flag makes it consistent, but this flag will make it accurate to what is actually listed in the table. &lt;br /&gt;
*Additionally, rotdamp is now used properly by the AI in a similar manner to players. More rotdamp will result in slower rotational acceleration, and less results in faster acceleration.&lt;br /&gt;
*NOTE: BEWARE OF ADDING THIS FLAG TO AN EXISTING MODPACK. NEARLY EVERY SINGLE TURN TIME WILL NEED TO BE CHANGED.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Player starts in third person/chase view by default:===&lt;br /&gt;
{{Table212|&lt;br /&gt;
*When this flag is set, a player will start the mission in the chase view, not in the cockpit view.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Custom briefing icons always override standard icons:===&lt;br /&gt;
{{Table214|&lt;br /&gt;
*Custom ship briefing icons will always be shown when the briefing icon is a ship, but not when it is a non-ship icon such as a planet.  Set this flag to use custom briefing icons in all cases.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Lead indicator behavior:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
Changes how Lead Indicators behave when multiple weapon banks are linked and in range.&lt;br /&gt;
When set to default, if you have linked weapons, only the indicator for the one with the farthest range will be drawn.&lt;br /&gt;
When set to multiple, a lead indicator is drawn for all primary weapons in range when you have them linked.&lt;br /&gt;
When set to average, a single lead indicator is drawn in the average of the position where each of them would usually be drawn.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
** Valid options are &#039;&#039;&#039;&#039;&#039;default&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;multiple&#039;&#039;&#039;&#039;&#039; and &#039;&#039;&#039;&#039;&#039;average&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;default&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use distant firepoint for all turrets:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*Causes the game to use firepoint-based target leading calculations for all turrets. This is useful if all or most turrets in a given mod has firepoints that are distant from their center-point.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Enable Discord rich presence:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*Enables or disables the built-in Discord game-status reporting.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;True&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Always hide hidden ships in hotkey list:===&lt;br /&gt;
{{Table224|&lt;br /&gt;
*Whether or not to always hide ships with HIDDEN hotkey (set in FRED), even in the in-mission hotkey menu.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Allow automatically assigning personas:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
*Whether or not the game will automatically assign personas to ships that have no persona set.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;True&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Countermeasures use capacity:===&lt;br /&gt;
{{Table232|&lt;br /&gt;
*Whether or not Countermeasures use tabled capacity.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Calculate subsystem hitpoints after parsing:===&lt;br /&gt;
{{Table234|&lt;br /&gt;
*Causes subsystem hitpoints to be calculated after all ships.tbl and -shp.tbm files have been parsed.  This allows subsystem percentages to correctly reflect the final hull value rather than the first hull value encountered.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Contrails use absolute speed:===&lt;br /&gt;
{{Table240|&lt;br /&gt;
*Causes contrails to be created based on speed in any direction, rather than just forward speed.  This allows contrails to appear when a ship is moving in a direction other than forwards.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Fix scripted velocity:===&lt;br /&gt;
{{Table242|&lt;br /&gt;
*If this setting is enabled, object velocity set via script will wholly determine the change in position for that frame, ignoring &#039;&#039;all&#039;&#039; other in-engine concerns. Otherwise, the game engine will likely overwrite/ignore any changes, depending on when the changes were made in the frame.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Preload briefing icon models:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*If set, this forces preloading of models used for briefing icons. This only loads models used for icons that haven&#039;t already been loaded for the mission. This is useful for [https://github.com/MjnMixael/SCPUI/wiki SCPUI]&#039;s where hovering over an icon shows the model without having to click on it and the stutter when it loads models not used in mission.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Behavior for pressing Escape key in options menu:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*If set to &#039;save&#039;, the escape key for the HUD and Options screen saves options when leaving those screens (ie it does the same thing as pressing Ctrl-Enter/Accept). By default (or if set to &#039;default&#039;) the Escape key will not save any changed values when exiting those screens. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;default&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Use closest distance method for &#039;Target Hostile Bomb or Bomber&#039; control:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*If set to true, the &#039;Target Hostile Bomb or Bomber&#039; control will target the closest hostile bomb or bomber, similar to how the &#039;Target Closest Hostile&#039; key works. By default, the &#039;Target Hostile Bomb or Bomber&#039; control will not sort by distance and simply only target in order of oldest to youngest objects (ie which object spawned first in the mission). &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;false&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Objects targeted with &#039;Target Hostile Bomb or Bomber&#039; control:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*Determines what can be targeted when using the &#039;Target Hostile Bomb or Bomber&#039; control. By default this control targets both bombs and bombers, which is the behavior if this field is set to &#039;default&#039; or &#039;bombs and bombers&#039;. If set to &#039;only bombs&#039;, the key will only target bombs and not target bombers. If set to &#039;only bombers&#039;, the key will only target bombers and not target bombs. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;String&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;default&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Fix asteroid/debris field bounding box checks:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*Fixes a bug where asteroid and debris fields did not properly check for whether large ships were within bounds.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Disable intro cutscene:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*If set, this disables loading of any cutscenes as the game starts that might play before the player reaches the pilot select screen. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Show locked status for scramble missions:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*If set, scramble mission will show a text line right below the words &#039;Weapons Loadout&#039; that states &amp;quot;Ships/Weapons Locked&amp;quot; (XSTR 749), thus the player can easily see their loadouts are locked and they do not have to check the loaoout buttons on every mission. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Disable expensive turret target check:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*If set, this value speeds up turret target checking. By default, turret target acquisition was spending a lot of time doing a raycast, the result of which was barely used at all. If we don&#039;t need the target normal, all it does is get a target point slightly more accurate, but in practice it really isn&#039;t noticeable at all whether the target point of the turret is actually on the surface of the ship, or maybe on the other side of the ship.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Threshold below which shield skips damage:===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*By default, FSO logic dictates that shields collisions and any related sound or visuals related to shields are skipped if the shields are under 10%. This value allows modders to customize the value, though the value must be between 0.0 and 1.0. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;0.1&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Minimum ship radius for persistent debris::===&lt;br /&gt;
{{Table250|&lt;br /&gt;
*Ships with a radius larger than this value will have infinite debris lifetimes.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;50&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Zero-radius explosions skip fireballs:===&lt;br /&gt;
{{Table260|&lt;br /&gt;
*If set, explosions with a visual radius of 0 will not have fireballs created, and will not have the fireball lifetime added to the explosion lifetime.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Link special-point subsystems to -destroyed submodels:===&lt;br /&gt;
{{Table260|&lt;br /&gt;
*If set, a special-point subsystem will be linked to its corresponding -destroyed submodel (if one exists).  The -destroyed submodel will be shown when the subsystem is destroyed, and hidden again if the subsystem is repaired.  By default, only submodel subsystems are linked to their corresponding -destroyed submodels.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===$Fix collision moment of inertia:===&lt;br /&gt;
{{Table262|&lt;br /&gt;
*Fixes a bug in collision physics where an object&#039;s moment of inertia was applied as though the object were facing the inverse of its actual orientation (that is, an orientation that would rotate it back to the identity orientation).  Without this flag, a ship that is not aligned with the coordinate axes may rotate around the wrong axis, or by the wrong amount, when something collides with it.  This applies to collisions among ships, asteroids, and debris.  It does not apply to weapon impacts, which were never affected by the bug.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
*Default Value: &#039;&#039;&#039;&#039;&#039;False&#039;&#039;&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#END==&lt;br /&gt;
Required. The last line of the table must be #END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sample Entry==&lt;br /&gt;
&lt;br /&gt;
    #CAMPAIGN SETTINGS&lt;br /&gt;
    $Default Campaign File Name: NewCampaignFile&lt;br /&gt;
    &lt;br /&gt;
    #Ignored Campaign File Names&lt;br /&gt;
    $Campaign File Name: FreeSpace2.fc2&lt;br /&gt;
    &lt;br /&gt;
    #HUD SETTINGS&lt;br /&gt;
    $Directive Wait Time: 5000&lt;br /&gt;
    &lt;br /&gt;
    #SEXP SETTINGS&lt;br /&gt;
    $Loop SEXPs Then Arguments: True&lt;br /&gt;
    &lt;br /&gt;
    #OTHER SETTINGS&lt;br /&gt;
    $Fix Turret Collisions: True&lt;br /&gt;
    &lt;br /&gt;
    #END&lt;br /&gt;
&lt;br /&gt;
[[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_Properties&amp;diff=67850</id>
		<title>RCSS Properties</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_Properties&amp;diff=67850"/>
		<updated>2026-10-28T18:35:13Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Properties}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Properties}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_Scrollbars&amp;diff=67849</id>
		<title>RCSS Scrollbars</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_Scrollbars&amp;diff=67849"/>
		<updated>2026-10-28T18:35:04Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Scrollbars}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Scrollbars}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_FontEffects&amp;diff=67848</id>
		<title>RCSS FontEffects</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_FontEffects&amp;diff=67848"/>
		<updated>2026-10-28T18:34:53Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-FontEffects}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-FontEffects}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_Decorators&amp;diff=67847</id>
		<title>RCSS Decorators</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_Decorators&amp;diff=67847"/>
		<updated>2026-10-28T18:34:42Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Decorators}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Decorators}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_CursorsDragTab&amp;diff=67846</id>
		<title>RCSS CursorsDragTab</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_CursorsDragTab&amp;diff=67846"/>
		<updated>2026-10-28T18:34:31Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-CursorsDragTab}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-CursorsDragTab}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_Text&amp;diff=67845</id>
		<title>RCSS Text</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_Text&amp;diff=67845"/>
		<updated>2026-10-28T18:34:15Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Text}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Text}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_Fonts&amp;diff=67844</id>
		<title>RCSS Fonts</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_Fonts&amp;diff=67844"/>
		<updated>2026-10-28T18:34:06Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Fonts}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Fonts}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_ColorsBackgrounds&amp;diff=67843</id>
		<title>RCSS ColorsBackgrounds</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_ColorsBackgrounds&amp;diff=67843"/>
		<updated>2026-10-28T18:33:56Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-ColorsBackgrounds}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-ColorsBackgrounds}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_VisualEffects&amp;diff=67842</id>
		<title>RCSS VisualEffects</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_VisualEffects&amp;diff=67842"/>
		<updated>2026-10-28T18:33:46Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-VisualEffects}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-VisualEffects}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_VisualModel&amp;diff=67841</id>
		<title>RCSS VisualModel</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_VisualModel&amp;diff=67841"/>
		<updated>2026-10-28T18:33:36Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-VisualModel}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-VisualModel}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_BoxModel&amp;diff=67840</id>
		<title>RCSS BoxModel</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_BoxModel&amp;diff=67840"/>
		<updated>2026-10-28T18:33:27Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-BoxModel}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-BoxModel}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_Selectors&amp;diff=67839</id>
		<title>RCSS Selectors</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_Selectors&amp;diff=67839"/>
		<updated>2026-10-28T18:33:17Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Selectors}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Selectors}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_Syntax&amp;diff=67838</id>
		<title>RCSS Syntax</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_Syntax&amp;diff=67838"/>
		<updated>2026-10-28T18:33:08Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Syntax}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RCSS-Syntax}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RML_Events&amp;diff=67837</id>
		<title>RML Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RML_Events&amp;diff=67837"/>
		<updated>2026-10-28T18:32:56Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Events}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Events}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RML_Templates&amp;diff=67836</id>
		<title>RML Templates</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RML_Templates&amp;diff=67836"/>
		<updated>2026-10-28T18:32:47Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Templates}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Templates}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RML_DataDisplay&amp;diff=67835</id>
		<title>RML DataDisplay</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RML_DataDisplay&amp;diff=67835"/>
		<updated>2026-10-28T18:32:38Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-DataDisplay}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-DataDisplay}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RML_Controls&amp;diff=67834</id>
		<title>RML Controls</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RML_Controls&amp;diff=67834"/>
		<updated>2026-10-28T18:32:26Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Controls}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Controls}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RML_Forms&amp;diff=67833</id>
		<title>RML Forms</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RML_Forms&amp;diff=67833"/>
		<updated>2026-10-28T18:32:16Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Forms}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Forms}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RML_StyleSheets&amp;diff=67832</id>
		<title>RML StyleSheets</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RML_StyleSheets&amp;diff=67832"/>
		<updated>2026-10-28T18:32:01Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-StyleSheets}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RML_Images&amp;diff=67831</id>
		<title>RML Images</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RML_Images&amp;diff=67831"/>
		<updated>2026-10-28T18:31:48Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Images}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RML_Elements&amp;diff=67830</id>
		<title>RML Elements</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RML_Elements&amp;diff=67830"/>
		<updated>2026-10-28T18:31:34Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Elements}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Elements}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RML_Documents&amp;diff=67829</id>
		<title>RML Documents</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RML_Documents&amp;diff=67829"/>
		<updated>2026-10-28T18:31:22Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Documents}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/RML-Documents}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Librocket_API_Event&amp;diff=67828</id>
		<title>Librocket API Event</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Librocket_API_Event&amp;diff=67828"/>
		<updated>2026-10-28T18:31:08Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Event}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Event}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Librocket_API_Element&amp;diff=67827</id>
		<title>Librocket API Element</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Librocket_API_Element&amp;diff=67827"/>
		<updated>2026-10-28T18:30:55Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Element}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Element}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Librocket_API_Document&amp;diff=67826</id>
		<title>Librocket API Document</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Librocket_API_Document&amp;diff=67826"/>
		<updated>2026-10-28T18:30:44Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Document}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Document}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Librocket_API_Context&amp;diff=67825</id>
		<title>Librocket API Context</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Librocket_API_Context&amp;diff=67825"/>
		<updated>2026-10-28T18:30:31Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Context}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Context}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Librocket_API_Reference&amp;diff=67824</id>
		<title>Librocket API Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Librocket_API_Reference&amp;diff=67824"/>
		<updated>2026-10-28T18:30:19Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Reference}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket-API-Reference}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Librocket&amp;diff=67823</id>
		<title>Librocket</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Librocket&amp;diff=67823"/>
		<updated>2026-10-28T18:30:02Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/Librocket}}&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=System_map.tbl&amp;diff=67822</id>
		<title>System map.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=System_map.tbl&amp;diff=67822"/>
		<updated>2026-10-28T18:29:50Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/system_map.tbl}} Category:SCPUI Category:Tables&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/system_map.tbl}} [[Category:SCPUI]] [[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Options.tbl&amp;diff=67821</id>
		<title>Options.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Options.tbl&amp;diff=67821"/>
		<updated>2026-10-28T18:29:38Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/options.tbl}} Category:SCPUI Category:Tables&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/options.tbl}} [[Category:SCPUI]] [[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Nodemap.tbl&amp;diff=67820</id>
		<title>Nodemap.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Nodemap.tbl&amp;diff=67820"/>
		<updated>2026-10-28T18:29:27Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/nodemap.tbl}} Category:SCPUI Category:Tables&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/nodemap.tbl}} [[Category:SCPUI]] [[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Keywords.tbl&amp;diff=67819</id>
		<title>Keywords.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Keywords.tbl&amp;diff=67819"/>
		<updated>2026-10-28T18:29:15Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/keywords.tbl}} Category:SCPUI Category:Tables&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/keywords.tbl}} [[Category:SCPUI]] [[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Journal.tbl&amp;diff=67818</id>
		<title>Journal.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Journal.tbl&amp;diff=67818"/>
		<updated>2026-10-28T18:29:01Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/journal.tbl}} Category:SCPUI Category:Tables&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/journal.tbl}} [[Category:SCPUI]] [[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Achievements.tbl&amp;diff=67817</id>
		<title>Achievements.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Achievements.tbl&amp;diff=67817"/>
		<updated>2026-10-28T18:28:50Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/achievements.tbl}} Category:SCPUI Category:Tables&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/achievements.tbl}} [[Category:SCPUI]] [[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Scpui.tbl&amp;diff=67816</id>
		<title>Scpui.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Scpui.tbl&amp;diff=67816"/>
		<updated>2026-10-28T18:28:37Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/scpui.tbl}} Category:SCPUI Category:Tables&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki/scpui.tbl}} [[Category:SCPUI]] [[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Scpui&amp;diff=67815</id>
		<title>Scpui</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Scpui&amp;diff=67815"/>
		<updated>2026-10-28T18:28:18Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Replaced content with &amp;quot;500px  {{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki}} Category:SCPUI&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:SCPUI-trim.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
{{SCPUI moved|https://github.com/MjnMixael/SCPUI/wiki}} [[Category:SCPUI]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Template:SCPUI_moved&amp;diff=67814</id>
		<title>Template:SCPUI moved</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Template:SCPUI_moved&amp;diff=67814"/>
		<updated>2026-10-28T18:24:10Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Notice for pages moved to the SCPUI GitHub wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #888; padding:8px 12px; margin-bottom:1em;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;This page has moved.&#039;&#039;&#039; SCPUI documentation now lives on the [https://github.com/MjnMixael/SCPUI/wiki SCPUI GitHub wiki].&amp;lt;br/&amp;gt;&lt;br /&gt;
See &#039;&#039;&#039;[{{{1}}} the new version of this page]&#039;&#039;&#039;. The old content is still available in this page&#039;s history.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Scpui.tbl&amp;diff=67159</id>
		<title>Scpui.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Scpui.tbl&amp;diff=67159"/>
		<updated>2026-03-26T14:42:50Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: /* #Settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SCPUI_table}}&lt;br /&gt;
{{Tables}}&lt;br /&gt;
Scpui.tbl is used by the [[SCPUI]] script system to define what [[List_of_Game_States|engine game states]] are linked to [[librocket]] RML files. This effectively allows SCPUI to override a built-in game UI with one of its own. This table also allows setting various background definitions for UIs on a granular basis.&lt;br /&gt;
&lt;br /&gt;
SCPUI.tbl can be extended with xxx-ui.tbm.&lt;br /&gt;
&lt;br /&gt;
==SCPUI.tbl==&lt;br /&gt;
*SCPUI defines what game states and substates exist for SCPUI through the use of this table file and modular -ui.tbms.&lt;br /&gt;
*Begins with one of the section names and ends with #End&lt;br /&gt;
&lt;br /&gt;
==#Settings==&lt;br /&gt;
*This section defines a few global SCPUI settings&lt;br /&gt;
&lt;br /&gt;
===$Mod ID:===&lt;br /&gt;
*The mod ID to use. By default this will match your mod&#039;s path root folder. For example, [[bta|Between the Ashes]] has a -mod line like &amp;lt;code&amp;gt;-mod BTA-2.0.0\content&amp;lt;/code&amp;gt; and so the default Mod ID will resolve to &amp;lt;code&amp;gt;BTA&amp;lt;/code&amp;gt;. If your game runs without a -mod command line then it would be a good idea to set an ID here to prevent it from being &amp;quot;unknown_mod_id&amp;quot;.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Default FSO Font Name:===&lt;br /&gt;
*The Font name or index from fonts.tbl that SCPUI should use to get a base pixel value from. By default it will use the font at index 1.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Hide Multiplayer:===&lt;br /&gt;
*Hides all references and navigation to multiplayer UI screens and options. Useful if your mod does not support Multi.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Disable during Multiplayer:===&lt;br /&gt;
*Entirely disables SCPUI when in multiplayer mode.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Data Saver Multiplier:===&lt;br /&gt;
*A numeric multiplier used to generate SCPUI&#039;s save data hash. Generally this is not needed but can be useful if there are conflicts between mods.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Ship Icon Width:===&lt;br /&gt;
*Specifies the width of the icon used for ships in the SCPUI system.&lt;br /&gt;
*This value is optional. If not provided, a default width of 128 will be used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Ship Icon Height:===&lt;br /&gt;
*Specifies the height of the icon used for ships in the SCPUI system.&lt;br /&gt;
*This value is optional. If not provided, a default height of 112 will be used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Weapon Icon Width:===&lt;br /&gt;
*Specifies the width of the icon used for weapons in the SCPUI system.&lt;br /&gt;
*This value is optional. If not provided, a default width of 112 will be used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Weapon Icon Height:===&lt;br /&gt;
*Specifies the height of the icon used for weapons in the SCPUI system.&lt;br /&gt;
*This value is optional. If not provided, a default height of 48 will be used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Use Legacy Slider For Volume:===&lt;br /&gt;
*Forces SCPUI to use the retail style 10-dot slider for volume controls instead of the more modern range slider controls.&lt;br /&gt;
*This value is optional. If not provided, a default false will be used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Database Unread Show String Badge:===&lt;br /&gt;
*If true, then unread database entries will display a text badge (such as &amp;quot;NEW!&amp;quot;).&lt;br /&gt;
*This value is optional. If not provided, the default is false.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Database Unread String Badge Class:===&lt;br /&gt;
*Specifies the RCSS class(es) to apply to the unread string badge element.&lt;br /&gt;
*This allows customization of font color, weight, or other text styling.&lt;br /&gt;
*This value is optional. If not provided, no class will be applied.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039; (RCSS class name or space-separated list of class names)&lt;br /&gt;
&lt;br /&gt;
===$Database Unread String Badge Text:===&lt;br /&gt;
*Specifies the text displayed in the unread string badge.&lt;br /&gt;
*If not provided, the default is the localized &amp;quot;NEW!&amp;quot; string.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Database Unread Show Icon Badge:===&lt;br /&gt;
*If true, then unread database entries will display an icon badge (an image).&lt;br /&gt;
*This value is optional. If not provided, the default is false.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Database Unread Icon Badge Class:===&lt;br /&gt;
*Specifies the RCSS class(es) to apply to the unread icon &amp;lt;img&amp;gt; element.&lt;br /&gt;
*This allows control of icon sizing, margins, and positioning.&lt;br /&gt;
*This value is optional. If not provided, no class will be applied.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039; (RCSS class name or space-separated list of class names)&lt;br /&gt;
&lt;br /&gt;
===$Database Unread Icon Badge Filename:===&lt;br /&gt;
*Specifies the filename of the icon to use for the unread badge.&lt;br /&gt;
*The path is relative to the mod’s interface art directory.&lt;br /&gt;
*This value is optional. If not provided, no icon is shown.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039; (filename, e.g. &amp;quot;new_badge.png&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===$Database Unread Badge Position:===&lt;br /&gt;
*Controls whether the unread badge (text and/or icon) is displayed before or after the entry title.&lt;br /&gt;
*Valid values are &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot;. Any invalid value will default to &amp;quot;left&amp;quot;.&lt;br /&gt;
*This value is optional. If not provided, the default is &amp;quot;left&amp;quot;.&lt;br /&gt;
*CURRENTLY NOT SUPPORTED AND HARD RESETS TO LEFT&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Database Unread Item Class:===&lt;br /&gt;
*Specifies the RCSS class(es) to apply to the entire title text when the entry is unread.&lt;br /&gt;
*This allows you to change the appearance of the entry header (e.g. brighter text, bold, highlight).&lt;br /&gt;
*This value is optional. If not provided, no additional class is applied.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039; (RCSS class name or space-separated list of class names)&lt;br /&gt;
&lt;br /&gt;
===$Minimum Splash Time:===&lt;br /&gt;
*Specifies the minimum time each splash screen should be shown in seconds during preload.&lt;br /&gt;
*This value is optional. If not provided, a default time of 2 will be used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Fade Splash Images:===&lt;br /&gt;
*Determines if the splash images should fade in and out during preload.&lt;br /&gt;
*This value is optional. If not provided, a default value of true is used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Draw Splash Images:===&lt;br /&gt;
*Determines if the splash images should be drawn at all during preload.&lt;br /&gt;
*This value is optional. If not provided, a default value of true is used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Draw Splash Text:===&lt;br /&gt;
*Determines if the splash text should be drawn at all during preload.&lt;br /&gt;
*This value is optional. If not provided, a default value of true is used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Always Allow Show All:===&lt;br /&gt;
*Allows the Ctrl-Shift-S &amp;quot;show all&amp;quot; feature used in the tech room and other UIs to be used in release builds&lt;br /&gt;
*This value is optional. If not provided, a default value of false is used.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;boolean&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==#State Replacement==&lt;br /&gt;
*This section defines what RML files are used to replace specific game states.&lt;br /&gt;
&lt;br /&gt;
===$State:===&lt;br /&gt;
*The game state to replace from [[List_of_Game_States|FSO&#039;s game states]]&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===+Substate:===&lt;br /&gt;
*The name of the substate&lt;br /&gt;
*Required for GS_STATE_SCRIPTING&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===+Markup:===&lt;br /&gt;
*The path to the RML file definition to use for the game state&lt;br /&gt;
*Must include the file path&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==#Background Replacement==&lt;br /&gt;
*Defines what css class to use to set the background for UIs on a per-campaign or per-mainhall basis.&lt;br /&gt;
*Mainhall defines take priority over Campaign defines.&lt;br /&gt;
*By default all UIs use the css class&amp;lt;code&amp;gt;general_bg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===$Campaign Background:===&lt;br /&gt;
*Designates that a new define will follow&lt;br /&gt;
*Has no arguments&lt;br /&gt;
&lt;br /&gt;
====+Campaign Filename:====&lt;br /&gt;
*The campaign filename without extension&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+RCSS Class Name:====&lt;br /&gt;
*The css class name to use as a replacement. Make sure this class exists in a loaded rcss file!&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Mainhall Background:===&lt;br /&gt;
*Designates that a new define will follow&lt;br /&gt;
*Has no arguments&lt;br /&gt;
&lt;br /&gt;
====+Mainhall Name:====&lt;br /&gt;
*The mainhall name&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+RCSS Class Name:====&lt;br /&gt;
*The css class name to use as a replacement. Make sure this class exists in a loaded rcss file!&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==#Briefing Stage Background Replacement==&lt;br /&gt;
*Defines customized briefing grid backgrounds on a per-mission or per-briefing-stage level.&lt;br /&gt;
*The background is &amp;lt;code&amp;gt;br-black.png&amp;lt;/code&amp;gt; by default.&lt;br /&gt;
&lt;br /&gt;
===$Briefing Grid Background:===&lt;br /&gt;
*Designates that a new define will follow&lt;br /&gt;
*Has no arguments&lt;br /&gt;
&lt;br /&gt;
====+Mission Filename:====&lt;br /&gt;
*The mission filename where the briefing background will be replaced&lt;br /&gt;
*Without extension&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Default Background Filename:====&lt;br /&gt;
*The new default background file to use for the mission&lt;br /&gt;
*WITH extension&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Stage Override:====&lt;br /&gt;
*The briefing stage of the mission to define an override for&lt;br /&gt;
*Not required for every stage. Any stage without an override will use the mission default&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;integer&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====+Background Filename:=====&lt;br /&gt;
*The new default background file to use for the stage&lt;br /&gt;
*WITH extension&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==#Medal Placements==&lt;br /&gt;
*This section defines how medals are placed in SCPUI&#039;s ui because SCPUI cannot use the definitions in the retail [[medals.tbl|medals.tbl.]]&lt;br /&gt;
*SCPUI expects 5 image files for each medal, a blank indent of the medal (no medal), the medal with no badge, the medal with bronze badge, the medal with silver badge, the medal with gold badge. These should be named MEDALNAME_00, MEDALNAME_01, MEDALNAME_02, MEDALNAME_03, MEDALNAME_04 where MEDALNAME is the [[Medals.tbl#.24Bitmap:|Bitmap defined in medals.tbl]].&lt;br /&gt;
&lt;br /&gt;
===$Medal:===&lt;br /&gt;
*The name of the medal as defined in [[Medals.tbl#.24Name:|medals.tbl]].&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Alt Bitmap:====&lt;br /&gt;
*Allows specifying an alternate SCPUI specific bitmap to use in the medals ui instead of the bitmap tabled for the retail UI&lt;br /&gt;
*This is mostly for FSPort since SCPUI carries artwork for all retail medals but sequentially numbers them for FS1 medals. A translation list of medal numbers is [[Scpui.tbl#FS1_Medal_Numbering_Chart|below.]]&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Alt Debrief Bitmap:====&lt;br /&gt;
*Allows specifying an alternate SCPUI specific bitmap to use in the debrief ui instead of the bitmap tabled for the retail UI&lt;br /&gt;
*This is mostly for FSPort since SCPUI carries artwork for all retail medals but sequentially numbers them for FS1 medals. A translation list of medal numbers is [[Scpui.tbl#FS1_Medal_Numbering_Chart|below.]]&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;string&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Position X:====&lt;br /&gt;
*The X coordinate for the medal&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Position Y:====&lt;br /&gt;
*The Y coordinate for the medal&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Width:====&lt;br /&gt;
*The width of the medal&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;float&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===FS1 Medal Numbering Chart===&lt;br /&gt;
SCPUI carries artwork for all FS1 and FS2 medals. The bitmaps for FS1 and FS2 in retail are numerically numbered in such a way that they would overlap so SCPUI, technically being a mod of FS2, adds the FS1 medal artwork and sequentially numbers them starting after the last FS2 medal. Here is a quick conversion chart.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FS1 Original Number&lt;br /&gt;
! SCPUI Number&lt;br /&gt;
|-&lt;br /&gt;
| 00&lt;br /&gt;
| 20&lt;br /&gt;
|-&lt;br /&gt;
| 01&lt;br /&gt;
| 01&lt;br /&gt;
|-&lt;br /&gt;
| 02&lt;br /&gt;
| 02&lt;br /&gt;
|-&lt;br /&gt;
| 03&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| 04&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| 05&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| 06&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| 07&lt;br /&gt;
| 07&lt;br /&gt;
|-&lt;br /&gt;
| 08&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| 09&lt;br /&gt;
| 19&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 13&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#State Replacement&lt;br /&gt;
&lt;br /&gt;
$State: GS_STATE_INITIAL_PLAYER_SELECT&lt;br /&gt;
+Markup: data/interface/markup/pilot_select.rml&lt;br /&gt;
&lt;br /&gt;
$State: GS_STATE_SCRIPTING&lt;br /&gt;
+Substate: Newsroom&lt;br /&gt;
+Markup: data/interface/markup/journal.rml&lt;br /&gt;
&lt;br /&gt;
#Background Replacement&lt;br /&gt;
&lt;br /&gt;
$Campaign Background:&lt;br /&gt;
	+Campaign Filename: bta1_m&lt;br /&gt;
	+RCSS Class Name: bta1_bg&lt;br /&gt;
&lt;br /&gt;
#Briefing Stage Background Replacement&lt;br /&gt;
&lt;br /&gt;
$Briefing Grid Background:&lt;br /&gt;
	+Mission Filename: bta2_m1_01&lt;br /&gt;
	+Default Background Filename: br-black.png&lt;br /&gt;
	+Stage Override: 1&lt;br /&gt;
		+Background Filename: br-deltaserpentis.png&lt;br /&gt;
	+Stage Override: 2&lt;br /&gt;
		+Background Filename: br-stars.png&lt;br /&gt;
	+Stage Override: 5&lt;br /&gt;
		+Background Filename: br-luyten.png&lt;br /&gt;
&lt;br /&gt;
#End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Tables]]&lt;br /&gt;
[[Category:SCPUI]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Scpui&amp;diff=67151</id>
		<title>Scpui</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Scpui&amp;diff=67151"/>
		<updated>2026-03-17T14:39:12Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: /* Custom Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:SCPUI-trim.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
SCPUI is a term that refers to both the LUA Script implementation and the user interface LUA API in the FreespaceOpen engine available from versions 23.2 onwards. It is intended to be used with the [[librocket|librocket libraries]] to replace the base Freespace Open interface in an easily customizable way through LUA scripts.&lt;br /&gt;
&lt;br /&gt;
The original implementation of SCPUI was started by m!m and finished by MjnMixael. This specific implementation attempts to replicate the original Freespace UI experience while offering enhancements such as in-game options not normally available.&lt;br /&gt;
&lt;br /&gt;
[[librocket|For documentation on the Librocket API, go here.]]&lt;br /&gt;
&lt;br /&gt;
The GitHub source files for SCPUI are available [https://github.com/MjnMixael/SCPUI here.] However, it is highly recommended that you have your game or mod rely on the core SCPUI mod on Knossos.NET [https://fsnebula.org/mod/SCPUI here.]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
SCPUI works by completely overriding a given game state&#039;s internal code. Everything that interface should be expected to do must be handled in the Lua scripts. Methods to get and set appropriate game data are supplied by FSO&#039;s UI API. The core file that handles this is &amp;lt;code&amp;gt;scpui_system_core.lua&amp;lt;/code&amp;gt;. This file is SCPUI&#039;s state management controller. If it detects a valid SCPUI interface for a given game state, it will load a librocket file and begin execution of the appropriate scripts.&lt;br /&gt;
&lt;br /&gt;
An SCPUI game state definition has three main files; RML, RCSS, and LUA. More information is available on those specific pages, but for now it&#039;s enough to know that RML is a kind of base HTML, RCSS is a base CSS, and LUA is an FSO compatible LUA file.&lt;br /&gt;
&lt;br /&gt;
The lua file for that state will be run until an FSO game state change is detected. When that happens, the ui_system-sct will clean up the librocket elements and then check if a new set of SCPUI files should be loaded.&lt;br /&gt;
&lt;br /&gt;
The FSO Engine&#039;s Lua API provides a library of methods for interfacing with UI code. Please consult the [[Command-Line_Reference#-output_scripting|scripting.html]] file and the &#039;&#039;&#039;&#039;&#039;UserInterface (ui)&#039;&#039;&#039;&#039;&#039; library for details.&lt;br /&gt;
&lt;br /&gt;
==Scpui.tbl==&lt;br /&gt;
SCPUI&#039;s global settings can be modified with scpui.tbl or xxx-ui.tbm files.&lt;br /&gt;
[[scpui.tbl|Documentation on scpui.tbl is available here.]]&lt;br /&gt;
&lt;br /&gt;
==Visual Customization==&lt;br /&gt;
Unlike FSO&#039;s built-in User Interface, SCPUI liberally re-uses visual assets wherever possible. Because of this, there are only about 225 image files compared to retail&#039;s thousands. This makes changing the look and feel of the UI incredibly easy even for those who are not interested in modifying the underlying Lua code.&lt;br /&gt;
&lt;br /&gt;
===Custom.RCSS===&lt;br /&gt;
Every UI screen loads &amp;lt;code&amp;gt;custom.rcss&amp;lt;/code&amp;gt; as its primary style sheet in addition to the rest of the style sheets for that UI screen. The idea here is that you can list all of your custom styles in that file stored in your own mod&#039;s game data. The file should be &amp;lt;code&amp;gt;data/interface/css/custom.rcss&amp;lt;/code&amp;gt; and you can start by copying the file directly out of SCPUI&#039;s base install. This is also where you&#039;ll set your mod&#039;s primary font file.&lt;br /&gt;
&lt;br /&gt;
===Fonts===&lt;br /&gt;
Fonts are defined in SCPUI using an &amp;lt;code&amp;gt;.rcss&amp;lt;/code&amp;gt; style sheet. In the base install of SCPUI, the primary font is defined in &amp;lt;code&amp;gt;custom.rcss&amp;lt;/code&amp;gt; like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body&lt;br /&gt;
{&lt;br /&gt;
	font-family: BankGothic Md BT;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the font-family is the font&#039;s name as defined in the font metadata and not the filename. In some fonts that may strictly be the font family name only, but not always. For example, &amp;lt;code&amp;gt;Noto Sans Medium&amp;lt;/code&amp;gt; actually needs to be listed as &amp;lt;code&amp;gt;Noto Sans&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You will want to put all family variant font files (for example: BankGothic.ttf, BankGothic-bold.ttf, BankGotic-italic.ttf) in the &amp;lt;code&amp;gt;data/fonts&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
SCPUI will try to match it&#039;s default font size to FSO&#039;s internal font size, which be default is the first font in fonts.tbl. You can customize this setting in [[scpui.tbl|scpui.tbl.]]. You will also want to enable &amp;lt;code&amp;gt;+Auto Scale&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;+Can Scale&amp;lt;/code&amp;gt; on your default FSO font in [[fonts.tbl|fonts.tbl]] so that SCPUI&#039;s font and FSO&#039;s font can scale together as players will expect.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
You can change the main background image for all SCPUI screens by simply replacing &amp;lt;code&amp;gt;bg.png&amp;lt;/code&amp;gt;. Other background features are covered in the [[scpui.tbl|scpui.tbl documentation.]]&lt;br /&gt;
&lt;br /&gt;
===Logo===&lt;br /&gt;
There are several UI screens that use a logo image. It comes in three main variants...&lt;br /&gt;
&lt;br /&gt;
*Standard&lt;br /&gt;
**Replace &amp;lt;code&amp;gt;logo.png&amp;lt;/code&amp;gt; to replace the standard logo throughout all of SCPUI.&lt;br /&gt;
*Wide&lt;br /&gt;
**For FS2, this logo is the version with the &amp;quot;wings&amp;quot;. Replace &amp;lt;code&amp;gt;logo-wide.png&amp;lt;/code&amp;gt; to change this one.&lt;br /&gt;
*Loop&lt;br /&gt;
**In FS2 this is the [[Special_Operations_Command|SOC]] logo used in the Loop Brief UI. For this one replace &amp;lt;code&amp;gt;loop-logo.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Loading Screen Backgrounds===&lt;br /&gt;
Loading screen backgrounds are handled a little differently than in base FreespaceOpen. You must create or modify the &amp;lt;code&amp;gt;load_screen_bgs.rcss&amp;lt;/code&amp;gt; file to add the custom backgrounds you wish to use. In that file create a css class with the mission filename that is to have a custom screen and then define the file like the example below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.bta1_m1_01 {&lt;br /&gt;
	background-decorator: image;&lt;br /&gt;
	background-image: 3_Load_1M1_01.png;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mission &amp;lt;code&amp;gt;bta_m1_01.fs2&amp;lt;/code&amp;gt; will now have the image &amp;lt;code&amp;gt;3_Load_1M1_01.png&amp;lt;/code&amp;gt; used as it&#039;s background.&lt;br /&gt;
&lt;br /&gt;
To modify the loading bar see [[scpui#UI_Topics|UI Topics.]]&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
SCPUI has a built in feature to allow coloring keywords automatically for UI the various briefing screens. It can also, optionally, add tooltips to these keywords. This feature works in Briefing, Command Briefing, Debriefing, Fiction Viewer, Loop Briefing, and Red Alert. Definitions for keywords are tabled in a special table. See [[keywords.tbl|keywords.tbl documentation]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Elements===&lt;br /&gt;
The main UI elements (window boxes, button panels, etc) are all re-used liberally throughout SCPUI. At the time of writing this article, there are 53 of these files in total. You can modify them however you like.&lt;br /&gt;
&lt;br /&gt;
*It is highly recommended you do not change the aspect ratio of these images if you do not want to have to modify RML and RCSS files.&lt;br /&gt;
&lt;br /&gt;
===Buttons===&lt;br /&gt;
There are a number of button styles that SCPUI uses to match FS2&#039;s retail UI. Each button has at least three images: Main, Hover, and On. Generally they are designated like the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arrow-up.png ;;Main&lt;br /&gt;
arrow-up-h.png ;;Hover&lt;br /&gt;
arrow-up-o.png ;;On&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases there are Positive and Negative versions. These are named like the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select.png ;;Main&lt;br /&gt;
select-pos-h.png ;;Positive Hover&lt;br /&gt;
select-pos-o.png ;;Positive On&lt;br /&gt;
select-neg-h.png ;;Negative Hover&lt;br /&gt;
select-neg-o.png ;;Negative On&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Custom Data===&lt;br /&gt;
SCPUI often uses special [[Ships.tbl#$Custom data:|Custom Data]] for various special cases. This provides a way to set values per-object without needing additional tables. All keys are optional.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Value Type&lt;br /&gt;
! Supported Tables&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;HideInTechRoom&amp;lt;/code&amp;gt;&lt;br /&gt;
| Boolean (default: false)&lt;br /&gt;
| ships.tbl, weapons.tbl&lt;br /&gt;
| If true, the object is always hidden from the tech room, including when using Ctrl+S.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LoadoutListPriority&amp;lt;/code&amp;gt;&lt;br /&gt;
| Integer (default: -1)&lt;br /&gt;
| ships.tbl, weapons.tbl&lt;br /&gt;
| Controls sorting in ship and weapon loadout UIs. 1 is highest priority; -1 means no priority.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Briefing Color Tags==&lt;br /&gt;
SCPUI supports two methods for coloring text in briefings. It supports the retail style [[Briefing Text|color tag]] system out of the box. However, SCPUI also has its own HTML-based approach to styling text. It works everywhere that classic color tags do - briefings (including command, loop, and red alert briefings), debriefings, and the fiction viewer - but also the tech room, campaign descriptions, and nearly everywhere that long-form text is supported. For it to work in briefings, the text must be put in &amp;quot;HTML mode&amp;quot; by putting &amp;lt;code&amp;gt;!html&amp;lt;/code&amp;gt; at the start, followed by a space. Everywhere else will work without that tag.&lt;br /&gt;
&lt;br /&gt;
Text in HTML mode may contain HTML markup. Text may be styled using &amp;lt;code&amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;lt;/code&amp;gt; tags with appropriate classes drawn from common.rcss; inline styles are also supported. FSO and HTML both make use of double quotes and slashes; to minimize conflicts, using single quotes and writing slashes as &amp;lt;code&amp;gt;$slash&amp;lt;/code&amp;gt; is recommended. A complete example might look something like this: &amp;lt;code&amp;gt;!html &amp;amp;lt;span class=&#039;white&#039;&amp;amp;gt;Pilot attend!&amp;amp;lt;$slashspan&amp;amp;gt; Today, we&#039;ll be escorting the &amp;amp;lt;span class=&#039;green italic&#039;&amp;amp;gt;GTC Examplar&amp;amp;lt;$slashspan&amp;amp;gt; as she raids &amp;amp;lt;span class=&#039;red&#039;&amp;amp;gt;Shivan&amp;amp;lt;$slashspan&amp;amp;gt; positions throughout &amp;amp;lt;span class=&#039;yellow&#039;&amp;amp;gt;Gamma Draconis&amp;amp;lt;$slashspan&amp;amp;gt;.&amp;lt;/code&amp;gt; The list of color classes available by default is at the bottom of &amp;lt;code&amp;gt;common.rcss&amp;lt;/code&amp;gt;. You can add more to &amp;lt;code&amp;gt;custom.rcss&amp;lt;/code&amp;gt; if needed.&lt;br /&gt;
&lt;br /&gt;
It is, however, rarely necessary to perform simple styling like this manually: SCPUI&#039;s [[Keywords.tbl]] may be used to automate common styling rules.&lt;br /&gt;
&lt;br /&gt;
==Loadout Select Icons==&lt;br /&gt;
SCPUI supports both 2D pre-drawn icons as well as generated 3D icons. However, they are handled a little differently than inside base FSO. SCPUI pre-generates icon images on game start and displays those in place of the actual icons. Icons are generated during SCPUI&#039;s splash screens and cached to the appdata directory to speed up load times on subsequent gameplay instances.&lt;br /&gt;
&lt;br /&gt;
To use 3D icons generated from ship models you must have 3D icons enabled in your [[game_settings.tbl#.24Use_3d_ship_select:|game_settings.tbl]] and for weapons you must have a [[Weapons.tbl#.24Tech_Model:|Tech Model defined]].&lt;br /&gt;
&lt;br /&gt;
To use 2D icons you must have a Select Icon defined for the [[Ships.tbl#.24Ship_Icon:|ship]] or [[Weapons.tbl#.24Icon:|weapon]].&lt;br /&gt;
&lt;br /&gt;
You can set the icon dimensions in [[Scpui.tbl|scpui.tbl]].&lt;br /&gt;
&lt;br /&gt;
==Ribbons==&lt;br /&gt;
SCPUI comes with a brand new award system called Ribbons. This is meant as a way for players to show off how many FreespaceOpen Engine games they have completed. Ribbons are granted via the &amp;lt;code&amp;gt;grant-scpui-ribbon&amp;lt;/code&amp;gt; sexp and once granted cannot be modified. Ribbons are saved to global data that spans all Freespace campaigns, mods, and other games. An example of what ribbons look like is below.&lt;br /&gt;
[[Image:Scpui_ribbons.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
==Achievements==&lt;br /&gt;
SCPUI comes with a full achievements system. Achievements can be automatically granted in some cases or granted by sexp in others. Achievements must be defined in the new [[Achievements.tbl|achievements.tbl]]. Achievement progress is stored automatically on a per-player and per-mod basis. When an achievement is unlocked, a notification is automatically shown to the player.&lt;br /&gt;
&lt;br /&gt;
==Loadout Handling==&lt;br /&gt;
SCPUI includes an entirely custom loadout handler that bypasses some of FSO&#039;s built-in methods. The biggest change is that each loadout is saved to a json file in the player&#039;s appdata directory as &amp;lt;code&amp;gt;scpui_loadouts.cfg&amp;lt;/code&amp;gt;. Note this is saved in the mod&#039;s appdata directory and not the players directory. &lt;br /&gt;
&lt;br /&gt;
The past loadout will be reloaded across game instances and much more reliably across gameplay entirely. Loadout saves differentiate between missions played in Campaign and missions played via Simulator room.&lt;br /&gt;
&lt;br /&gt;
==Optional Extensions==&lt;br /&gt;
SCPUI comes with several optional extension UIs that can be used for specific tasks that the base FreespaceOpen interface is not equipped for. These packages must be enabled in your SCPUI configuration with buttons for access added where desired. Each one has its own set of UI Topics, table parsers, SEXPs, or other features.&lt;br /&gt;
&lt;br /&gt;
===Journal===&lt;br /&gt;
The Journal extension was based heavily of Axem&#039;s original Lua-only version. SCPUI&#039;s iteration is not backwards compatible with it but comes with several enhancements for easier translation and management.&lt;br /&gt;
&lt;br /&gt;
The Journal is configured on a per-campaign basis where each campaign loads from a table matching the format &amp;lt;code&amp;gt;CAMPAIGN_FILE_NAME-journal.tbl&amp;lt;/code&amp;gt;. [[Journal.tbl|Documentation is available here.]]&lt;br /&gt;
&lt;br /&gt;
===Node Map===&lt;br /&gt;
The Node Map extension was originally created for [[bta|Between the Ashes]] and was intended to be used in the tech room. Some configuration with UI Topics may be necessary to modify its appearance to work in other contexts.&lt;br /&gt;
&lt;br /&gt;
The Node Map features a robust progression system so the map can optionally update as the campaign progresses. All configuration is done with the [[Nodemap.tbl|nodemap.tbl]]. The progression system must be defined by the mod&#039;s own Lua scripts through the use of UI Topics.&lt;br /&gt;
&lt;br /&gt;
===Local System Map===&lt;br /&gt;
The Local System Map extension was originally by Axem as a Lua only interface. This version was rebuilt from the ground up for [[bta|Between the Ashes]] and, notably, cannot be used in-mission like Axem&#039;s original version.&lt;br /&gt;
&lt;br /&gt;
The Local System Map configuration is done with the [[System_map.tbl|system_map.tbl]].&lt;br /&gt;
&lt;br /&gt;
==Advanced Customization==&lt;br /&gt;
&#039;&#039;&#039;The following sections assume a working knowledge of Lua and are intended for users who wish to extend SCPUI in more advanced ways.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SCPUI is a highly flexible system that allows for extensive customization through Lua scripting. To fully take advantage of these features, you will need to understand Lua and be comfortable writing, debugging, and integrating Lua scripts within the FreespaceOpen Engine environment.&lt;br /&gt;
&lt;br /&gt;
This section introduces the types of scripts used in SCPUI and how they fit into the overall architecture.&lt;br /&gt;
&lt;br /&gt;
===Script Architecture===&lt;br /&gt;
SCPUI organizes its scripts into distinct categories to improve modularity, maintainability, and extensibility. Each type of script serves a specific purpose:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Submodules&#039;&#039;&#039;: Submodules are core components of SCPUI or one of its extensions, designed to handle specific tasks or functionality. They are automatically loaded during initialization. Submodules help organize code into manageable files that work together to deliver SCPUI&#039;s core features.&lt;br /&gt;
** Naming convention: `scpui_sm_*.lua`&lt;br /&gt;
** Naming convention for extensions: `scpui_SUBMODULE_sm*.lua`&lt;br /&gt;
** Loading: Core submodules are loading during SCPUI&#039;s core initialization. Submodules for extensions are loaded after that extension has been initialized.&lt;br /&gt;
** Examples: A submodule to manage table parsing or handle preload operations.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Extensions&#039;&#039;&#039;: Extensions are optional add-ons that provide entirely new functionality or custom UI elements for SCPUI. They can include their own submodules, controllers, and other assets. Extensions are ideal for games that require unique user interfaces as part of the SCPUI system.&lt;br /&gt;
**Naming convention: `scpui_ext_*.lua`&lt;br /&gt;
**Variables: Each extension must include the following variables: &lt;br /&gt;
***Name: The user-facing name of the extension.&lt;br /&gt;
***Version: The current version of the extension.&lt;br /&gt;
***Submodule: The text used to find the extension&#039;s submodules.&lt;br /&gt;
***Key: The key that will be used to access the Extension within the &amp;lt;code&amp;gt;ScpuiSystem.extensions&amp;lt;/code&amp;gt; table.&lt;br /&gt;
**Initialization: Each extension must include an init function. SCPUI will call this function as soon as the extension is loaded.&lt;br /&gt;
**Post Initialization: Each extension may optionally include a postInit function. SCPUI will call this function after init and all submodules are loaded.&lt;br /&gt;
**Structure: Extensions must return themselves as a table when called.&lt;br /&gt;
**Loading: Extensions are loaded after SCPUI&#039;s core submodules during SCPUI&#039;s initialization.&lt;br /&gt;
**Examples: A custom campaign journal interface or a map UI.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Plugins&#039;&#039;&#039;: Plugins are lightweight, optional scripts that are loaded after SCPUI has initialized. They allow downstream mods or users to add custom behavior or extend functionality without modifying SCPUI&#039;s core files. Plugins are intended for advanced users who want to integrate new features or adjust existing ones.&lt;br /&gt;
**Naming convention: `scpui_plg_*.lua`&lt;br /&gt;
**Loading: Plugins are loaded last during SCPUI&#039;s initialization after everything else is ready.&lt;br /&gt;
**Examples: A plugin to log custom analytics data or define [[#UI_Topics|UI Topics]] binds.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Controllers&#039;&#039;&#039;: Controllers are Lua scripts associated with a specific UI. They manage the logic, data handling, and interactions for that UI state.&lt;br /&gt;
**Naming convention: `ctrlr_*.lua`&lt;br /&gt;
**Loading: Controllers are loaded by a markdown (RML) file; defined in the header section of that file.&lt;br /&gt;
**Examples: A controller for the main menu, mission briefing screen, or in-game options screen.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Libraries&#039;&#039;&#039;: Libraries are reusable utility scripts that provide specific functionality without being tied to a particular UI state or task. They are designed to be called from other scripts as needed.&lt;br /&gt;
**Naming convention: `lib_*.lua`&lt;br /&gt;
**Structure: Libraries should return themselves as a table when called.&lt;br /&gt;
**Loading: Libraries are loaded when needed by using a &amp;lt;code&amp;gt;require()&amp;lt;/code&amp;gt; method call.&lt;br /&gt;
**Examples: A library for data saving/loading, dialog pop-ups, or utility methods.&lt;br /&gt;
&lt;br /&gt;
===Librocket===&lt;br /&gt;
[[librocket|Librocket]] is a pseudo html/css rendering library included with FSO. It is designed as a complete solution for any project&#039;s interface needs.SCPUI uses this library to create and manage each UI context. &lt;br /&gt;
&lt;br /&gt;
LibRocket uses the time-tested open standards XHTML1.0 and CSS2.0 (while borrowing features from HTML5 and CSS3), and extends them with features suited towards real-time applications.&lt;br /&gt;
&lt;br /&gt;
Documentation on how to interface with the librocket API can be found [[librocket|here]].&lt;br /&gt;
&lt;br /&gt;
===Game State Management===&lt;br /&gt;
SCPUI&#039;s game state management is handled by the [[scpui.tbl]] file that simply lists the game state from [[List_of_Game_States|FSO&#039;s game states]] and matches it with an RML file that will be associated. One notable exception is GS_STATE_SCRIPTING** which allows for substates. This feature means that you can effectively create an unlimited amount of custom UIs that all exist within GS_STATE_SCRIPTING**.&lt;br /&gt;
&lt;br /&gt;
*To call a built-in game state use ba.postGameEvent(&amp;quot;gamestate&amp;quot;).&lt;br /&gt;
*To call a scripting substate use ScpuiSystem:beginSubstate(&amp;quot;substate&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;GS_STATE_SCRIPTING_MISSION can be used for custom UIs that should not end the mission when loaded.&lt;br /&gt;
&lt;br /&gt;
===UI Topics===&lt;br /&gt;
SCPUI implements a way to essentially do modular scripting which allows downstream games to modify how SCPUI works without having to carry a complete copy of SCPUI itself. This system is called UI Topics. These work very similar to FSO engine hooks. There are listeners throughout the SCPUI script base that can be attached to in order to modify behavior of various screens, buttons, or other elements. Every screen contains an initialize topic which is the last code run when a game state is started and a screen is created. As a basic example, [[bta|Between the Ashes]] uses this to modify the background image that is used throughout. Here is the Topic code that is used to change the Fiction Viewer background.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local Topics = require(&#039;lib_ui_topics&#039;)&lt;br /&gt;
local Utils = require (&#039;lib_utils&#039;)&lt;br /&gt;
&lt;br /&gt;
Topics.fictionviewer.initialize:bind(1, function(message, context)&lt;br /&gt;
  campaignfilename = ba.getCurrentPlayer():getCampaignFilename()&lt;br /&gt;
  local main = message.document:GetElementById(&amp;quot;main_background&amp;quot;)&lt;br /&gt;
  if useSubspaceBG(main) then return end&lt;br /&gt;
  if Utils.isOneOf(campaignfilename, &amp;quot;bta1_m&amp;quot;, &amp;quot;bta2_m&amp;quot;, &amp;quot;bta-tem_m&amp;quot;) then&lt;br /&gt;
    main:SetClass(&amp;quot;fiction_viewer_bg&amp;quot;, true)&lt;br /&gt;
  end&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Topics sometimes include relevant data in the parameters called &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt; and can change specific values by settings &amp;lt;code&amp;gt;context.value&amp;lt;/code&amp;gt;. The initialize topics, like the example above, always send the entire UI document reference. There are others, like the loading screen loading bar that sends the loading bar filename only and expects a filename return. Here is an example that changes the default loading bar image to something else.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Topics.loadscreen.load_bar:bind(9999, function(message, context)&lt;br /&gt;
  context.value = &amp;quot;fancyloadingbar&amp;quot;&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Topics are run based on the priority value, the argument in the bind() method, in order from lowest number to highest. You can prevent higher priority topics from being run at all by setting &amp;lt;code&amp;gt;context.done = true&amp;lt;/code&amp;gt; inside a Topic.&lt;br /&gt;
&lt;br /&gt;
A full list of available topics can be found in SCPUI&#039;s &amp;lt;code&amp;gt;lib_ui_topics.lua&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
===Data Saver===&lt;br /&gt;
SCPUI comes with a set of Lua functions to handle saving and loading custom data quickly and easily for any kind of custom data you need. The data is saved to a json file using a hashed version of the mod&#039;s [[Game_settings.tbl#.24Mod_title:|mod title]] and the hash can be further randomized by setting a custom seed in [[Scpui.tbl#.24Data_Saver_Multiplier:|scpui.tbl]].&lt;br /&gt;
&lt;br /&gt;
Data can be saved as &#039;persistent&#039; or &#039;not persistent&#039;. Persistent data is saved to &amp;lt;pre&amp;gt;data/players&amp;lt;/pre&amp;gt;, meaning it will be available to your mod even across mod versions. Non persistent data is saved to &amp;lt;pre&amp;gt;data/config&amp;lt;/pre&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
All data is saved on a per-pilot basis.&lt;br /&gt;
&lt;br /&gt;
====Saving Arbitrary Data====&lt;br /&gt;
Make sure the data you intend to save can be converted to JSON. Basically don&#039;t send any userdata. Access datasaver by calling &amp;lt;pre&amp;gt;local DataSaver = require(&amp;quot;lib_datasaver&amp;quot;)&amp;lt;/pre&amp;gt;. You can then save arbitrary data with a call like this &amp;lt;pre&amp;gt;DataSaver:saveDataToFile(&amp;quot;data title&amp;quot;, saveData, true)&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Saving data takes three arguments. First is the name of the data. It should be a string. Second is the data to save. The last argument defines if the data is saved as &#039;persistent&#039; (true) or &#039;not persistent&#039; (false) which defines where the data is saved to.&lt;br /&gt;
&lt;br /&gt;
====Loading Arbitrary Data====&lt;br /&gt;
Loading arbitrary data is just as easy. Set up datasaver with a call like this &amp;lt;pre&amp;gt;local DataSaver = require(&amp;quot;lib_datasaver&amp;quot;)&amp;lt;/pre&amp;gt;. Then simply ask for the data you want to load like this &amp;lt;pre&amp;gt;local saveData = DataSaver :loadDataFromFile(&amp;quot;data title&amp;quot;, true) or {}&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Loading data takes two arguments. First is the name of the data and should match the name you used to save with. It should be a string. The second argument defines if the data is loaded as &#039;persistent&#039; (true) or &#039;not persistent&#039; (false) which defines where the data is loaded from.&lt;br /&gt;
&lt;br /&gt;
===Custom Mod Options===&lt;br /&gt;
[[Image:Screen0594.png|thumb|right|480px|The Custom Options in the [[bta|Between the Ashes]] mod.]]&lt;br /&gt;
SCPUI comes with a built-in feature to allow for custom in-game options specific to a particular mod. These options are defined by [[options.tbl]] and saved to the player folder as &amp;lt;code&amp;gt;scpui_options.cfg&amp;lt;/code&amp;gt;. Scripts can take advantage of this feature to allow players to customize how scripts run, or if they even run at all.&lt;br /&gt;
&lt;br /&gt;
For example, you could take the [https://github.com/FSO-Scripters/fso-scripts/tree/master/radaricon HUD Icons script] and create a global toggle. This allows players to turn HUD Icons on or off entirely. Furthermore you could allow customizing the max opacity of the icons, the distance at which the icons become fully transparent, and the distance at which the icons become fully opaque. These options will all within the in-game Options UI.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;Note that [[game_settings.tbl#$Mod_title:|$Mod_title:]] in [[game_settings.tbl]] is required for this feature to work!&#039;&#039;&#039;&#039;&lt;br /&gt;
*It&#039;s a good idea to make sure your mod title is unique to avoid mod options collisions.&lt;br /&gt;
&lt;br /&gt;
====Options.tbl====&lt;br /&gt;
This table file is used to define the Options buttons within the Options UI.&lt;br /&gt;
*It can be extended with xxx-optn.tbl&lt;br /&gt;
*[[options.tbl|Documentation on the options.tbl is available here.]]&lt;br /&gt;
&lt;br /&gt;
====Save Structure====&lt;br /&gt;
The player&#039;s options are saved to &amp;lt;code&amp;gt;scpui_options.cfg&amp;lt;/code&amp;gt; in data/players. This makes the options available across mod versions. The save structure within the file follows a player-&amp;gt;mod-&amp;gt;option hierarchy. (See example below.) This allows for each player to have their own preferences for each mod they play without interfering with other players&#039; preferences.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;John&amp;quot;: {&lt;br /&gt;
	&amp;quot;Between The Ashes&amp;quot;: {&lt;br /&gt;
		&amp;quot;Alarm_Voice&amp;quot;: &amp;quot;Vasudan&amp;quot;,&lt;br /&gt;
		&amp;quot;Verbose_Debugging&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Font_Multiplier&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Icon_Far&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Icon_Near&amp;quot;: 5,&lt;br /&gt;
		&amp;quot;Brief_Render_Option&amp;quot;: &amp;quot;Texture&amp;quot;,&lt;br /&gt;
		&amp;quot;Icon_Opacity&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;Cockpit_Alarms&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;HUD_Icons&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Cockpit_Rendering&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Easter_Eggs&amp;quot;: &amp;quot;On&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;Mike&amp;quot;: {&lt;br /&gt;
	&amp;quot;Between The Ashes&amp;quot;: {&lt;br /&gt;
		&amp;quot;Cockpit_Rendering&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Easter_Eggs&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;Font_Multiplier&amp;quot;: 5,&lt;br /&gt;
		&amp;quot;Icon_Far&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Icon_Near&amp;quot;: 5,&lt;br /&gt;
		&amp;quot;Brief_Render_Option&amp;quot;: &amp;quot;Texture&amp;quot;,&lt;br /&gt;
		&amp;quot;Icon_Opacity&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;Cockpit_Alarms&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;HUD_Icons&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Verbose_Debugging&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;Alarm_Voice&amp;quot;: &amp;quot;Female&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Accessing Save Data====&lt;br /&gt;
Modifying Options within the in-game UI and saving those values to a file is just a start. In order for these options to do anything, you&#039;ll need to hook them into your scripts. After the Pilot Select screen and a player is chosen, the current Options are available in a global variable called &amp;lt;code&amp;gt;ScpuiOptionValues&amp;lt;/code&amp;gt; with direct access to a specific option by specifying the [[options.tbl#+Key:|option key]]. In order to apply these options create a UI Topic connected to &amp;lt;code&amp;gt;options.apply&amp;lt;/code&amp;gt; and run the appropriate code there.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Conditional Hooks&lt;br /&gt;
$Application: FS2_Open&lt;br /&gt;
$On State End:&lt;br /&gt;
[&lt;br /&gt;
(function()&lt;br /&gt;
	&lt;br /&gt;
	local topics = require(&#039;lib_ui_topics&#039;)&lt;br /&gt;
	local md = require(&amp;quot;debugFunctions&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	--Apply user settings to relevant script data&lt;br /&gt;
	topics.options.apply:bind(9999, function(message, context)&lt;br /&gt;
		&lt;br /&gt;
		--Handle HUD Icon Option&lt;br /&gt;
		if ScpuiSystem.data.ScpuiOptionValues.HUD_Icons == &amp;quot;On&amp;quot; then&lt;br /&gt;
			md.print(&amp;quot;MOD OPTION: Player disabled HUD Icons&amp;quot;)&lt;br /&gt;
			RadarIcon.PlayerEnabled = true&lt;br /&gt;
		else&lt;br /&gt;
			md.print(&amp;quot;MOD OPTION: Player enabled HUD Icons&amp;quot;)&lt;br /&gt;
			RadarIcon.PlayerEnabled = false&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end)&lt;br /&gt;
&lt;br /&gt;
end)()&lt;br /&gt;
]&lt;br /&gt;
#End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pilot Select====&lt;br /&gt;
The pilot select UI has special handling of custom mod options because player preferences cannot be loaded until a player is selected. For this specific use case, SCPUI creates a &amp;lt;code&amp;gt;scpui_options_global.cfg&amp;lt;/code&amp;gt; whenever user preferences are saved. This file contains no mod or player specific information in the save structure. It is just a list of key/value pairs for the most recently used pilot.&lt;br /&gt;
*This setup can be used to perform script actions before a player is selected if necessary.&lt;br /&gt;
*In this case, options are still available as &#039;&#039;&#039;&#039;&#039;ScpuiOptionValues&#039;&#039;&#039;&#039;&#039;&#039; and accessed the same way, but there is no guarantee that the option will exist depending on the last mod the player played.&lt;br /&gt;
&lt;br /&gt;
===Dialog Popups===&lt;br /&gt;
Freespace Open has a number of built-in dialog popups throughout the user interface. SCPUI automatically intercepts those popups and displays them as a librocket styled popup window.&lt;br /&gt;
&lt;br /&gt;
You can create your own custom dialog popups within the UI scripts. To do this you must include &amp;lt;code&amp;gt;local Dialogs = require(&amp;quot;lib_dialogs&amp;quot;)&amp;lt;/code&amp;gt; within the scope of your script. The dialogs function has several parameters for you to define.&lt;br /&gt;
&lt;br /&gt;
====Title====&lt;br /&gt;
*Used to define the title of the dialog window.&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:title(&amp;quot;yourtitle&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Text====&lt;br /&gt;
*Used to define the text or description your popup will contain.&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:text(&amp;quot;yourtext&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
*Defines if the user can type a string as input&lt;br /&gt;
*Useful for allowing the user to name pilots, saves, etc&lt;br /&gt;
*User must press ENTER to allow the code to execute on the provided string&lt;br /&gt;
*True to allow input, false to disallow. Defaults to false if this parameter is not provided.&lt;br /&gt;
**&amp;lt;code&amp;gt;dialog:input(boolean)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Buttons====&lt;br /&gt;
*Defines the user-clickable buttons that will be included in the dialog. It has the following parameters&lt;br /&gt;
*Type can be one of the following:&lt;br /&gt;
**Dialogs.BUTTON_TYPE_POSITIVE&lt;br /&gt;
**Dialogs.BUTTON_TYPE_NEGATIVE&lt;br /&gt;
**Dialogs.BUTTON_TYPE_NEUTRAL&lt;br /&gt;
*Text is the text for the button, such as &amp;quot;Okay&amp;quot;.&lt;br /&gt;
*Value is the data that will be returned when the button is clicked.&lt;br /&gt;
*Keypress is the keyboard shortcut for this button.&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:buttons(type, text, value, keypress)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Escape====&lt;br /&gt;
*Used to define if the user should be able to cancel the dialog popup with the ESC key.&lt;br /&gt;
*A non nil value enables ESC and will be the return value if ESC is pressed&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:escape(value)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Show====&lt;br /&gt;
*This is the final step that displays the popup and defines how to handle the return values&lt;br /&gt;
*return values come back as the parameter &#039;&#039;response&#039;&#039;&lt;br /&gt;
*The ui.enableInput() here specifically enables input on the dialog popup context. The dialog will automatically return input to the SCPUI context when it&#039;s closed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dialog:show(self.document.context)&lt;br /&gt;
   :continueWith(function(response)&lt;br /&gt;
      &amp;quot;Execute code here&amp;quot;&lt;br /&gt;
   end)&lt;br /&gt;
ui.enableInput(self.document.context)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Preload Coroutines===&lt;br /&gt;
SCPUI has a preload system that is used to generate the loadout icon cache. However, it is possible to add any number of arbitrary preload coroutines. To add a preload, call &amp;lt;code&amp;gt;ScpuiSystem:addPreload()&amp;lt;/code&amp;gt; with the following arguments:&lt;br /&gt;
*Debug Message&lt;br /&gt;
**The message to print to the log when this preload coroutine is run.&lt;br /&gt;
*Debug String&lt;br /&gt;
**The text string to draw to the screen when this preload coroutine is run and FSO is run in debug mode.&lt;br /&gt;
*Function&lt;br /&gt;
**The actual function to call. Will be called with pcall and errors with the call will halt game execution.&lt;br /&gt;
*Args&lt;br /&gt;
**Any arguments you want to pass to your function in a table.&lt;br /&gt;
*Priority&lt;br /&gt;
**This should be a 1 or 2 and determines if this coroutine runs during the first splash image or the second. This allows having coroutines build upon each other if necessary.&lt;br /&gt;
&lt;br /&gt;
An example of an icon coroutine call.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ScpuiSystem:addPreload(&lt;br /&gt;
    &amp;quot;Generating icon for &amp;quot; .. v.Name,&lt;br /&gt;
    &amp;quot;Generating &amp;quot; .. v.Name .. &amp;quot; icon&amp;quot;,&lt;br /&gt;
    ScpuiSystem.setIconFrames,&lt;br /&gt;
    {ScpuiSystem, v.Name, true},&lt;br /&gt;
    2&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Individual UIs===&lt;br /&gt;
All game stages are now supported with the following exceptions:&lt;br /&gt;
&lt;br /&gt;
*Cutscenes&lt;br /&gt;
**Because of FSO/Librocket limitations, viewing a cutscene actually sets SCPUI to a [[Scpui.tbl#Substate:|Scripting Substate]] for the duration of the cutscene itself.&lt;br /&gt;
*F3 Lab is not supported as an SCPUI style UI. It will use the Base FSO UI&lt;br /&gt;
*F3 In-game options is not supported as an SCPUI style UI.&lt;br /&gt;
**This is because SCPUI integrates in-game options directly into the main options UI.&lt;br /&gt;
*Multi UIs have not been thoroughly tested and may be buggy&lt;br /&gt;
&lt;br /&gt;
===Development and Debugging===&lt;br /&gt;
There are three main things to know when developing and debugging SCPUI.&lt;br /&gt;
&lt;br /&gt;
#You can view the librocket debugger by pressing &#039;&#039;&#039;&#039;&#039;ctrl-shift-d&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
#You can live-reload RML and RCSS files by pressing &#039;&#039;&#039;&#039;&#039;ctrl-shift-r&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**It&#039;s worth noting that Librocket will drop the existing elements and lose them in memory. This will cause a warning on game-exit.&lt;br /&gt;
#Librocket API warnings and errors are not currently forwarded to FSO&#039;s error handling. Because of this, simple bugs in your Lua code that uses the API can cause FSO to crash.&lt;br /&gt;
#You can force regenerating all loadout icons by pressing F12 during FSO&#039;s splash screen.&lt;br /&gt;
#You can force deleting the current mission&#039;s loadout by pressing F12 during mission loading.&lt;br /&gt;
&lt;br /&gt;
===Tips===&lt;br /&gt;
*In general, the ui system will handle passing control back and forth between the SCPUI context and FSO. In rare cases you may need to handle this manually. The FSO API methods ui.enableInput() and ui.disableInput() are provided to handle this case.&lt;br /&gt;
&lt;br /&gt;
*For 3D weapon selection, SCPUI can only use [[Weapons.tbl#.24Tech_Model:|Tech models]] and you need to make sure you have [[Weapons.tbl#.2BCloseup_Pos:|Closeup_Pos]] and [[Weapons.tbl#.2BCloseup_Zoom:|Closeup_Zoom]] set. If you don&#039;t have a tech model, just set the regular model file as the tech model in your table.&lt;br /&gt;
&lt;br /&gt;
===Tutorials===&lt;br /&gt;
*TODO&lt;br /&gt;
[[Category:SCPUI]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Scpui&amp;diff=67150</id>
		<title>Scpui</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Scpui&amp;diff=67150"/>
		<updated>2026-03-17T14:36:01Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: document custom data parsers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:SCPUI-trim.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
SCPUI is a term that refers to both the LUA Script implementation and the user interface LUA API in the FreespaceOpen engine available from versions 23.2 onwards. It is intended to be used with the [[librocket|librocket libraries]] to replace the base Freespace Open interface in an easily customizable way through LUA scripts.&lt;br /&gt;
&lt;br /&gt;
The original implementation of SCPUI was started by m!m and finished by MjnMixael. This specific implementation attempts to replicate the original Freespace UI experience while offering enhancements such as in-game options not normally available.&lt;br /&gt;
&lt;br /&gt;
[[librocket|For documentation on the Librocket API, go here.]]&lt;br /&gt;
&lt;br /&gt;
The GitHub source files for SCPUI are available [https://github.com/MjnMixael/SCPUI here.] However, it is highly recommended that you have your game or mod rely on the core SCPUI mod on Knossos.NET [https://fsnebula.org/mod/SCPUI here.]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
SCPUI works by completely overriding a given game state&#039;s internal code. Everything that interface should be expected to do must be handled in the Lua scripts. Methods to get and set appropriate game data are supplied by FSO&#039;s UI API. The core file that handles this is &amp;lt;code&amp;gt;scpui_system_core.lua&amp;lt;/code&amp;gt;. This file is SCPUI&#039;s state management controller. If it detects a valid SCPUI interface for a given game state, it will load a librocket file and begin execution of the appropriate scripts.&lt;br /&gt;
&lt;br /&gt;
An SCPUI game state definition has three main files; RML, RCSS, and LUA. More information is available on those specific pages, but for now it&#039;s enough to know that RML is a kind of base HTML, RCSS is a base CSS, and LUA is an FSO compatible LUA file.&lt;br /&gt;
&lt;br /&gt;
The lua file for that state will be run until an FSO game state change is detected. When that happens, the ui_system-sct will clean up the librocket elements and then check if a new set of SCPUI files should be loaded.&lt;br /&gt;
&lt;br /&gt;
The FSO Engine&#039;s Lua API provides a library of methods for interfacing with UI code. Please consult the [[Command-Line_Reference#-output_scripting|scripting.html]] file and the &#039;&#039;&#039;&#039;&#039;UserInterface (ui)&#039;&#039;&#039;&#039;&#039; library for details.&lt;br /&gt;
&lt;br /&gt;
==Scpui.tbl==&lt;br /&gt;
SCPUI&#039;s global settings can be modified with scpui.tbl or xxx-ui.tbm files.&lt;br /&gt;
[[scpui.tbl|Documentation on scpui.tbl is available here.]]&lt;br /&gt;
&lt;br /&gt;
==Visual Customization==&lt;br /&gt;
Unlike FSO&#039;s built-in User Interface, SCPUI liberally re-uses visual assets wherever possible. Because of this, there are only about 225 image files compared to retail&#039;s thousands. This makes changing the look and feel of the UI incredibly easy even for those who are not interested in modifying the underlying Lua code.&lt;br /&gt;
&lt;br /&gt;
===Custom.RCSS===&lt;br /&gt;
Every UI screen loads &amp;lt;code&amp;gt;custom.rcss&amp;lt;/code&amp;gt; as its primary style sheet in addition to the rest of the style sheets for that UI screen. The idea here is that you can list all of your custom styles in that file stored in your own mod&#039;s game data. The file should be &amp;lt;code&amp;gt;data/interface/css/custom.rcss&amp;lt;/code&amp;gt; and you can start by copying the file directly out of SCPUI&#039;s base install. This is also where you&#039;ll set your mod&#039;s primary font file.&lt;br /&gt;
&lt;br /&gt;
===Fonts===&lt;br /&gt;
Fonts are defined in SCPUI using an &amp;lt;code&amp;gt;.rcss&amp;lt;/code&amp;gt; style sheet. In the base install of SCPUI, the primary font is defined in &amp;lt;code&amp;gt;custom.rcss&amp;lt;/code&amp;gt; like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body&lt;br /&gt;
{&lt;br /&gt;
	font-family: BankGothic Md BT;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the font-family is the font&#039;s name as defined in the font metadata and not the filename. In some fonts that may strictly be the font family name only, but not always. For example, &amp;lt;code&amp;gt;Noto Sans Medium&amp;lt;/code&amp;gt; actually needs to be listed as &amp;lt;code&amp;gt;Noto Sans&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You will want to put all family variant font files (for example: BankGothic.ttf, BankGothic-bold.ttf, BankGotic-italic.ttf) in the &amp;lt;code&amp;gt;data/fonts&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
SCPUI will try to match it&#039;s default font size to FSO&#039;s internal font size, which be default is the first font in fonts.tbl. You can customize this setting in [[scpui.tbl|scpui.tbl.]]. You will also want to enable &amp;lt;code&amp;gt;+Auto Scale&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;+Can Scale&amp;lt;/code&amp;gt; on your default FSO font in [[fonts.tbl|fonts.tbl]] so that SCPUI&#039;s font and FSO&#039;s font can scale together as players will expect.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
You can change the main background image for all SCPUI screens by simply replacing &amp;lt;code&amp;gt;bg.png&amp;lt;/code&amp;gt;. Other background features are covered in the [[scpui.tbl|scpui.tbl documentation.]]&lt;br /&gt;
&lt;br /&gt;
===Logo===&lt;br /&gt;
There are several UI screens that use a logo image. It comes in three main variants...&lt;br /&gt;
&lt;br /&gt;
*Standard&lt;br /&gt;
**Replace &amp;lt;code&amp;gt;logo.png&amp;lt;/code&amp;gt; to replace the standard logo throughout all of SCPUI.&lt;br /&gt;
*Wide&lt;br /&gt;
**For FS2, this logo is the version with the &amp;quot;wings&amp;quot;. Replace &amp;lt;code&amp;gt;logo-wide.png&amp;lt;/code&amp;gt; to change this one.&lt;br /&gt;
*Loop&lt;br /&gt;
**In FS2 this is the [[Special_Operations_Command|SOC]] logo used in the Loop Brief UI. For this one replace &amp;lt;code&amp;gt;loop-logo.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Loading Screen Backgrounds===&lt;br /&gt;
Loading screen backgrounds are handled a little differently than in base FreespaceOpen. You must create or modify the &amp;lt;code&amp;gt;load_screen_bgs.rcss&amp;lt;/code&amp;gt; file to add the custom backgrounds you wish to use. In that file create a css class with the mission filename that is to have a custom screen and then define the file like the example below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.bta1_m1_01 {&lt;br /&gt;
	background-decorator: image;&lt;br /&gt;
	background-image: 3_Load_1M1_01.png;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mission &amp;lt;code&amp;gt;bta_m1_01.fs2&amp;lt;/code&amp;gt; will now have the image &amp;lt;code&amp;gt;3_Load_1M1_01.png&amp;lt;/code&amp;gt; used as it&#039;s background.&lt;br /&gt;
&lt;br /&gt;
To modify the loading bar see [[scpui#UI_Topics|UI Topics.]]&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
SCPUI has a built in feature to allow coloring keywords automatically for UI the various briefing screens. It can also, optionally, add tooltips to these keywords. This feature works in Briefing, Command Briefing, Debriefing, Fiction Viewer, Loop Briefing, and Red Alert. Definitions for keywords are tabled in a special table. See [[keywords.tbl|keywords.tbl documentation]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Elements===&lt;br /&gt;
The main UI elements (window boxes, button panels, etc) are all re-used liberally throughout SCPUI. At the time of writing this article, there are 53 of these files in total. You can modify them however you like.&lt;br /&gt;
&lt;br /&gt;
*It is highly recommended you do not change the aspect ratio of these images if you do not want to have to modify RML and RCSS files.&lt;br /&gt;
&lt;br /&gt;
===Buttons===&lt;br /&gt;
There are a number of button styles that SCPUI uses to match FS2&#039;s retail UI. Each button has at least three images: Main, Hover, and On. Generally they are designated like the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arrow-up.png ;;Main&lt;br /&gt;
arrow-up-h.png ;;Hover&lt;br /&gt;
arrow-up-o.png ;;On&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases there are Positive and Negative versions. These are named like the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select.png ;;Main&lt;br /&gt;
select-pos-h.png ;;Positive Hover&lt;br /&gt;
select-pos-o.png ;;Positive On&lt;br /&gt;
select-neg-h.png ;;Negative Hover&lt;br /&gt;
select-neg-o.png ;;Negative On&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Custom Data===&lt;br /&gt;
SCPUI often uses special [[Ships.tbl#$Custom data:|Custom Data]] for various special cases. This provides a way to set values per-object without needing additional tables.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key&lt;br /&gt;
! Value Type&lt;br /&gt;
! Supported Tables&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;HideInTechRoom&amp;lt;/code&amp;gt;&lt;br /&gt;
| Boolean (default: true)&lt;br /&gt;
| ships.tbl, weapons.tbl&lt;br /&gt;
| If true, the object is always hidden from the tech room, including when using Ctrl+S.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LoadoutListPriority&amp;lt;/code&amp;gt;&lt;br /&gt;
| Integer (default: -1)&lt;br /&gt;
| ships.tbl, weapons.tbl&lt;br /&gt;
| Controls sorting in ship and weapon loadout UIs. 1 is highest priority; -1 means no priority.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Briefing Color Tags==&lt;br /&gt;
SCPUI supports two methods for coloring text in briefings. It supports the retail style [[Briefing Text|color tag]] system out of the box. However, SCPUI also has its own HTML-based approach to styling text. It works everywhere that classic color tags do - briefings (including command, loop, and red alert briefings), debriefings, and the fiction viewer - but also the tech room, campaign descriptions, and nearly everywhere that long-form text is supported. For it to work in briefings, the text must be put in &amp;quot;HTML mode&amp;quot; by putting &amp;lt;code&amp;gt;!html&amp;lt;/code&amp;gt; at the start, followed by a space. Everywhere else will work without that tag.&lt;br /&gt;
&lt;br /&gt;
Text in HTML mode may contain HTML markup. Text may be styled using &amp;lt;code&amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;lt;/code&amp;gt; tags with appropriate classes drawn from common.rcss; inline styles are also supported. FSO and HTML both make use of double quotes and slashes; to minimize conflicts, using single quotes and writing slashes as &amp;lt;code&amp;gt;$slash&amp;lt;/code&amp;gt; is recommended. A complete example might look something like this: &amp;lt;code&amp;gt;!html &amp;amp;lt;span class=&#039;white&#039;&amp;amp;gt;Pilot attend!&amp;amp;lt;$slashspan&amp;amp;gt; Today, we&#039;ll be escorting the &amp;amp;lt;span class=&#039;green italic&#039;&amp;amp;gt;GTC Examplar&amp;amp;lt;$slashspan&amp;amp;gt; as she raids &amp;amp;lt;span class=&#039;red&#039;&amp;amp;gt;Shivan&amp;amp;lt;$slashspan&amp;amp;gt; positions throughout &amp;amp;lt;span class=&#039;yellow&#039;&amp;amp;gt;Gamma Draconis&amp;amp;lt;$slashspan&amp;amp;gt;.&amp;lt;/code&amp;gt; The list of color classes available by default is at the bottom of &amp;lt;code&amp;gt;common.rcss&amp;lt;/code&amp;gt;. You can add more to &amp;lt;code&amp;gt;custom.rcss&amp;lt;/code&amp;gt; if needed.&lt;br /&gt;
&lt;br /&gt;
It is, however, rarely necessary to perform simple styling like this manually: SCPUI&#039;s [[Keywords.tbl]] may be used to automate common styling rules.&lt;br /&gt;
&lt;br /&gt;
==Loadout Select Icons==&lt;br /&gt;
SCPUI supports both 2D pre-drawn icons as well as generated 3D icons. However, they are handled a little differently than inside base FSO. SCPUI pre-generates icon images on game start and displays those in place of the actual icons. Icons are generated during SCPUI&#039;s splash screens and cached to the appdata directory to speed up load times on subsequent gameplay instances.&lt;br /&gt;
&lt;br /&gt;
To use 3D icons generated from ship models you must have 3D icons enabled in your [[game_settings.tbl#.24Use_3d_ship_select:|game_settings.tbl]] and for weapons you must have a [[Weapons.tbl#.24Tech_Model:|Tech Model defined]].&lt;br /&gt;
&lt;br /&gt;
To use 2D icons you must have a Select Icon defined for the [[Ships.tbl#.24Ship_Icon:|ship]] or [[Weapons.tbl#.24Icon:|weapon]].&lt;br /&gt;
&lt;br /&gt;
You can set the icon dimensions in [[Scpui.tbl|scpui.tbl]].&lt;br /&gt;
&lt;br /&gt;
==Ribbons==&lt;br /&gt;
SCPUI comes with a brand new award system called Ribbons. This is meant as a way for players to show off how many FreespaceOpen Engine games they have completed. Ribbons are granted via the &amp;lt;code&amp;gt;grant-scpui-ribbon&amp;lt;/code&amp;gt; sexp and once granted cannot be modified. Ribbons are saved to global data that spans all Freespace campaigns, mods, and other games. An example of what ribbons look like is below.&lt;br /&gt;
[[Image:Scpui_ribbons.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
==Achievements==&lt;br /&gt;
SCPUI comes with a full achievements system. Achievements can be automatically granted in some cases or granted by sexp in others. Achievements must be defined in the new [[Achievements.tbl|achievements.tbl]]. Achievement progress is stored automatically on a per-player and per-mod basis. When an achievement is unlocked, a notification is automatically shown to the player.&lt;br /&gt;
&lt;br /&gt;
==Loadout Handling==&lt;br /&gt;
SCPUI includes an entirely custom loadout handler that bypasses some of FSO&#039;s built-in methods. The biggest change is that each loadout is saved to a json file in the player&#039;s appdata directory as &amp;lt;code&amp;gt;scpui_loadouts.cfg&amp;lt;/code&amp;gt;. Note this is saved in the mod&#039;s appdata directory and not the players directory. &lt;br /&gt;
&lt;br /&gt;
The past loadout will be reloaded across game instances and much more reliably across gameplay entirely. Loadout saves differentiate between missions played in Campaign and missions played via Simulator room.&lt;br /&gt;
&lt;br /&gt;
==Optional Extensions==&lt;br /&gt;
SCPUI comes with several optional extension UIs that can be used for specific tasks that the base FreespaceOpen interface is not equipped for. These packages must be enabled in your SCPUI configuration with buttons for access added where desired. Each one has its own set of UI Topics, table parsers, SEXPs, or other features.&lt;br /&gt;
&lt;br /&gt;
===Journal===&lt;br /&gt;
The Journal extension was based heavily of Axem&#039;s original Lua-only version. SCPUI&#039;s iteration is not backwards compatible with it but comes with several enhancements for easier translation and management.&lt;br /&gt;
&lt;br /&gt;
The Journal is configured on a per-campaign basis where each campaign loads from a table matching the format &amp;lt;code&amp;gt;CAMPAIGN_FILE_NAME-journal.tbl&amp;lt;/code&amp;gt;. [[Journal.tbl|Documentation is available here.]]&lt;br /&gt;
&lt;br /&gt;
===Node Map===&lt;br /&gt;
The Node Map extension was originally created for [[bta|Between the Ashes]] and was intended to be used in the tech room. Some configuration with UI Topics may be necessary to modify its appearance to work in other contexts.&lt;br /&gt;
&lt;br /&gt;
The Node Map features a robust progression system so the map can optionally update as the campaign progresses. All configuration is done with the [[Nodemap.tbl|nodemap.tbl]]. The progression system must be defined by the mod&#039;s own Lua scripts through the use of UI Topics.&lt;br /&gt;
&lt;br /&gt;
===Local System Map===&lt;br /&gt;
The Local System Map extension was originally by Axem as a Lua only interface. This version was rebuilt from the ground up for [[bta|Between the Ashes]] and, notably, cannot be used in-mission like Axem&#039;s original version.&lt;br /&gt;
&lt;br /&gt;
The Local System Map configuration is done with the [[System_map.tbl|system_map.tbl]].&lt;br /&gt;
&lt;br /&gt;
==Advanced Customization==&lt;br /&gt;
&#039;&#039;&#039;The following sections assume a working knowledge of Lua and are intended for users who wish to extend SCPUI in more advanced ways.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SCPUI is a highly flexible system that allows for extensive customization through Lua scripting. To fully take advantage of these features, you will need to understand Lua and be comfortable writing, debugging, and integrating Lua scripts within the FreespaceOpen Engine environment.&lt;br /&gt;
&lt;br /&gt;
This section introduces the types of scripts used in SCPUI and how they fit into the overall architecture.&lt;br /&gt;
&lt;br /&gt;
===Script Architecture===&lt;br /&gt;
SCPUI organizes its scripts into distinct categories to improve modularity, maintainability, and extensibility. Each type of script serves a specific purpose:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Submodules&#039;&#039;&#039;: Submodules are core components of SCPUI or one of its extensions, designed to handle specific tasks or functionality. They are automatically loaded during initialization. Submodules help organize code into manageable files that work together to deliver SCPUI&#039;s core features.&lt;br /&gt;
** Naming convention: `scpui_sm_*.lua`&lt;br /&gt;
** Naming convention for extensions: `scpui_SUBMODULE_sm*.lua`&lt;br /&gt;
** Loading: Core submodules are loading during SCPUI&#039;s core initialization. Submodules for extensions are loaded after that extension has been initialized.&lt;br /&gt;
** Examples: A submodule to manage table parsing or handle preload operations.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Extensions&#039;&#039;&#039;: Extensions are optional add-ons that provide entirely new functionality or custom UI elements for SCPUI. They can include their own submodules, controllers, and other assets. Extensions are ideal for games that require unique user interfaces as part of the SCPUI system.&lt;br /&gt;
**Naming convention: `scpui_ext_*.lua`&lt;br /&gt;
**Variables: Each extension must include the following variables: &lt;br /&gt;
***Name: The user-facing name of the extension.&lt;br /&gt;
***Version: The current version of the extension.&lt;br /&gt;
***Submodule: The text used to find the extension&#039;s submodules.&lt;br /&gt;
***Key: The key that will be used to access the Extension within the &amp;lt;code&amp;gt;ScpuiSystem.extensions&amp;lt;/code&amp;gt; table.&lt;br /&gt;
**Initialization: Each extension must include an init function. SCPUI will call this function as soon as the extension is loaded.&lt;br /&gt;
**Post Initialization: Each extension may optionally include a postInit function. SCPUI will call this function after init and all submodules are loaded.&lt;br /&gt;
**Structure: Extensions must return themselves as a table when called.&lt;br /&gt;
**Loading: Extensions are loaded after SCPUI&#039;s core submodules during SCPUI&#039;s initialization.&lt;br /&gt;
**Examples: A custom campaign journal interface or a map UI.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Plugins&#039;&#039;&#039;: Plugins are lightweight, optional scripts that are loaded after SCPUI has initialized. They allow downstream mods or users to add custom behavior or extend functionality without modifying SCPUI&#039;s core files. Plugins are intended for advanced users who want to integrate new features or adjust existing ones.&lt;br /&gt;
**Naming convention: `scpui_plg_*.lua`&lt;br /&gt;
**Loading: Plugins are loaded last during SCPUI&#039;s initialization after everything else is ready.&lt;br /&gt;
**Examples: A plugin to log custom analytics data or define [[#UI_Topics|UI Topics]] binds.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Controllers&#039;&#039;&#039;: Controllers are Lua scripts associated with a specific UI. They manage the logic, data handling, and interactions for that UI state.&lt;br /&gt;
**Naming convention: `ctrlr_*.lua`&lt;br /&gt;
**Loading: Controllers are loaded by a markdown (RML) file; defined in the header section of that file.&lt;br /&gt;
**Examples: A controller for the main menu, mission briefing screen, or in-game options screen.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Libraries&#039;&#039;&#039;: Libraries are reusable utility scripts that provide specific functionality without being tied to a particular UI state or task. They are designed to be called from other scripts as needed.&lt;br /&gt;
**Naming convention: `lib_*.lua`&lt;br /&gt;
**Structure: Libraries should return themselves as a table when called.&lt;br /&gt;
**Loading: Libraries are loaded when needed by using a &amp;lt;code&amp;gt;require()&amp;lt;/code&amp;gt; method call.&lt;br /&gt;
**Examples: A library for data saving/loading, dialog pop-ups, or utility methods.&lt;br /&gt;
&lt;br /&gt;
===Librocket===&lt;br /&gt;
[[librocket|Librocket]] is a pseudo html/css rendering library included with FSO. It is designed as a complete solution for any project&#039;s interface needs.SCPUI uses this library to create and manage each UI context. &lt;br /&gt;
&lt;br /&gt;
LibRocket uses the time-tested open standards XHTML1.0 and CSS2.0 (while borrowing features from HTML5 and CSS3), and extends them with features suited towards real-time applications.&lt;br /&gt;
&lt;br /&gt;
Documentation on how to interface with the librocket API can be found [[librocket|here]].&lt;br /&gt;
&lt;br /&gt;
===Game State Management===&lt;br /&gt;
SCPUI&#039;s game state management is handled by the [[scpui.tbl]] file that simply lists the game state from [[List_of_Game_States|FSO&#039;s game states]] and matches it with an RML file that will be associated. One notable exception is GS_STATE_SCRIPTING** which allows for substates. This feature means that you can effectively create an unlimited amount of custom UIs that all exist within GS_STATE_SCRIPTING**.&lt;br /&gt;
&lt;br /&gt;
*To call a built-in game state use ba.postGameEvent(&amp;quot;gamestate&amp;quot;).&lt;br /&gt;
*To call a scripting substate use ScpuiSystem:beginSubstate(&amp;quot;substate&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;GS_STATE_SCRIPTING_MISSION can be used for custom UIs that should not end the mission when loaded.&lt;br /&gt;
&lt;br /&gt;
===UI Topics===&lt;br /&gt;
SCPUI implements a way to essentially do modular scripting which allows downstream games to modify how SCPUI works without having to carry a complete copy of SCPUI itself. This system is called UI Topics. These work very similar to FSO engine hooks. There are listeners throughout the SCPUI script base that can be attached to in order to modify behavior of various screens, buttons, or other elements. Every screen contains an initialize topic which is the last code run when a game state is started and a screen is created. As a basic example, [[bta|Between the Ashes]] uses this to modify the background image that is used throughout. Here is the Topic code that is used to change the Fiction Viewer background.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local Topics = require(&#039;lib_ui_topics&#039;)&lt;br /&gt;
local Utils = require (&#039;lib_utils&#039;)&lt;br /&gt;
&lt;br /&gt;
Topics.fictionviewer.initialize:bind(1, function(message, context)&lt;br /&gt;
  campaignfilename = ba.getCurrentPlayer():getCampaignFilename()&lt;br /&gt;
  local main = message.document:GetElementById(&amp;quot;main_background&amp;quot;)&lt;br /&gt;
  if useSubspaceBG(main) then return end&lt;br /&gt;
  if Utils.isOneOf(campaignfilename, &amp;quot;bta1_m&amp;quot;, &amp;quot;bta2_m&amp;quot;, &amp;quot;bta-tem_m&amp;quot;) then&lt;br /&gt;
    main:SetClass(&amp;quot;fiction_viewer_bg&amp;quot;, true)&lt;br /&gt;
  end&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Topics sometimes include relevant data in the parameters called &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt; and can change specific values by settings &amp;lt;code&amp;gt;context.value&amp;lt;/code&amp;gt;. The initialize topics, like the example above, always send the entire UI document reference. There are others, like the loading screen loading bar that sends the loading bar filename only and expects a filename return. Here is an example that changes the default loading bar image to something else.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Topics.loadscreen.load_bar:bind(9999, function(message, context)&lt;br /&gt;
  context.value = &amp;quot;fancyloadingbar&amp;quot;&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Topics are run based on the priority value, the argument in the bind() method, in order from lowest number to highest. You can prevent higher priority topics from being run at all by setting &amp;lt;code&amp;gt;context.done = true&amp;lt;/code&amp;gt; inside a Topic.&lt;br /&gt;
&lt;br /&gt;
A full list of available topics can be found in SCPUI&#039;s &amp;lt;code&amp;gt;lib_ui_topics.lua&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
===Data Saver===&lt;br /&gt;
SCPUI comes with a set of Lua functions to handle saving and loading custom data quickly and easily for any kind of custom data you need. The data is saved to a json file using a hashed version of the mod&#039;s [[Game_settings.tbl#.24Mod_title:|mod title]] and the hash can be further randomized by setting a custom seed in [[Scpui.tbl#.24Data_Saver_Multiplier:|scpui.tbl]].&lt;br /&gt;
&lt;br /&gt;
Data can be saved as &#039;persistent&#039; or &#039;not persistent&#039;. Persistent data is saved to &amp;lt;pre&amp;gt;data/players&amp;lt;/pre&amp;gt;, meaning it will be available to your mod even across mod versions. Non persistent data is saved to &amp;lt;pre&amp;gt;data/config&amp;lt;/pre&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
All data is saved on a per-pilot basis.&lt;br /&gt;
&lt;br /&gt;
====Saving Arbitrary Data====&lt;br /&gt;
Make sure the data you intend to save can be converted to JSON. Basically don&#039;t send any userdata. Access datasaver by calling &amp;lt;pre&amp;gt;local DataSaver = require(&amp;quot;lib_datasaver&amp;quot;)&amp;lt;/pre&amp;gt;. You can then save arbitrary data with a call like this &amp;lt;pre&amp;gt;DataSaver:saveDataToFile(&amp;quot;data title&amp;quot;, saveData, true)&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Saving data takes three arguments. First is the name of the data. It should be a string. Second is the data to save. The last argument defines if the data is saved as &#039;persistent&#039; (true) or &#039;not persistent&#039; (false) which defines where the data is saved to.&lt;br /&gt;
&lt;br /&gt;
====Loading Arbitrary Data====&lt;br /&gt;
Loading arbitrary data is just as easy. Set up datasaver with a call like this &amp;lt;pre&amp;gt;local DataSaver = require(&amp;quot;lib_datasaver&amp;quot;)&amp;lt;/pre&amp;gt;. Then simply ask for the data you want to load like this &amp;lt;pre&amp;gt;local saveData = DataSaver :loadDataFromFile(&amp;quot;data title&amp;quot;, true) or {}&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Loading data takes two arguments. First is the name of the data and should match the name you used to save with. It should be a string. The second argument defines if the data is loaded as &#039;persistent&#039; (true) or &#039;not persistent&#039; (false) which defines where the data is loaded from.&lt;br /&gt;
&lt;br /&gt;
===Custom Mod Options===&lt;br /&gt;
[[Image:Screen0594.png|thumb|right|480px|The Custom Options in the [[bta|Between the Ashes]] mod.]]&lt;br /&gt;
SCPUI comes with a built-in feature to allow for custom in-game options specific to a particular mod. These options are defined by [[options.tbl]] and saved to the player folder as &amp;lt;code&amp;gt;scpui_options.cfg&amp;lt;/code&amp;gt;. Scripts can take advantage of this feature to allow players to customize how scripts run, or if they even run at all.&lt;br /&gt;
&lt;br /&gt;
For example, you could take the [https://github.com/FSO-Scripters/fso-scripts/tree/master/radaricon HUD Icons script] and create a global toggle. This allows players to turn HUD Icons on or off entirely. Furthermore you could allow customizing the max opacity of the icons, the distance at which the icons become fully transparent, and the distance at which the icons become fully opaque. These options will all within the in-game Options UI.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;Note that [[game_settings.tbl#$Mod_title:|$Mod_title:]] in [[game_settings.tbl]] is required for this feature to work!&#039;&#039;&#039;&#039;&lt;br /&gt;
*It&#039;s a good idea to make sure your mod title is unique to avoid mod options collisions.&lt;br /&gt;
&lt;br /&gt;
====Options.tbl====&lt;br /&gt;
This table file is used to define the Options buttons within the Options UI.&lt;br /&gt;
*It can be extended with xxx-optn.tbl&lt;br /&gt;
*[[options.tbl|Documentation on the options.tbl is available here.]]&lt;br /&gt;
&lt;br /&gt;
====Save Structure====&lt;br /&gt;
The player&#039;s options are saved to &amp;lt;code&amp;gt;scpui_options.cfg&amp;lt;/code&amp;gt; in data/players. This makes the options available across mod versions. The save structure within the file follows a player-&amp;gt;mod-&amp;gt;option hierarchy. (See example below.) This allows for each player to have their own preferences for each mod they play without interfering with other players&#039; preferences.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;John&amp;quot;: {&lt;br /&gt;
	&amp;quot;Between The Ashes&amp;quot;: {&lt;br /&gt;
		&amp;quot;Alarm_Voice&amp;quot;: &amp;quot;Vasudan&amp;quot;,&lt;br /&gt;
		&amp;quot;Verbose_Debugging&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Font_Multiplier&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Icon_Far&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Icon_Near&amp;quot;: 5,&lt;br /&gt;
		&amp;quot;Brief_Render_Option&amp;quot;: &amp;quot;Texture&amp;quot;,&lt;br /&gt;
		&amp;quot;Icon_Opacity&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;Cockpit_Alarms&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;HUD_Icons&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Cockpit_Rendering&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Easter_Eggs&amp;quot;: &amp;quot;On&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;Mike&amp;quot;: {&lt;br /&gt;
	&amp;quot;Between The Ashes&amp;quot;: {&lt;br /&gt;
		&amp;quot;Cockpit_Rendering&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Easter_Eggs&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;Font_Multiplier&amp;quot;: 5,&lt;br /&gt;
		&amp;quot;Icon_Far&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Icon_Near&amp;quot;: 5,&lt;br /&gt;
		&amp;quot;Brief_Render_Option&amp;quot;: &amp;quot;Texture&amp;quot;,&lt;br /&gt;
		&amp;quot;Icon_Opacity&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;Cockpit_Alarms&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;HUD_Icons&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Verbose_Debugging&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;Alarm_Voice&amp;quot;: &amp;quot;Female&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Accessing Save Data====&lt;br /&gt;
Modifying Options within the in-game UI and saving those values to a file is just a start. In order for these options to do anything, you&#039;ll need to hook them into your scripts. After the Pilot Select screen and a player is chosen, the current Options are available in a global variable called &amp;lt;code&amp;gt;ScpuiOptionValues&amp;lt;/code&amp;gt; with direct access to a specific option by specifying the [[options.tbl#+Key:|option key]]. In order to apply these options create a UI Topic connected to &amp;lt;code&amp;gt;options.apply&amp;lt;/code&amp;gt; and run the appropriate code there.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Conditional Hooks&lt;br /&gt;
$Application: FS2_Open&lt;br /&gt;
$On State End:&lt;br /&gt;
[&lt;br /&gt;
(function()&lt;br /&gt;
	&lt;br /&gt;
	local topics = require(&#039;lib_ui_topics&#039;)&lt;br /&gt;
	local md = require(&amp;quot;debugFunctions&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	--Apply user settings to relevant script data&lt;br /&gt;
	topics.options.apply:bind(9999, function(message, context)&lt;br /&gt;
		&lt;br /&gt;
		--Handle HUD Icon Option&lt;br /&gt;
		if ScpuiSystem.data.ScpuiOptionValues.HUD_Icons == &amp;quot;On&amp;quot; then&lt;br /&gt;
			md.print(&amp;quot;MOD OPTION: Player disabled HUD Icons&amp;quot;)&lt;br /&gt;
			RadarIcon.PlayerEnabled = true&lt;br /&gt;
		else&lt;br /&gt;
			md.print(&amp;quot;MOD OPTION: Player enabled HUD Icons&amp;quot;)&lt;br /&gt;
			RadarIcon.PlayerEnabled = false&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end)&lt;br /&gt;
&lt;br /&gt;
end)()&lt;br /&gt;
]&lt;br /&gt;
#End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pilot Select====&lt;br /&gt;
The pilot select UI has special handling of custom mod options because player preferences cannot be loaded until a player is selected. For this specific use case, SCPUI creates a &amp;lt;code&amp;gt;scpui_options_global.cfg&amp;lt;/code&amp;gt; whenever user preferences are saved. This file contains no mod or player specific information in the save structure. It is just a list of key/value pairs for the most recently used pilot.&lt;br /&gt;
*This setup can be used to perform script actions before a player is selected if necessary.&lt;br /&gt;
*In this case, options are still available as &#039;&#039;&#039;&#039;&#039;ScpuiOptionValues&#039;&#039;&#039;&#039;&#039;&#039; and accessed the same way, but there is no guarantee that the option will exist depending on the last mod the player played.&lt;br /&gt;
&lt;br /&gt;
===Dialog Popups===&lt;br /&gt;
Freespace Open has a number of built-in dialog popups throughout the user interface. SCPUI automatically intercepts those popups and displays them as a librocket styled popup window.&lt;br /&gt;
&lt;br /&gt;
You can create your own custom dialog popups within the UI scripts. To do this you must include &amp;lt;code&amp;gt;local Dialogs = require(&amp;quot;lib_dialogs&amp;quot;)&amp;lt;/code&amp;gt; within the scope of your script. The dialogs function has several parameters for you to define.&lt;br /&gt;
&lt;br /&gt;
====Title====&lt;br /&gt;
*Used to define the title of the dialog window.&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:title(&amp;quot;yourtitle&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Text====&lt;br /&gt;
*Used to define the text or description your popup will contain.&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:text(&amp;quot;yourtext&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
*Defines if the user can type a string as input&lt;br /&gt;
*Useful for allowing the user to name pilots, saves, etc&lt;br /&gt;
*User must press ENTER to allow the code to execute on the provided string&lt;br /&gt;
*True to allow input, false to disallow. Defaults to false if this parameter is not provided.&lt;br /&gt;
**&amp;lt;code&amp;gt;dialog:input(boolean)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Buttons====&lt;br /&gt;
*Defines the user-clickable buttons that will be included in the dialog. It has the following parameters&lt;br /&gt;
*Type can be one of the following:&lt;br /&gt;
**Dialogs.BUTTON_TYPE_POSITIVE&lt;br /&gt;
**Dialogs.BUTTON_TYPE_NEGATIVE&lt;br /&gt;
**Dialogs.BUTTON_TYPE_NEUTRAL&lt;br /&gt;
*Text is the text for the button, such as &amp;quot;Okay&amp;quot;.&lt;br /&gt;
*Value is the data that will be returned when the button is clicked.&lt;br /&gt;
*Keypress is the keyboard shortcut for this button.&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:buttons(type, text, value, keypress)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Escape====&lt;br /&gt;
*Used to define if the user should be able to cancel the dialog popup with the ESC key.&lt;br /&gt;
*A non nil value enables ESC and will be the return value if ESC is pressed&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:escape(value)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Show====&lt;br /&gt;
*This is the final step that displays the popup and defines how to handle the return values&lt;br /&gt;
*return values come back as the parameter &#039;&#039;response&#039;&#039;&lt;br /&gt;
*The ui.enableInput() here specifically enables input on the dialog popup context. The dialog will automatically return input to the SCPUI context when it&#039;s closed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dialog:show(self.document.context)&lt;br /&gt;
   :continueWith(function(response)&lt;br /&gt;
      &amp;quot;Execute code here&amp;quot;&lt;br /&gt;
   end)&lt;br /&gt;
ui.enableInput(self.document.context)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Preload Coroutines===&lt;br /&gt;
SCPUI has a preload system that is used to generate the loadout icon cache. However, it is possible to add any number of arbitrary preload coroutines. To add a preload, call &amp;lt;code&amp;gt;ScpuiSystem:addPreload()&amp;lt;/code&amp;gt; with the following arguments:&lt;br /&gt;
*Debug Message&lt;br /&gt;
**The message to print to the log when this preload coroutine is run.&lt;br /&gt;
*Debug String&lt;br /&gt;
**The text string to draw to the screen when this preload coroutine is run and FSO is run in debug mode.&lt;br /&gt;
*Function&lt;br /&gt;
**The actual function to call. Will be called with pcall and errors with the call will halt game execution.&lt;br /&gt;
*Args&lt;br /&gt;
**Any arguments you want to pass to your function in a table.&lt;br /&gt;
*Priority&lt;br /&gt;
**This should be a 1 or 2 and determines if this coroutine runs during the first splash image or the second. This allows having coroutines build upon each other if necessary.&lt;br /&gt;
&lt;br /&gt;
An example of an icon coroutine call.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ScpuiSystem:addPreload(&lt;br /&gt;
    &amp;quot;Generating icon for &amp;quot; .. v.Name,&lt;br /&gt;
    &amp;quot;Generating &amp;quot; .. v.Name .. &amp;quot; icon&amp;quot;,&lt;br /&gt;
    ScpuiSystem.setIconFrames,&lt;br /&gt;
    {ScpuiSystem, v.Name, true},&lt;br /&gt;
    2&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Individual UIs===&lt;br /&gt;
All game stages are now supported with the following exceptions:&lt;br /&gt;
&lt;br /&gt;
*Cutscenes&lt;br /&gt;
**Because of FSO/Librocket limitations, viewing a cutscene actually sets SCPUI to a [[Scpui.tbl#Substate:|Scripting Substate]] for the duration of the cutscene itself.&lt;br /&gt;
*F3 Lab is not supported as an SCPUI style UI. It will use the Base FSO UI&lt;br /&gt;
*F3 In-game options is not supported as an SCPUI style UI.&lt;br /&gt;
**This is because SCPUI integrates in-game options directly into the main options UI.&lt;br /&gt;
*Multi UIs have not been thoroughly tested and may be buggy&lt;br /&gt;
&lt;br /&gt;
===Development and Debugging===&lt;br /&gt;
There are three main things to know when developing and debugging SCPUI.&lt;br /&gt;
&lt;br /&gt;
#You can view the librocket debugger by pressing &#039;&#039;&#039;&#039;&#039;ctrl-shift-d&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
#You can live-reload RML and RCSS files by pressing &#039;&#039;&#039;&#039;&#039;ctrl-shift-r&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**It&#039;s worth noting that Librocket will drop the existing elements and lose them in memory. This will cause a warning on game-exit.&lt;br /&gt;
#Librocket API warnings and errors are not currently forwarded to FSO&#039;s error handling. Because of this, simple bugs in your Lua code that uses the API can cause FSO to crash.&lt;br /&gt;
#You can force regenerating all loadout icons by pressing F12 during FSO&#039;s splash screen.&lt;br /&gt;
#You can force deleting the current mission&#039;s loadout by pressing F12 during mission loading.&lt;br /&gt;
&lt;br /&gt;
===Tips===&lt;br /&gt;
*In general, the ui system will handle passing control back and forth between the SCPUI context and FSO. In rare cases you may need to handle this manually. The FSO API methods ui.enableInput() and ui.disableInput() are provided to handle this case.&lt;br /&gt;
&lt;br /&gt;
*For 3D weapon selection, SCPUI can only use [[Weapons.tbl#.24Tech_Model:|Tech models]] and you need to make sure you have [[Weapons.tbl#.2BCloseup_Pos:|Closeup_Pos]] and [[Weapons.tbl#.2BCloseup_Zoom:|Closeup_Zoom]] set. If you don&#039;t have a tech model, just set the regular model file as the tech model in your table.&lt;br /&gt;
&lt;br /&gt;
===Tutorials===&lt;br /&gt;
*TODO&lt;br /&gt;
[[Category:SCPUI]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=RCSS_Decorators&amp;diff=67148</id>
		<title>RCSS Decorators</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=RCSS_Decorators&amp;diff=67148"/>
		<updated>2026-03-14T17:59:36Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RCSS}}&lt;br /&gt;
Decorators are an extension to CSS for RCSS. A decorator can be declared and named in a style sheet like a property, and then configured with decorator-specific properties. Custom decorator types can be developed to suit the needs of the user, and in this manner any kind of decoration can be applied to an element.&lt;br /&gt;
&lt;br /&gt;
Important: Note that decorators can only be declared and defined in style sheets, not in style defined inline to an element.&lt;br /&gt;
&lt;br /&gt;
==Declaring decorators==&lt;br /&gt;
The declaration of a decorator is a property of the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;name&amp;gt;-decorator: &amp;lt;type&amp;gt;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;name&amp;gt; is the user-specified name of the decorator to declare, and &amp;lt;type&amp;gt; is the application-specific type of decorator. libRocket ships with the following decorator types:&lt;br /&gt;
*image&lt;br /&gt;
*tiled-box&lt;br /&gt;
*tiled-horizontal&lt;br /&gt;
*tiled-vertical&lt;br /&gt;
The decorator type none is a reserved name that represents no decorator. For example, in the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button&lt;br /&gt;
{&lt;br /&gt;
	icon-decorator: tiled-horizontal;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
the RCSS is attaching a decorator of type tiled-horizontal called ‘icon’ to all button elements. Note that the name ‘icon’ could be anything; it is only used to uniquely identify the decorator for applying properties to it.&lt;br /&gt;
&lt;br /&gt;
Decorator types can be overridden like any other property. So, in the example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
h1&lt;br /&gt;
{&lt;br /&gt;
	icon-decorator: image;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h1:hover&lt;br /&gt;
{&lt;br /&gt;
	icon-decorator: none;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
all h1 tags will have an image decorator attached, except when they are being hovered, when the decorator will not be rendered.&lt;br /&gt;
&lt;br /&gt;
==Decorator properties==&lt;br /&gt;
Decorators have their own property specifications with properties and shorthands, and these can be defined for declared decorators just like any other property. Decorator properties are set in the form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;name&amp;gt;-&amp;lt;property&amp;gt;: &amp;lt;value&amp;gt;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where &amp;lt;name&amp;gt; is the name the decorator was declared under, &amp;lt;property&amp;gt; is the name of the decorator’s property to set, and &amp;lt;value&amp;gt; is the value of the property. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
h1&lt;br /&gt;
{&lt;br /&gt;
	icon-decorator: image;&lt;br /&gt;
	icon-image-src: ../images/header_arrow.png;&lt;br /&gt;
	icon-image-s-begin: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
an image decorator is declared, called ‘icon’. On this decorator, the properties &amp;lt;name&amp;gt;-image-src is set to ‘../images/header_arrow.png’ and &amp;lt;name&amp;gt;-image-s-begin is set to ‘5px’. The other properties in the image specification are left to their defaults.&lt;br /&gt;
&lt;br /&gt;
The decorator properties behave like other properties, so are subject to precedence and the cascade. For example, if the following RCSS was loaded after the previous example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
h1&lt;br /&gt;
{&lt;br /&gt;
	icon-image-s-begin: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h1:first-child&lt;br /&gt;
{&lt;br /&gt;
	icon-decorator: none;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
all h1 tags will have their ‘icon’ decorators defined with an &amp;lt;name&amp;gt;-s-begin property of ‘3px’ instead of ‘5px’, and an h1 that is a first child will have no decorator.&lt;br /&gt;
&lt;br /&gt;
Be careful of name conflicts! For example, in the following sample:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
h1&lt;br /&gt;
{&lt;br /&gt;
	icon-decorator: image;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.secondary&lt;br /&gt;
{&lt;br /&gt;
	icon-decorator: tiled-horizontal;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
an element of type h1 with a class of ‘secondary’ will have a single decorator, ‘icon’, of type tiled-horizontal. If the decorators had different names then they both would be present.&lt;br /&gt;
&lt;br /&gt;
Specifying render order&lt;br /&gt;
If an element has more than one decorator on it, you can use the ‘z-index’ decorator property to control the render order in a similar fashion to elements. For example, in this sample:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button&lt;br /&gt;
{&lt;br /&gt;
	background-decorator: tiled-horizontal;&lt;br /&gt;
	background-z-index: 0;&lt;br /&gt;
&lt;br /&gt;
	icon-decorator: image;&lt;br /&gt;
	icon-z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
the ‘icon’ decorator will appear on top of the ‘background’ decorator. If no z-index is specified on a decorator, it will have the default z-index of 0.&lt;br /&gt;
&lt;br /&gt;
Decorators and pseudo-classes&lt;br /&gt;
Because of the way libRocket compiles pseudo-class rules within style sheets, overriding decorator properties within dynamic pseudo-classes (:active, :hover and :focus, not any of the structural classes) might not always work the way you think it should.&lt;br /&gt;
&lt;br /&gt;
In a nutshell, each decorator will only process properties from their element’s base rules (ie, those not specifying dynamic pseudo-classes in their final simple selector) and one rule specifying a dynamic pseudo-class (or classes), that with the highest specificity. For example, in the following sample:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button&lt;br /&gt;
{&lt;br /&gt;
	background-decorator: tiled-horizontal;&lt;br /&gt;
	background-image-src: ../button.png;&lt;br /&gt;
	background-image-s-end: 128px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
button:hover&lt;br /&gt;
{&lt;br /&gt;
	background-image-t-begin: 32px;&lt;br /&gt;
	background-image-t-end: 64px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
button:active&lt;br /&gt;
{&lt;br /&gt;
	background-image-s-begin: 128px;&lt;br /&gt;
	background-image-s-end: 256px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
if both the :hover and :active pseudo-classes are active on a button element, the &amp;lt;name&amp;gt;-image-s-begin and &amp;lt;name&amp;gt;-image-s-end properties from the :active rule will be set, but the &amp;lt;name&amp;gt;-image-t-begin and &amp;lt;name&amp;gt;-image-t-end properties from the :hover rule will be ignored. The :active rule is used as it has higher precedence that the :hover rule, appearing further down the file. If you wanted both the s and t properties set, you could create another rule:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
button:active:hover&lt;br /&gt;
{&lt;br /&gt;
	background-image-t-begin: 32px;&lt;br /&gt;
	background-image-t-end: 64px;&lt;br /&gt;
	background-image-s-begin: 128px;&lt;br /&gt;
	background-image-s-end: 256px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==image decorators==&lt;br /&gt;
Image decorators in Freespace Open&#039;s instance of librocket support a custom paramter, &amp;lt;code&amp;gt;image-fit&amp;lt;/code&amp;gt;. Valid values are Stretch, Contain, Fill.&lt;br /&gt;
&lt;br /&gt;
==libRocket decorators==&lt;br /&gt;
libRocket comes with several built-in decorators for displaying images and tiled images behind elements.&lt;br /&gt;
&lt;br /&gt;
*image decorator, for displaying a single stretched image.&lt;br /&gt;
*tiled-horizontal decorator, for tiling images horizontally.&lt;br /&gt;
*tiled-vertical decorator, for tiling images vertically.&lt;br /&gt;
*tiled-box decorator, for tiling images across a box.&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Scpui&amp;diff=67145</id>
		<title>Scpui</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Scpui&amp;diff=67145"/>
		<updated>2026-03-08T18:44:58Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: /* Fonts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:SCPUI-trim.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
SCPUI is a term that refers to both the LUA Script implementation and the user interface LUA API in the FreespaceOpen engine available from versions 23.2 onwards. It is intended to be used with the [[librocket|librocket libraries]] to replace the base Freespace Open interface in an easily customizable way through LUA scripts.&lt;br /&gt;
&lt;br /&gt;
The original implementation of SCPUI was started by m!m and finished by MjnMixael. This specific implementation attempts to replicate the original Freespace UI experience while offering enhancements such as in-game options not normally available.&lt;br /&gt;
&lt;br /&gt;
[[librocket|For documentation on the Librocket API, go here.]]&lt;br /&gt;
&lt;br /&gt;
The GitHub source files for SCPUI are available [https://github.com/MjnMixael/SCPUI here.] However, it is highly recommended that you have your game or mod rely on the core SCPUI mod on Knossos.NET [https://fsnebula.org/mod/SCPUI here.]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
SCPUI works by completely overriding a given game state&#039;s internal code. Everything that interface should be expected to do must be handled in the Lua scripts. Methods to get and set appropriate game data are supplied by FSO&#039;s UI API. The core file that handles this is &amp;lt;code&amp;gt;scpui_system_core.lua&amp;lt;/code&amp;gt;. This file is SCPUI&#039;s state management controller. If it detects a valid SCPUI interface for a given game state, it will load a librocket file and begin execution of the appropriate scripts.&lt;br /&gt;
&lt;br /&gt;
An SCPUI game state definition has three main files; RML, RCSS, and LUA. More information is available on those specific pages, but for now it&#039;s enough to know that RML is a kind of base HTML, RCSS is a base CSS, and LUA is an FSO compatible LUA file.&lt;br /&gt;
&lt;br /&gt;
The lua file for that state will be run until an FSO game state change is detected. When that happens, the ui_system-sct will clean up the librocket elements and then check if a new set of SCPUI files should be loaded.&lt;br /&gt;
&lt;br /&gt;
The FSO Engine&#039;s Lua API provides a library of methods for interfacing with UI code. Please consult the [[Command-Line_Reference#-output_scripting|scripting.html]] file and the &#039;&#039;&#039;&#039;&#039;UserInterface (ui)&#039;&#039;&#039;&#039;&#039; library for details.&lt;br /&gt;
&lt;br /&gt;
==Scpui.tbl==&lt;br /&gt;
SCPUI&#039;s global settings can be modified with scpui.tbl or xxx-ui.tbm files.&lt;br /&gt;
[[scpui.tbl|Documentation on scpui.tbl is available here.]]&lt;br /&gt;
&lt;br /&gt;
==Visual Customization==&lt;br /&gt;
Unlike FSO&#039;s built-in User Interface, SCPUI liberally re-uses visual assets wherever possible. Because of this, there are only about 225 image files compared to retail&#039;s thousands. This makes changing the look and feel of the UI incredibly easy even for those who are not interested in modifying the underlying Lua code.&lt;br /&gt;
&lt;br /&gt;
===Custom.RCSS===&lt;br /&gt;
Every UI screen loads &amp;lt;code&amp;gt;custom.rcss&amp;lt;/code&amp;gt; as its primary style sheet in addition to the rest of the style sheets for that UI screen. The idea here is that you can list all of your custom styles in that file stored in your own mod&#039;s game data. The file should be &amp;lt;code&amp;gt;data/interface/css/custom.rcss&amp;lt;/code&amp;gt; and you can start by copying the file directly out of SCPUI&#039;s base install. This is also where you&#039;ll set your mod&#039;s primary font file.&lt;br /&gt;
&lt;br /&gt;
===Fonts===&lt;br /&gt;
Fonts are defined in SCPUI using an &amp;lt;code&amp;gt;.rcss&amp;lt;/code&amp;gt; style sheet. In the base install of SCPUI, the primary font is defined in &amp;lt;code&amp;gt;custom.rcss&amp;lt;/code&amp;gt; like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
body&lt;br /&gt;
{&lt;br /&gt;
	font-family: BankGothic Md BT;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the font-family is the font&#039;s name as defined in the font metadata and not the filename. In some fonts that may strictly be the font family name only, but not always. For example, &amp;lt;code&amp;gt;Noto Sans Medium&amp;lt;/code&amp;gt; actually needs to be listed as &amp;lt;code&amp;gt;Noto Sans&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You will want to put all family variant font files (for example: BankGothic.ttf, BankGothic-bold.ttf, BankGotic-italic.ttf) in the &amp;lt;code&amp;gt;data/fonts&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
SCPUI will try to match it&#039;s default font size to FSO&#039;s internal font size, which be default is the first font in fonts.tbl. You can customize this setting in [[scpui.tbl|scpui.tbl.]]. You will also want to enable &amp;lt;code&amp;gt;+Auto Scale&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;+Can Scale&amp;lt;/code&amp;gt; on your default FSO font in [[fonts.tbl|fonts.tbl]] so that SCPUI&#039;s font and FSO&#039;s font can scale together as players will expect.&lt;br /&gt;
&lt;br /&gt;
===Background===&lt;br /&gt;
You can change the main background image for all SCPUI screens by simply replacing &amp;lt;code&amp;gt;bg.png&amp;lt;/code&amp;gt;. Other background features are covered in the [[scpui.tbl|scpui.tbl documentation.]]&lt;br /&gt;
&lt;br /&gt;
===Logo===&lt;br /&gt;
There are several UI screens that use a logo image. It comes in three main variants...&lt;br /&gt;
&lt;br /&gt;
*Standard&lt;br /&gt;
**Replace &amp;lt;code&amp;gt;logo.png&amp;lt;/code&amp;gt; to replace the standard logo throughout all of SCPUI.&lt;br /&gt;
*Wide&lt;br /&gt;
**For FS2, this logo is the version with the &amp;quot;wings&amp;quot;. Replace &amp;lt;code&amp;gt;logo-wide.png&amp;lt;/code&amp;gt; to change this one.&lt;br /&gt;
*Loop&lt;br /&gt;
**In FS2 this is the [[Special_Operations_Command|SOC]] logo used in the Loop Brief UI. For this one replace &amp;lt;code&amp;gt;loop-logo.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Loading Screen Backgrounds===&lt;br /&gt;
Loading screen backgrounds are handled a little differently than in base FreespaceOpen. You must create or modify the &amp;lt;code&amp;gt;load_screen_bgs.rcss&amp;lt;/code&amp;gt; file to add the custom backgrounds you wish to use. In that file create a css class with the mission filename that is to have a custom screen and then define the file like the example below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.bta1_m1_01 {&lt;br /&gt;
	background-decorator: image;&lt;br /&gt;
	background-image: 3_Load_1M1_01.png;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mission &amp;lt;code&amp;gt;bta_m1_01.fs2&amp;lt;/code&amp;gt; will now have the image &amp;lt;code&amp;gt;3_Load_1M1_01.png&amp;lt;/code&amp;gt; used as it&#039;s background.&lt;br /&gt;
&lt;br /&gt;
To modify the loading bar see [[scpui#UI_Topics|UI Topics.]]&lt;br /&gt;
&lt;br /&gt;
===Keywords===&lt;br /&gt;
SCPUI has a built in feature to allow coloring keywords automatically for UI the various briefing screens. It can also, optionally, add tooltips to these keywords. This feature works in Briefing, Command Briefing, Debriefing, Fiction Viewer, Loop Briefing, and Red Alert. Definitions for keywords are tabled in a special table. See [[keywords.tbl|keywords.tbl documentation]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Elements===&lt;br /&gt;
The main UI elements (window boxes, button panels, etc) are all re-used liberally throughout SCPUI. At the time of writing this article, there are 53 of these files in total. You can modify them however you like.&lt;br /&gt;
&lt;br /&gt;
*It is highly recommended you do not change the aspect ratio of these images if you do not want to have to modify RML and RCSS files.&lt;br /&gt;
&lt;br /&gt;
===Buttons===&lt;br /&gt;
There are a number of button styles that SCPUI uses to match FS2&#039;s retail UI. Each button has at least three images: Main, Hover, and On. Generally they are designated like the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arrow-up.png ;;Main&lt;br /&gt;
arrow-up-h.png ;;Hover&lt;br /&gt;
arrow-up-o.png ;;On&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases there are Positive and Negative versions. These are named like the following example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select.png ;;Main&lt;br /&gt;
select-pos-h.png ;;Positive Hover&lt;br /&gt;
select-pos-o.png ;;Positive On&lt;br /&gt;
select-neg-h.png ;;Negative Hover&lt;br /&gt;
select-neg-o.png ;;Negative On&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Briefing Color Tags==&lt;br /&gt;
SCPUI supports two methods for coloring text in briefings. It supports the retail style [[Briefing Text|color tag]] system out of the box. However, SCPUI also has its own HTML-based approach to styling text. It works everywhere that classic color tags do - briefings (including command, loop, and red alert briefings), debriefings, and the fiction viewer - but also the tech room, campaign descriptions, and nearly everywhere that long-form text is supported. For it to work in briefings, the text must be put in &amp;quot;HTML mode&amp;quot; by putting &amp;lt;code&amp;gt;!html&amp;lt;/code&amp;gt; at the start, followed by a space. Everywhere else will work without that tag.&lt;br /&gt;
&lt;br /&gt;
Text in HTML mode may contain HTML markup. Text may be styled using &amp;lt;code&amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;lt;/code&amp;gt; tags with appropriate classes drawn from common.rcss; inline styles are also supported. FSO and HTML both make use of double quotes and slashes; to minimize conflicts, using single quotes and writing slashes as &amp;lt;code&amp;gt;$slash&amp;lt;/code&amp;gt; is recommended. A complete example might look something like this: &amp;lt;code&amp;gt;!html &amp;amp;lt;span class=&#039;white&#039;&amp;amp;gt;Pilot attend!&amp;amp;lt;$slashspan&amp;amp;gt; Today, we&#039;ll be escorting the &amp;amp;lt;span class=&#039;green italic&#039;&amp;amp;gt;GTC Examplar&amp;amp;lt;$slashspan&amp;amp;gt; as she raids &amp;amp;lt;span class=&#039;red&#039;&amp;amp;gt;Shivan&amp;amp;lt;$slashspan&amp;amp;gt; positions throughout &amp;amp;lt;span class=&#039;yellow&#039;&amp;amp;gt;Gamma Draconis&amp;amp;lt;$slashspan&amp;amp;gt;.&amp;lt;/code&amp;gt; The list of color classes available by default is at the bottom of &amp;lt;code&amp;gt;common.rcss&amp;lt;/code&amp;gt;. You can add more to &amp;lt;code&amp;gt;custom.rcss&amp;lt;/code&amp;gt; if needed.&lt;br /&gt;
&lt;br /&gt;
It is, however, rarely necessary to perform simple styling like this manually: SCPUI&#039;s [[Keywords.tbl]] may be used to automate common styling rules.&lt;br /&gt;
&lt;br /&gt;
==Loadout Select Icons==&lt;br /&gt;
SCPUI supports both 2D pre-drawn icons as well as generated 3D icons. However, they are handled a little differently than inside base FSO. SCPUI pre-generates icon images on game start and displays those in place of the actual icons. Icons are generated during SCPUI&#039;s splash screens and cached to the appdata directory to speed up load times on subsequent gameplay instances.&lt;br /&gt;
&lt;br /&gt;
To use 3D icons generated from ship models you must have 3D icons enabled in your [[game_settings.tbl#.24Use_3d_ship_select:|game_settings.tbl]] and for weapons you must have a [[Weapons.tbl#.24Tech_Model:|Tech Model defined]].&lt;br /&gt;
&lt;br /&gt;
To use 2D icons you must have a Select Icon defined for the [[Ships.tbl#.24Ship_Icon:|ship]] or [[Weapons.tbl#.24Icon:|weapon]].&lt;br /&gt;
&lt;br /&gt;
You can set the icon dimensions in [[Scpui.tbl|scpui.tbl]].&lt;br /&gt;
&lt;br /&gt;
==Ribbons==&lt;br /&gt;
SCPUI comes with a brand new award system called Ribbons. This is meant as a way for players to show off how many FreespaceOpen Engine games they have completed. Ribbons are granted via the &amp;lt;code&amp;gt;grant-scpui-ribbon&amp;lt;/code&amp;gt; sexp and once granted cannot be modified. Ribbons are saved to global data that spans all Freespace campaigns, mods, and other games. An example of what ribbons look like is below.&lt;br /&gt;
[[Image:Scpui_ribbons.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
==Achievements==&lt;br /&gt;
SCPUI comes with a full achievements system. Achievements can be automatically granted in some cases or granted by sexp in others. Achievements must be defined in the new [[Achievements.tbl|achievements.tbl]]. Achievement progress is stored automatically on a per-player and per-mod basis. When an achievement is unlocked, a notification is automatically shown to the player.&lt;br /&gt;
&lt;br /&gt;
==Loadout Handling==&lt;br /&gt;
SCPUI includes an entirely custom loadout handler that bypasses some of FSO&#039;s built-in methods. The biggest change is that each loadout is saved to a json file in the player&#039;s appdata directory as &amp;lt;code&amp;gt;scpui_loadouts.cfg&amp;lt;/code&amp;gt;. Note this is saved in the mod&#039;s appdata directory and not the players directory. &lt;br /&gt;
&lt;br /&gt;
The past loadout will be reloaded across game instances and much more reliably across gameplay entirely. Loadout saves differentiate between missions played in Campaign and missions played via Simulator room.&lt;br /&gt;
&lt;br /&gt;
==Optional Extensions==&lt;br /&gt;
SCPUI comes with several optional extension UIs that can be used for specific tasks that the base FreespaceOpen interface is not equipped for. These packages must be enabled in your SCPUI configuration with buttons for access added where desired. Each one has its own set of UI Topics, table parsers, SEXPs, or other features.&lt;br /&gt;
&lt;br /&gt;
===Journal===&lt;br /&gt;
The Journal extension was based heavily of Axem&#039;s original Lua-only version. SCPUI&#039;s iteration is not backwards compatible with it but comes with several enhancements for easier translation and management.&lt;br /&gt;
&lt;br /&gt;
The Journal is configured on a per-campaign basis where each campaign loads from a table matching the format &amp;lt;code&amp;gt;CAMPAIGN_FILE_NAME-journal.tbl&amp;lt;/code&amp;gt;. [[Journal.tbl|Documentation is available here.]]&lt;br /&gt;
&lt;br /&gt;
===Node Map===&lt;br /&gt;
The Node Map extension was originally created for [[bta|Between the Ashes]] and was intended to be used in the tech room. Some configuration with UI Topics may be necessary to modify its appearance to work in other contexts.&lt;br /&gt;
&lt;br /&gt;
The Node Map features a robust progression system so the map can optionally update as the campaign progresses. All configuration is done with the [[Nodemap.tbl|nodemap.tbl]]. The progression system must be defined by the mod&#039;s own Lua scripts through the use of UI Topics.&lt;br /&gt;
&lt;br /&gt;
===Local System Map===&lt;br /&gt;
The Local System Map extension was originally by Axem as a Lua only interface. This version was rebuilt from the ground up for [[bta|Between the Ashes]] and, notably, cannot be used in-mission like Axem&#039;s original version.&lt;br /&gt;
&lt;br /&gt;
The Local System Map configuration is done with the [[System_map.tbl|system_map.tbl]].&lt;br /&gt;
&lt;br /&gt;
==Advanced Customization==&lt;br /&gt;
&#039;&#039;&#039;The following sections assume a working knowledge of Lua and are intended for users who wish to extend SCPUI in more advanced ways.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SCPUI is a highly flexible system that allows for extensive customization through Lua scripting. To fully take advantage of these features, you will need to understand Lua and be comfortable writing, debugging, and integrating Lua scripts within the FreespaceOpen Engine environment.&lt;br /&gt;
&lt;br /&gt;
This section introduces the types of scripts used in SCPUI and how they fit into the overall architecture.&lt;br /&gt;
&lt;br /&gt;
===Script Architecture===&lt;br /&gt;
SCPUI organizes its scripts into distinct categories to improve modularity, maintainability, and extensibility. Each type of script serves a specific purpose:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Submodules&#039;&#039;&#039;: Submodules are core components of SCPUI or one of its extensions, designed to handle specific tasks or functionality. They are automatically loaded during initialization. Submodules help organize code into manageable files that work together to deliver SCPUI&#039;s core features.&lt;br /&gt;
** Naming convention: `scpui_sm_*.lua`&lt;br /&gt;
** Naming convention for extensions: `scpui_SUBMODULE_sm*.lua`&lt;br /&gt;
** Loading: Core submodules are loading during SCPUI&#039;s core initialization. Submodules for extensions are loaded after that extension has been initialized.&lt;br /&gt;
** Examples: A submodule to manage table parsing or handle preload operations.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Extensions&#039;&#039;&#039;: Extensions are optional add-ons that provide entirely new functionality or custom UI elements for SCPUI. They can include their own submodules, controllers, and other assets. Extensions are ideal for games that require unique user interfaces as part of the SCPUI system.&lt;br /&gt;
**Naming convention: `scpui_ext_*.lua`&lt;br /&gt;
**Variables: Each extension must include the following variables: &lt;br /&gt;
***Name: The user-facing name of the extension.&lt;br /&gt;
***Version: The current version of the extension.&lt;br /&gt;
***Submodule: The text used to find the extension&#039;s submodules.&lt;br /&gt;
***Key: The key that will be used to access the Extension within the &amp;lt;code&amp;gt;ScpuiSystem.extensions&amp;lt;/code&amp;gt; table.&lt;br /&gt;
**Initialization: Each extension must include an init function. SCPUI will call this function as soon as the extension is loaded.&lt;br /&gt;
**Post Initialization: Each extension may optionally include a postInit function. SCPUI will call this function after init and all submodules are loaded.&lt;br /&gt;
**Structure: Extensions must return themselves as a table when called.&lt;br /&gt;
**Loading: Extensions are loaded after SCPUI&#039;s core submodules during SCPUI&#039;s initialization.&lt;br /&gt;
**Examples: A custom campaign journal interface or a map UI.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Plugins&#039;&#039;&#039;: Plugins are lightweight, optional scripts that are loaded after SCPUI has initialized. They allow downstream mods or users to add custom behavior or extend functionality without modifying SCPUI&#039;s core files. Plugins are intended for advanced users who want to integrate new features or adjust existing ones.&lt;br /&gt;
**Naming convention: `scpui_plg_*.lua`&lt;br /&gt;
**Loading: Plugins are loaded last during SCPUI&#039;s initialization after everything else is ready.&lt;br /&gt;
**Examples: A plugin to log custom analytics data or define [[#UI_Topics|UI Topics]] binds.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Controllers&#039;&#039;&#039;: Controllers are Lua scripts associated with a specific UI. They manage the logic, data handling, and interactions for that UI state.&lt;br /&gt;
**Naming convention: `ctrlr_*.lua`&lt;br /&gt;
**Loading: Controllers are loaded by a markdown (RML) file; defined in the header section of that file.&lt;br /&gt;
**Examples: A controller for the main menu, mission briefing screen, or in-game options screen.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Libraries&#039;&#039;&#039;: Libraries are reusable utility scripts that provide specific functionality without being tied to a particular UI state or task. They are designed to be called from other scripts as needed.&lt;br /&gt;
**Naming convention: `lib_*.lua`&lt;br /&gt;
**Structure: Libraries should return themselves as a table when called.&lt;br /&gt;
**Loading: Libraries are loaded when needed by using a &amp;lt;code&amp;gt;require()&amp;lt;/code&amp;gt; method call.&lt;br /&gt;
**Examples: A library for data saving/loading, dialog pop-ups, or utility methods.&lt;br /&gt;
&lt;br /&gt;
===Librocket===&lt;br /&gt;
[[librocket|Librocket]] is a pseudo html/css rendering library included with FSO. It is designed as a complete solution for any project&#039;s interface needs.SCPUI uses this library to create and manage each UI context. &lt;br /&gt;
&lt;br /&gt;
LibRocket uses the time-tested open standards XHTML1.0 and CSS2.0 (while borrowing features from HTML5 and CSS3), and extends them with features suited towards real-time applications.&lt;br /&gt;
&lt;br /&gt;
Documentation on how to interface with the librocket API can be found [[librocket|here]].&lt;br /&gt;
&lt;br /&gt;
===Game State Management===&lt;br /&gt;
SCPUI&#039;s game state management is handled by the [[scpui.tbl]] file that simply lists the game state from [[List_of_Game_States|FSO&#039;s game states]] and matches it with an RML file that will be associated. One notable exception is GS_STATE_SCRIPTING** which allows for substates. This feature means that you can effectively create an unlimited amount of custom UIs that all exist within GS_STATE_SCRIPTING**.&lt;br /&gt;
&lt;br /&gt;
*To call a built-in game state use ba.postGameEvent(&amp;quot;gamestate&amp;quot;).&lt;br /&gt;
*To call a scripting substate use ScpuiSystem:beginSubstate(&amp;quot;substate&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;GS_STATE_SCRIPTING_MISSION can be used for custom UIs that should not end the mission when loaded.&lt;br /&gt;
&lt;br /&gt;
===UI Topics===&lt;br /&gt;
SCPUI implements a way to essentially do modular scripting which allows downstream games to modify how SCPUI works without having to carry a complete copy of SCPUI itself. This system is called UI Topics. These work very similar to FSO engine hooks. There are listeners throughout the SCPUI script base that can be attached to in order to modify behavior of various screens, buttons, or other elements. Every screen contains an initialize topic which is the last code run when a game state is started and a screen is created. As a basic example, [[bta|Between the Ashes]] uses this to modify the background image that is used throughout. Here is the Topic code that is used to change the Fiction Viewer background.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local Topics = require(&#039;lib_ui_topics&#039;)&lt;br /&gt;
local Utils = require (&#039;lib_utils&#039;)&lt;br /&gt;
&lt;br /&gt;
Topics.fictionviewer.initialize:bind(1, function(message, context)&lt;br /&gt;
  campaignfilename = ba.getCurrentPlayer():getCampaignFilename()&lt;br /&gt;
  local main = message.document:GetElementById(&amp;quot;main_background&amp;quot;)&lt;br /&gt;
  if useSubspaceBG(main) then return end&lt;br /&gt;
  if Utils.isOneOf(campaignfilename, &amp;quot;bta1_m&amp;quot;, &amp;quot;bta2_m&amp;quot;, &amp;quot;bta-tem_m&amp;quot;) then&lt;br /&gt;
    main:SetClass(&amp;quot;fiction_viewer_bg&amp;quot;, true)&lt;br /&gt;
  end&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Topics sometimes include relevant data in the parameters called &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt; and can change specific values by settings &amp;lt;code&amp;gt;context.value&amp;lt;/code&amp;gt;. The initialize topics, like the example above, always send the entire UI document reference. There are others, like the loading screen loading bar that sends the loading bar filename only and expects a filename return. Here is an example that changes the default loading bar image to something else.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Topics.loadscreen.load_bar:bind(9999, function(message, context)&lt;br /&gt;
  context.value = &amp;quot;fancyloadingbar&amp;quot;&lt;br /&gt;
end)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Topics are run based on the priority value, the argument in the bind() method, in order from lowest number to highest. You can prevent higher priority topics from being run at all by setting &amp;lt;code&amp;gt;context.done = true&amp;lt;/code&amp;gt; inside a Topic.&lt;br /&gt;
&lt;br /&gt;
A full list of available topics can be found in SCPUI&#039;s &amp;lt;code&amp;gt;lib_ui_topics.lua&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
===Data Saver===&lt;br /&gt;
SCPUI comes with a set of Lua functions to handle saving and loading custom data quickly and easily for any kind of custom data you need. The data is saved to a json file using a hashed version of the mod&#039;s [[Game_settings.tbl#.24Mod_title:|mod title]] and the hash can be further randomized by setting a custom seed in [[Scpui.tbl#.24Data_Saver_Multiplier:|scpui.tbl]].&lt;br /&gt;
&lt;br /&gt;
Data can be saved as &#039;persistent&#039; or &#039;not persistent&#039;. Persistent data is saved to &amp;lt;pre&amp;gt;data/players&amp;lt;/pre&amp;gt;, meaning it will be available to your mod even across mod versions. Non persistent data is saved to &amp;lt;pre&amp;gt;data/config&amp;lt;/pre&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
All data is saved on a per-pilot basis.&lt;br /&gt;
&lt;br /&gt;
====Saving Arbitrary Data====&lt;br /&gt;
Make sure the data you intend to save can be converted to JSON. Basically don&#039;t send any userdata. Access datasaver by calling &amp;lt;pre&amp;gt;local DataSaver = require(&amp;quot;lib_datasaver&amp;quot;)&amp;lt;/pre&amp;gt;. You can then save arbitrary data with a call like this &amp;lt;pre&amp;gt;DataSaver:saveDataToFile(&amp;quot;data title&amp;quot;, saveData, true)&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Saving data takes three arguments. First is the name of the data. It should be a string. Second is the data to save. The last argument defines if the data is saved as &#039;persistent&#039; (true) or &#039;not persistent&#039; (false) which defines where the data is saved to.&lt;br /&gt;
&lt;br /&gt;
====Loading Arbitrary Data====&lt;br /&gt;
Loading arbitrary data is just as easy. Set up datasaver with a call like this &amp;lt;pre&amp;gt;local DataSaver = require(&amp;quot;lib_datasaver&amp;quot;)&amp;lt;/pre&amp;gt;. Then simply ask for the data you want to load like this &amp;lt;pre&amp;gt;local saveData = DataSaver :loadDataFromFile(&amp;quot;data title&amp;quot;, true) or {}&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Loading data takes two arguments. First is the name of the data and should match the name you used to save with. It should be a string. The second argument defines if the data is loaded as &#039;persistent&#039; (true) or &#039;not persistent&#039; (false) which defines where the data is loaded from.&lt;br /&gt;
&lt;br /&gt;
===Custom Mod Options===&lt;br /&gt;
[[Image:Screen0594.png|thumb|right|480px|The Custom Options in the [[bta|Between the Ashes]] mod.]]&lt;br /&gt;
SCPUI comes with a built-in feature to allow for custom in-game options specific to a particular mod. These options are defined by [[options.tbl]] and saved to the player folder as &amp;lt;code&amp;gt;scpui_options.cfg&amp;lt;/code&amp;gt;. Scripts can take advantage of this feature to allow players to customize how scripts run, or if they even run at all.&lt;br /&gt;
&lt;br /&gt;
For example, you could take the [https://github.com/FSO-Scripters/fso-scripts/tree/master/radaricon HUD Icons script] and create a global toggle. This allows players to turn HUD Icons on or off entirely. Furthermore you could allow customizing the max opacity of the icons, the distance at which the icons become fully transparent, and the distance at which the icons become fully opaque. These options will all within the in-game Options UI.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;&#039;Note that [[game_settings.tbl#$Mod_title:|$Mod_title:]] in [[game_settings.tbl]] is required for this feature to work!&#039;&#039;&#039;&#039;&lt;br /&gt;
*It&#039;s a good idea to make sure your mod title is unique to avoid mod options collisions.&lt;br /&gt;
&lt;br /&gt;
====Options.tbl====&lt;br /&gt;
This table file is used to define the Options buttons within the Options UI.&lt;br /&gt;
*It can be extended with xxx-optn.tbl&lt;br /&gt;
*[[options.tbl|Documentation on the options.tbl is available here.]]&lt;br /&gt;
&lt;br /&gt;
====Save Structure====&lt;br /&gt;
The player&#039;s options are saved to &amp;lt;code&amp;gt;scpui_options.cfg&amp;lt;/code&amp;gt; in data/players. This makes the options available across mod versions. The save structure within the file follows a player-&amp;gt;mod-&amp;gt;option hierarchy. (See example below.) This allows for each player to have their own preferences for each mod they play without interfering with other players&#039; preferences.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;John&amp;quot;: {&lt;br /&gt;
	&amp;quot;Between The Ashes&amp;quot;: {&lt;br /&gt;
		&amp;quot;Alarm_Voice&amp;quot;: &amp;quot;Vasudan&amp;quot;,&lt;br /&gt;
		&amp;quot;Verbose_Debugging&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Font_Multiplier&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Icon_Far&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Icon_Near&amp;quot;: 5,&lt;br /&gt;
		&amp;quot;Brief_Render_Option&amp;quot;: &amp;quot;Texture&amp;quot;,&lt;br /&gt;
		&amp;quot;Icon_Opacity&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;Cockpit_Alarms&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;HUD_Icons&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Cockpit_Rendering&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Easter_Eggs&amp;quot;: &amp;quot;On&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;Mike&amp;quot;: {&lt;br /&gt;
	&amp;quot;Between The Ashes&amp;quot;: {&lt;br /&gt;
		&amp;quot;Cockpit_Rendering&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Easter_Eggs&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;Font_Multiplier&amp;quot;: 5,&lt;br /&gt;
		&amp;quot;Icon_Far&amp;quot;: 2,&lt;br /&gt;
		&amp;quot;Icon_Near&amp;quot;: 5,&lt;br /&gt;
		&amp;quot;Brief_Render_Option&amp;quot;: &amp;quot;Texture&amp;quot;,&lt;br /&gt;
		&amp;quot;Icon_Opacity&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;Cockpit_Alarms&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;HUD_Icons&amp;quot;: &amp;quot;Off&amp;quot;,&lt;br /&gt;
		&amp;quot;Verbose_Debugging&amp;quot;: &amp;quot;On&amp;quot;,&lt;br /&gt;
		&amp;quot;Alarm_Voice&amp;quot;: &amp;quot;Female&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Accessing Save Data====&lt;br /&gt;
Modifying Options within the in-game UI and saving those values to a file is just a start. In order for these options to do anything, you&#039;ll need to hook them into your scripts. After the Pilot Select screen and a player is chosen, the current Options are available in a global variable called &amp;lt;code&amp;gt;ScpuiOptionValues&amp;lt;/code&amp;gt; with direct access to a specific option by specifying the [[options.tbl#+Key:|option key]]. In order to apply these options create a UI Topic connected to &amp;lt;code&amp;gt;options.apply&amp;lt;/code&amp;gt; and run the appropriate code there.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Conditional Hooks&lt;br /&gt;
$Application: FS2_Open&lt;br /&gt;
$On State End:&lt;br /&gt;
[&lt;br /&gt;
(function()&lt;br /&gt;
	&lt;br /&gt;
	local topics = require(&#039;lib_ui_topics&#039;)&lt;br /&gt;
	local md = require(&amp;quot;debugFunctions&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	--Apply user settings to relevant script data&lt;br /&gt;
	topics.options.apply:bind(9999, function(message, context)&lt;br /&gt;
		&lt;br /&gt;
		--Handle HUD Icon Option&lt;br /&gt;
		if ScpuiSystem.data.ScpuiOptionValues.HUD_Icons == &amp;quot;On&amp;quot; then&lt;br /&gt;
			md.print(&amp;quot;MOD OPTION: Player disabled HUD Icons&amp;quot;)&lt;br /&gt;
			RadarIcon.PlayerEnabled = true&lt;br /&gt;
		else&lt;br /&gt;
			md.print(&amp;quot;MOD OPTION: Player enabled HUD Icons&amp;quot;)&lt;br /&gt;
			RadarIcon.PlayerEnabled = false&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end)&lt;br /&gt;
&lt;br /&gt;
end)()&lt;br /&gt;
]&lt;br /&gt;
#End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pilot Select====&lt;br /&gt;
The pilot select UI has special handling of custom mod options because player preferences cannot be loaded until a player is selected. For this specific use case, SCPUI creates a &amp;lt;code&amp;gt;scpui_options_global.cfg&amp;lt;/code&amp;gt; whenever user preferences are saved. This file contains no mod or player specific information in the save structure. It is just a list of key/value pairs for the most recently used pilot.&lt;br /&gt;
*This setup can be used to perform script actions before a player is selected if necessary.&lt;br /&gt;
*In this case, options are still available as &#039;&#039;&#039;&#039;&#039;ScpuiOptionValues&#039;&#039;&#039;&#039;&#039;&#039; and accessed the same way, but there is no guarantee that the option will exist depending on the last mod the player played.&lt;br /&gt;
&lt;br /&gt;
===Dialog Popups===&lt;br /&gt;
Freespace Open has a number of built-in dialog popups throughout the user interface. SCPUI automatically intercepts those popups and displays them as a librocket styled popup window.&lt;br /&gt;
&lt;br /&gt;
You can create your own custom dialog popups within the UI scripts. To do this you must include &amp;lt;code&amp;gt;local Dialogs = require(&amp;quot;lib_dialogs&amp;quot;)&amp;lt;/code&amp;gt; within the scope of your script. The dialogs function has several parameters for you to define.&lt;br /&gt;
&lt;br /&gt;
====Title====&lt;br /&gt;
*Used to define the title of the dialog window.&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:title(&amp;quot;yourtitle&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Text====&lt;br /&gt;
*Used to define the text or description your popup will contain.&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:text(&amp;quot;yourtext&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
*Defines if the user can type a string as input&lt;br /&gt;
*Useful for allowing the user to name pilots, saves, etc&lt;br /&gt;
*User must press ENTER to allow the code to execute on the provided string&lt;br /&gt;
*True to allow input, false to disallow. Defaults to false if this parameter is not provided.&lt;br /&gt;
**&amp;lt;code&amp;gt;dialog:input(boolean)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Buttons====&lt;br /&gt;
*Defines the user-clickable buttons that will be included in the dialog. It has the following parameters&lt;br /&gt;
*Type can be one of the following:&lt;br /&gt;
**Dialogs.BUTTON_TYPE_POSITIVE&lt;br /&gt;
**Dialogs.BUTTON_TYPE_NEGATIVE&lt;br /&gt;
**Dialogs.BUTTON_TYPE_NEUTRAL&lt;br /&gt;
*Text is the text for the button, such as &amp;quot;Okay&amp;quot;.&lt;br /&gt;
*Value is the data that will be returned when the button is clicked.&lt;br /&gt;
*Keypress is the keyboard shortcut for this button.&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:buttons(type, text, value, keypress)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Escape====&lt;br /&gt;
*Used to define if the user should be able to cancel the dialog popup with the ESC key.&lt;br /&gt;
*A non nil value enables ESC and will be the return value if ESC is pressed&lt;br /&gt;
*&amp;lt;code&amp;gt;dialog:escape(value)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Show====&lt;br /&gt;
*This is the final step that displays the popup and defines how to handle the return values&lt;br /&gt;
*return values come back as the parameter &#039;&#039;response&#039;&#039;&lt;br /&gt;
*The ui.enableInput() here specifically enables input on the dialog popup context. The dialog will automatically return input to the SCPUI context when it&#039;s closed.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dialog:show(self.document.context)&lt;br /&gt;
   :continueWith(function(response)&lt;br /&gt;
      &amp;quot;Execute code here&amp;quot;&lt;br /&gt;
   end)&lt;br /&gt;
ui.enableInput(self.document.context)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Preload Coroutines===&lt;br /&gt;
SCPUI has a preload system that is used to generate the loadout icon cache. However, it is possible to add any number of arbitrary preload coroutines. To add a preload, call &amp;lt;code&amp;gt;ScpuiSystem:addPreload()&amp;lt;/code&amp;gt; with the following arguments:&lt;br /&gt;
*Debug Message&lt;br /&gt;
**The message to print to the log when this preload coroutine is run.&lt;br /&gt;
*Debug String&lt;br /&gt;
**The text string to draw to the screen when this preload coroutine is run and FSO is run in debug mode.&lt;br /&gt;
*Function&lt;br /&gt;
**The actual function to call. Will be called with pcall and errors with the call will halt game execution.&lt;br /&gt;
*Args&lt;br /&gt;
**Any arguments you want to pass to your function in a table.&lt;br /&gt;
*Priority&lt;br /&gt;
**This should be a 1 or 2 and determines if this coroutine runs during the first splash image or the second. This allows having coroutines build upon each other if necessary.&lt;br /&gt;
&lt;br /&gt;
An example of an icon coroutine call.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ScpuiSystem:addPreload(&lt;br /&gt;
    &amp;quot;Generating icon for &amp;quot; .. v.Name,&lt;br /&gt;
    &amp;quot;Generating &amp;quot; .. v.Name .. &amp;quot; icon&amp;quot;,&lt;br /&gt;
    ScpuiSystem.setIconFrames,&lt;br /&gt;
    {ScpuiSystem, v.Name, true},&lt;br /&gt;
    2&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Individual UIs===&lt;br /&gt;
All game stages are now supported with the following exceptions:&lt;br /&gt;
&lt;br /&gt;
*Cutscenes&lt;br /&gt;
**Because of FSO/Librocket limitations, viewing a cutscene actually sets SCPUI to a [[Scpui.tbl#Substate:|Scripting Substate]] for the duration of the cutscene itself.&lt;br /&gt;
*F3 Lab is not supported as an SCPUI style UI. It will use the Base FSO UI&lt;br /&gt;
*F3 In-game options is not supported as an SCPUI style UI.&lt;br /&gt;
**This is because SCPUI integrates in-game options directly into the main options UI.&lt;br /&gt;
*Multi UIs have not been thoroughly tested and may be buggy&lt;br /&gt;
&lt;br /&gt;
===Development and Debugging===&lt;br /&gt;
There are three main things to know when developing and debugging SCPUI.&lt;br /&gt;
&lt;br /&gt;
#You can view the librocket debugger by pressing &#039;&#039;&#039;&#039;&#039;ctrl-shift-d&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
#You can live-reload RML and RCSS files by pressing &#039;&#039;&#039;&#039;&#039;ctrl-shift-r&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
**It&#039;s worth noting that Librocket will drop the existing elements and lose them in memory. This will cause a warning on game-exit.&lt;br /&gt;
#Librocket API warnings and errors are not currently forwarded to FSO&#039;s error handling. Because of this, simple bugs in your Lua code that uses the API can cause FSO to crash.&lt;br /&gt;
#You can force regenerating all loadout icons by pressing F12 during FSO&#039;s splash screen.&lt;br /&gt;
#You can force deleting the current mission&#039;s loadout by pressing F12 during mission loading.&lt;br /&gt;
&lt;br /&gt;
===Tips===&lt;br /&gt;
*In general, the ui system will handle passing control back and forth between the SCPUI context and FSO. In rare cases you may need to handle this manually. The FSO API methods ui.enableInput() and ui.disableInput() are provided to handle this case.&lt;br /&gt;
&lt;br /&gt;
*For 3D weapon selection, SCPUI can only use [[Weapons.tbl#.24Tech_Model:|Tech models]] and you need to make sure you have [[Weapons.tbl#.2BCloseup_Pos:|Closeup_Pos]] and [[Weapons.tbl#.2BCloseup_Zoom:|Closeup_Zoom]] set. If you don&#039;t have a tech model, just set the regular model file as the tech model in your table.&lt;br /&gt;
&lt;br /&gt;
===Tutorials===&lt;br /&gt;
*TODO&lt;br /&gt;
[[Category:SCPUI]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Template:Tables&amp;diff=67129</id>
		<title>Template:Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Template:Tables&amp;diff=67129"/>
		<updated>2026-02-16T15:29:10Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=0 align=right cellpadding=2 cellspacing=1 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;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;&#039;&#039;List of [[Tables]] and related code files&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;* Notes [[Modular Tables]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;** Notes tables which only use modular tables&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Ai.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ai/&#039;&#039;&#039;aicode.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Ai_profiles.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ai/&#039;&#039;&#039;ai_profiles.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Animation.tbl]]**&lt;br /&gt;
| &#039;&#039;&#039;/model/&#039;&#039;&#039;modelanimation.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Armor.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ship/&#039;&#039;&#039;ship.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Asteroid.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/asteroid/&#039;&#039;&#039;asteroid.cpp &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Autopilot.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/autopilot/&#039;&#039;&#039;autopilot.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Cheats.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/cheats_table/&#039;&#039;&#039;cheats_table.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Colors.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/globalincs/&#039;&#039;&#039;alphacolors.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Curves.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/math/&#039;&#039;&#039;curves.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Controlconfigdefaults.tbl]]&lt;br /&gt;
| &#039;&#039;&#039;/controlconfig/&#039;&#039;&#039;controlsconfigcommon.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Credits.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/menuui/&#039;&#039;&#039;credits.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Cutscenes.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/cutscene/&#039;&#039;&#039;cutscenes.cpp &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Decals.tbl]]**&lt;br /&gt;
| &#039;&#039;&#039;/decals/&#039;&#039;&#039;decals.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Fireball.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/fireball/&#039;&#039;&#039;fireballs.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Fonts.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/graphics/&#039;&#039;&#039;font.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Game_settings.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/mod_table/&#039;&#039;&#039;mod_table.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Glowpoints.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/model/&#039;&#039;&#039;modelread.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Help.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/gamehelp/&#039;&#039;&#039;contexthelp.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Hud_gauges.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/hud/&#039;&#039;&#039;hudparse.cpp &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Icons.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/mission/&#039;&#039;&#039;missionbriefcommon.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Iff_defs.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/iff_defs/&#039;&#039;&#039;iff_defs.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Keywords.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;Not In Codebase&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Lighting_Profiles.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/lighting/&#039;&#039;&#039;lighting_profiles.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Lightning.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/nebula/&#039;&#039;&#039;neblightning.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Mainhall.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/menuui/&#039;&#039;&#039;mainhallmenu.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Medals.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/stats/&#039;&#039;&#039;medals.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Messages.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/mission/&#039;&#039;&#039;missionmessage.cpp		&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Mflash.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/weapon/&#039;&#039;&#039;muzzleflash.cpp &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Music.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/gamesnd/&#039;&#039;&#039;eventmusic.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Nebula.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/nebula/&#039;&#039;&#039;neb.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Objecttypes.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ship/&#039;&#039;&#039;ship.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Options.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;Not In Codebase&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Particle Effects|Particle effects(-part.tbm)]]**&lt;br /&gt;
| &#039;&#039;&#039;/particle/effects&#039;&#039;&#039;...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Post_processing.tbl]]&lt;br /&gt;
| &#039;&#039;&#039;/graphics/&#039;&#039;&#039;gropenglpostprocessing.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Props.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/props/&#039;&#039;&#039;props.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Rank.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/stats/&#039;&#039;&#039;scoring.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Scpui.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;Not In Codebase&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Scripting.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/parse/&#039;&#039;&#039;scripting.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Ships.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ship/&#039;&#039;&#039;ship.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Dynamic SEXPs|Sexps.tbl]]**&lt;br /&gt;
| &#039;&#039;&#039;/parse/sexp/&#039;&#039;&#039;sexp_lookup.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Sounds.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/gamesnd/&#039;&#039;&#039;gamesnd.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Species_defs.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/species_defs/&#039;&#039;&#039;species_defs.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Species.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/menuui/&#039;&#039;&#039;techmenu.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Ssm.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/hud/&#039;&#039;&#039;hudartillery.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Stars.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/starfield/&#039;&#039;&#039;starfield.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Strings.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/localization/&#039;&#039;&#039;localize.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Tips.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/menuui/&#039;&#039;&#039;playermenu.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Traitor.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/stats/&#039;&#039;&#039;scoring.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Tstrings.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/localization/&#039;&#039;&#039;localize.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Virtual_pofs.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/model/&#039;&#039;&#039;modelreplace.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Weapon_expl.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/weapon/&#039;&#039;&#039;weapons.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Weapons.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/weapon/&#039;&#039;&#039;weapons.cpp&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;[[Category:Templates|Tables]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Template:Tables&amp;diff=67128</id>
		<title>Template:Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Template:Tables&amp;diff=67128"/>
		<updated>2026-02-16T15:28:35Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=0 align=right cellpadding=2 cellspacing=1 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;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;&#039;&#039;List of [[Tables]] and related code files&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;* Notes [[Modular Tables]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;color: white; height: 30px; background: #512020; 70%;&amp;quot;|&#039;&#039;&#039;** Notes tables which only use modular tables&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Ai.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ai/&#039;&#039;&#039;aicode.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Ai_profiles.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ai/&#039;&#039;&#039;ai_profiles.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Animation.tbl]]**&lt;br /&gt;
| &#039;&#039;&#039;/model/&#039;&#039;&#039;modelanimation.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Armor.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ship/&#039;&#039;&#039;ship.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Asteroid.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/asteroid/&#039;&#039;&#039;asteroid.cpp &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Autopilot.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/autopilot/&#039;&#039;&#039;autopilot.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Cheats.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/cheats_table/&#039;&#039;&#039;cheats_table.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Colors.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/globalincs/&#039;&#039;&#039;alphacolors.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Curves.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/math/&#039;&#039;&#039;curves.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Controlconfigdefaults.tbl]]&lt;br /&gt;
| &#039;&#039;&#039;/controlconfig/&#039;&#039;&#039;controlsconfigcommon.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Credits.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/menuui/&#039;&#039;&#039;credits.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Cutscenes.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/cutscene/&#039;&#039;&#039;cutscenes.cpp &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Decals.tbl]]**&lt;br /&gt;
| &#039;&#039;&#039;/decals/&#039;&#039;&#039;decals.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Fireball.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/fireball/&#039;&#039;&#039;fireballs.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Fonts.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/graphics/&#039;&#039;&#039;font.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Game_settings.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/mod_table/&#039;&#039;&#039;mod_table.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Glowpoints.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/model/&#039;&#039;&#039;modelread.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Help.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/gamehelp/&#039;&#039;&#039;contexthelp.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Hud_gauges.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/hud/&#039;&#039;&#039;hudparse.cpp &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Icons.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/mission/&#039;&#039;&#039;missionbriefcommon.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Iff_defs.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/iff_defs/&#039;&#039;&#039;iff_defs.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Keywords.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;Not In Codebase&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Lighting_Profiles.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/lighting/&#039;&#039;&#039;lighting_profiles.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Lightning.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/nebula/&#039;&#039;&#039;neblightning.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Mainhall.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/menuui/&#039;&#039;&#039;mainhallmenu.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Medals.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/stats/&#039;&#039;&#039;medals.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Messages.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/mission/&#039;&#039;&#039;missionmessage.cpp		&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Mflash.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/weapon/&#039;&#039;&#039;muzzleflash.cpp &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Music.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/gamesnd/&#039;&#039;&#039;eventmusic.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Nebula.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/nebula/&#039;&#039;&#039;neb.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Objecttypes.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ship/&#039;&#039;&#039;ship.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Options.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;Not In Codebase&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Particle Effects|Particle effects(-part.tbm)]]**&lt;br /&gt;
| &#039;&#039;&#039;/particle/effects&#039;&#039;&#039;...&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Post_processing.tbl]]&lt;br /&gt;
| &#039;&#039;&#039;/graphics/&#039;&#039;&#039;gropenglpostprocessing.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Props.tbl]]&lt;br /&gt;
| &#039;&#039;&#039;/props/&#039;&#039;&#039;props.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Rank.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/stats/&#039;&#039;&#039;scoring.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Scpui.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;Not In Codebase&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Scripting.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/parse/&#039;&#039;&#039;scripting.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Ships.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/ship/&#039;&#039;&#039;ship.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Dynamic SEXPs|Sexps.tbl]]**&lt;br /&gt;
| &#039;&#039;&#039;/parse/sexp/&#039;&#039;&#039;sexp_lookup.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Sounds.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/gamesnd/&#039;&#039;&#039;gamesnd.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Species_defs.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/species_defs/&#039;&#039;&#039;species_defs.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Species.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/menuui/&#039;&#039;&#039;techmenu.cpp	&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Ssm.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/hud/&#039;&#039;&#039;hudartillery.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Stars.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/starfield/&#039;&#039;&#039;starfield.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Strings.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/localization/&#039;&#039;&#039;localize.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Tips.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/menuui/&#039;&#039;&#039;playermenu.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Traitor.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/stats/&#039;&#039;&#039;scoring.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Tstrings.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/localization/&#039;&#039;&#039;localize.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Virtual_pofs.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/model/&#039;&#039;&#039;modelreplace.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Weapon_expl.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/weapon/&#039;&#039;&#039;weapons.cpp&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| [[Weapons.tbl]]*&lt;br /&gt;
| &#039;&#039;&#039;/weapon/&#039;&#039;&#039;weapons.cpp&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;[[Category:Templates|Tables]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Props.tbl&amp;diff=67127</id>
		<title>Props.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Props.tbl&amp;diff=67127"/>
		<updated>2026-02-16T15:27:18Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TableVersion|20260217}}&lt;br /&gt;
{{Tables}}&lt;br /&gt;
The &#039;&#039;&#039;props.tbl&#039;&#039;&#039; is used to define all of the props in the game. Props are distinct from ships in that they are entirely non-interactable except for collisions. They cannot move and they cannot be destroyed. Props are created in FRED with SHIFT-CTRL-CLICK.&lt;br /&gt;
&lt;br /&gt;
Props are available in FSO builds starting with nightly build 20260217.&lt;br /&gt;
&lt;br /&gt;
This table is one of the [[Modular Tables]] and can be extended with xxx-prp.tbm&lt;br /&gt;
&lt;br /&gt;
==General Format==&lt;br /&gt;
*&#039;&#039;&#039;#Prop Categories&#039;&#039;&#039;&lt;br /&gt;
*Currently only used to colorize and sort the props into the list in FRED.&lt;br /&gt;
*&#039;&#039;&#039;#End&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;#Props&#039;&#039;&#039;&lt;br /&gt;
*The props&lt;br /&gt;
*&#039;&#039;&#039;#End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#Prop Catregories==&lt;br /&gt;
*Used to define the color of the prop in the FRED list and to list props in similar categories together.&lt;br /&gt;
&lt;br /&gt;
===$Name:===&lt;br /&gt;
*Defines the name of the category&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===+Color:===&lt;br /&gt;
*Defines the color of the prop text in the FRED list in RGB values.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;integer, integer, integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==#Props==&lt;br /&gt;
*The actual definitions for each prop.&lt;br /&gt;
*Unlike ships and weapons, there is no limit to prop definitions.&lt;br /&gt;
&lt;br /&gt;
===$Name:===&lt;br /&gt;
*Defines the name of the prop. Must be unique.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===+nocreate===&lt;br /&gt;
{{Table3610|&lt;br /&gt;
*In [[Modular Tables]] name can be followed by line &#039;&#039;&#039;+nocreate&#039;&#039;&#039; that prevent game from creating an incomplete entry by leaving the entry unread unless it already exists (either in ship.tbl or in earlier parsed *-shp.tbm files) by the time the *-shp.tbm is read.}}&lt;br /&gt;
&lt;br /&gt;
===+remove===&lt;br /&gt;
{{Table210|&lt;br /&gt;
*In [[Modular Tables]] a name can be followed by the line &#039;&#039;&#039;+remove&#039;&#039;&#039; to completely remove a previously parsed entry.}}&lt;br /&gt;
&lt;br /&gt;
===$POF file:===&lt;br /&gt;
*The POF file for the prop&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Closeup_pos:===&lt;br /&gt;
*How the model will show on the Loadout Screen. The position of the camera relative to the model center. Only valid if a tech model is defined&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Vector&#039;&#039;&#039;&#039;&#039;, three &#039;&#039;&#039;floats&#039;&#039;&#039;, x, y and z values respectively&lt;br /&gt;
&lt;br /&gt;
===$Closeup_zoom:===&lt;br /&gt;
*How the model will show on the Loadout Screen. How far the camera&#039;s zoomed in, defines camera&#039;s FOV.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;, radians&lt;br /&gt;
&lt;br /&gt;
===$Detail Distance:===&lt;br /&gt;
*Defines the distance where the change between different Levels-Of-Details (LODs) occurs&lt;br /&gt;
*Take notice that these are base values. Model detail in Detail options, (within game press F2), applies a multiplier to these values. These multipliers default to (from left to right): 1/8, 1/4, 1, 4, and 8, and may be overridden by the [[Ai_profiles.tbl#$Detail Distance Multiplier:|$Detail Distance Multiplier]]&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;(Detail Distances)&#039;&#039;&#039;&#039;&#039; , list of &#039;&#039;&#039;integers&#039;&#039;&#039; (same amount as LODs), distances from the model in meters&lt;br /&gt;
**Example: &#039;&#039;(0, 80, 300, 900)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Category:===&lt;br /&gt;
*The category (listed above) that this prop belongs to&lt;br /&gt;
*Will be set to &amp;quot;Unknown Category&amp;quot; if not valid&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Flags:===&lt;br /&gt;
*See [[Props.tbl#Props.tbl_flags|below]]&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;( &amp;quot;String&amp;quot; &amp;quot;String&amp;quot; )&#039;&#039;&#039;&#039;&#039;, names of the flags assigned to the prop&lt;br /&gt;
**Example: ( &amp;quot;no-collide&amp;quot;, &amp;quot;no fred&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
===$Custom data:===&lt;br /&gt;
*Defines a set of custom data that for this prop class, which can then be accessed through Lua scripts. There can be any amount of +Val: entries. It requires a $end_custom_data entry at the end.&lt;br /&gt;
Check the scripting documentation of Prop Class to find the CustomData Lua Table.&lt;br /&gt;
====+Val:====&lt;br /&gt;
*Specifies a custom data value and its name, in the format&lt;br /&gt;
*&amp;lt;code&amp;gt;+Val: Name Value&amp;lt;/code&amp;gt;&lt;br /&gt;
*These values will always be strings of text. If you use them in Lua as other types of value, you might need to convert them in the script. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====$end_custom_data====&lt;br /&gt;
*Mandatory entry to indicate that the Custom Data list has ended.&lt;br /&gt;
&lt;br /&gt;
===$Custom strings:===&lt;br /&gt;
*Defines a set of custom strings that for this prop class, which can then be accessed through Lua scripts. There can be any amount of entries. It requires a $end_custom_strings entry at the end.&lt;br /&gt;
Check the scripting documentation of Prop Class to find the CustomStrings Lua Table.&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*Specifies a custom string name&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Value:====&lt;br /&gt;
*Specifies a &amp;quot;value&amp;quot; or additional data point paired with the string. A common use case is an XSTR ID.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+String:====&lt;br /&gt;
*The actual string which is a multitext string&lt;br /&gt;
*Must end with $end_multi_text&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====$end_multi_text====&lt;br /&gt;
&lt;br /&gt;
===$end_custom_strings===&lt;br /&gt;
*Mandatory entry to indicate that the Custom Strings list has ended.&lt;br /&gt;
&lt;br /&gt;
===#End===&lt;br /&gt;
*Mandatory entry to indicate the props definitions have ended.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Props.tbl flags==&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;no_collide&amp;quot;===&lt;br /&gt;
*Defines ship as non-collideable, ie. everything will go through it&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;no_fred&amp;quot;===&lt;br /&gt;
*Ship will not appear in any of the FRED dropdown lists for ship classes.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;no lighting&amp;quot;===&lt;br /&gt;
Ship will not receive lighting calculations&lt;br /&gt;
&lt;br /&gt;
==Sample==&lt;br /&gt;
*Single Prop entry table&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#PROP CATEGORIES&lt;br /&gt;
&lt;br /&gt;
$Name: Rocks&lt;br /&gt;
+Color: (165, 42, 42)&lt;br /&gt;
&lt;br /&gt;
$Name: Planets&lt;br /&gt;
+Color: (0, 255, 0)&lt;br /&gt;
&lt;br /&gt;
#PROPS&lt;br /&gt;
&lt;br /&gt;
$Name: Planet 1&lt;br /&gt;
$POF file: ast01.pof&lt;br /&gt;
$Detail distance: (400, 1000, 2000, 4000)&lt;br /&gt;
$Category: Planets&lt;br /&gt;
&lt;br /&gt;
$Name: Rock&lt;br /&gt;
$POF file: asteroid01-01.pof&lt;br /&gt;
$Detail distance: (400, 1000, 2000, 4000)&lt;br /&gt;
$Category: Rocks&lt;br /&gt;
&lt;br /&gt;
$Name: Planet 2&lt;br /&gt;
$POF file: ast02.pof&lt;br /&gt;
$Detail distance: (400, 1000, 2000, 4000)&lt;br /&gt;
$Category: Planets&lt;br /&gt;
&lt;br /&gt;
$Name: Rock 2&lt;br /&gt;
$POF file: asteroid02-01.pof&lt;br /&gt;
$Detail distance: (400, 1000, 2000, 4000)&lt;br /&gt;
$Category: Rocks&lt;br /&gt;
&lt;br /&gt;
#END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Props.tbl&amp;diff=67126</id>
		<title>Props.tbl</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Props.tbl&amp;diff=67126"/>
		<updated>2026-02-16T15:25:36Z</updated>

		<summary type="html">&lt;p&gt;MjnMixael: Created page with &amp;quot;{{TableVersion|20260217}} {{Tables}} The &amp;#039;&amp;#039;&amp;#039;props.tbl&amp;#039;&amp;#039;&amp;#039; is used to define all of the props in the game. Props are distinct from ships in that they are entirely non-interactab...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TableVersion|20260217}}&lt;br /&gt;
{{Tables}}&lt;br /&gt;
The &#039;&#039;&#039;props.tbl&#039;&#039;&#039; is used to define all of the props in the game. Props are distinct from ships in that they are entirely non-interactable except for collisions. They cannot move and they cannot be destroyed.&lt;br /&gt;
&lt;br /&gt;
Props are available in FSO builds starting with nightly build 20260217.&lt;br /&gt;
&lt;br /&gt;
This table is one of the [[Modular Tables]] and can be extended with xxx-prp.tbm&lt;br /&gt;
&lt;br /&gt;
==General Format==&lt;br /&gt;
*&#039;&#039;&#039;#Prop Categories&#039;&#039;&#039;&lt;br /&gt;
*Currently only used to colorize and sort the props into the list in FRED.&lt;br /&gt;
*&#039;&#039;&#039;#End&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;#Props&#039;&#039;&#039;&lt;br /&gt;
*The props&lt;br /&gt;
*&#039;&#039;&#039;#End&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==#Prop Catregories==&lt;br /&gt;
*Used to define the color of the prop in the FRED list and to list props in similar categories together.&lt;br /&gt;
&lt;br /&gt;
===$Name:===&lt;br /&gt;
*Defines the name of the category&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===+Color:===&lt;br /&gt;
*Defines the color of the prop text in the FRED list in RGB values.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;integer, integer, integer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==#Props==&lt;br /&gt;
*The actual definitions for each prop.&lt;br /&gt;
*Unlike ships and weapons, there is no limit to prop definitions.&lt;br /&gt;
&lt;br /&gt;
===$Name:===&lt;br /&gt;
*Defines the name of the prop. Must be unique.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===+nocreate===&lt;br /&gt;
{{Table3610|&lt;br /&gt;
*In [[Modular Tables]] name can be followed by line &#039;&#039;&#039;+nocreate&#039;&#039;&#039; that prevent game from creating an incomplete entry by leaving the entry unread unless it already exists (either in ship.tbl or in earlier parsed *-shp.tbm files) by the time the *-shp.tbm is read.}}&lt;br /&gt;
&lt;br /&gt;
===+remove===&lt;br /&gt;
{{Table210|&lt;br /&gt;
*In [[Modular Tables]] a name can be followed by the line &#039;&#039;&#039;+remove&#039;&#039;&#039; to completely remove a previously parsed entry.}}&lt;br /&gt;
&lt;br /&gt;
===$POF file:===&lt;br /&gt;
*The POF file for the prop&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Closeup_pos:===&lt;br /&gt;
*How the model will show on the Loadout Screen. The position of the camera relative to the model center. Only valid if a tech model is defined&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Vector&#039;&#039;&#039;&#039;&#039;, three &#039;&#039;&#039;floats&#039;&#039;&#039;, x, y and z values respectively&lt;br /&gt;
&lt;br /&gt;
===$Closeup_zoom:===&lt;br /&gt;
*How the model will show on the Loadout Screen. How far the camera&#039;s zoomed in, defines camera&#039;s FOV.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;Float&#039;&#039;&#039;&#039;&#039;, radians&lt;br /&gt;
&lt;br /&gt;
===$Detail Distance:===&lt;br /&gt;
*Defines the distance where the change between different Levels-Of-Details (LODs) occurs&lt;br /&gt;
*Take notice that these are base values. Model detail in Detail options, (within game press F2), applies a multiplier to these values. These multipliers default to (from left to right): 1/8, 1/4, 1, 4, and 8, and may be overridden by the [[Ai_profiles.tbl#$Detail Distance Multiplier:|$Detail Distance Multiplier]]&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;(Detail Distances)&#039;&#039;&#039;&#039;&#039; , list of &#039;&#039;&#039;integers&#039;&#039;&#039; (same amount as LODs), distances from the model in meters&lt;br /&gt;
**Example: &#039;&#039;(0, 80, 300, 900)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Category:===&lt;br /&gt;
*The category (listed above) that this prop belongs to&lt;br /&gt;
*Will be set to &amp;quot;Unknown Category&amp;quot; if not valid&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===$Flags:===&lt;br /&gt;
*See [[Props.tbl#Props.tbl_flags|below]]&lt;br /&gt;
*Syntax: &#039;&#039;&#039;&#039;&#039;( &amp;quot;String&amp;quot; &amp;quot;String&amp;quot; )&#039;&#039;&#039;&#039;&#039;, names of the flags assigned to the prop&lt;br /&gt;
**Example: ( &amp;quot;no-collide&amp;quot;, &amp;quot;no fred&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
===$Custom data:===&lt;br /&gt;
*Defines a set of custom data that for this prop class, which can then be accessed through Lua scripts. There can be any amount of +Val: entries. It requires a $end_custom_data entry at the end.&lt;br /&gt;
Check the scripting documentation of Prop Class to find the CustomData Lua Table.&lt;br /&gt;
====+Val:====&lt;br /&gt;
*Specifies a custom data value and its name, in the format&lt;br /&gt;
*&amp;lt;code&amp;gt;+Val: Name Value&amp;lt;/code&amp;gt;&lt;br /&gt;
*These values will always be strings of text. If you use them in Lua as other types of value, you might need to convert them in the script. &lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====$end_custom_data====&lt;br /&gt;
*Mandatory entry to indicate that the Custom Data list has ended.&lt;br /&gt;
&lt;br /&gt;
===$Custom strings:===&lt;br /&gt;
*Defines a set of custom strings that for this prop class, which can then be accessed through Lua scripts. There can be any amount of entries. It requires a $end_custom_strings entry at the end.&lt;br /&gt;
Check the scripting documentation of Prop Class to find the CustomStrings Lua Table.&lt;br /&gt;
&lt;br /&gt;
====$Name:====&lt;br /&gt;
*Specifies a custom string name&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+Value:====&lt;br /&gt;
*Specifies a &amp;quot;value&amp;quot; or additional data point paired with the string. A common use case is an XSTR ID.&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====+String:====&lt;br /&gt;
*The actual string which is a multitext string&lt;br /&gt;
*Must end with $end_multi_text&lt;br /&gt;
*Syntax: &#039;&#039;&#039;string&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====$end_multi_text====&lt;br /&gt;
&lt;br /&gt;
===$end_custom_strings===&lt;br /&gt;
*Mandatory entry to indicate that the Custom Strings list has ended.&lt;br /&gt;
&lt;br /&gt;
===#End===&lt;br /&gt;
*Mandatory entry to indicate the props definitions have ended.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Props.tbl flags==&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;no_collide&amp;quot;===&lt;br /&gt;
*Defines ship as non-collideable, ie. everything will go through it&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;no_fred&amp;quot;===&lt;br /&gt;
*Ship will not appear in any of the FRED dropdown lists for ship classes.&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;no lighting&amp;quot;===&lt;br /&gt;
Ship will not receive lighting calculations&lt;br /&gt;
&lt;br /&gt;
==Sample==&lt;br /&gt;
*Single Prop entry table&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#PROP CATEGORIES&lt;br /&gt;
&lt;br /&gt;
$Name: Rocks&lt;br /&gt;
+Color: (165, 42, 42)&lt;br /&gt;
&lt;br /&gt;
$Name: Planets&lt;br /&gt;
+Color: (0, 255, 0)&lt;br /&gt;
&lt;br /&gt;
#PROPS&lt;br /&gt;
&lt;br /&gt;
$Name: Planet 1&lt;br /&gt;
$POF file: ast01.pof&lt;br /&gt;
$Detail distance: (400, 1000, 2000, 4000)&lt;br /&gt;
$Category: Planets&lt;br /&gt;
&lt;br /&gt;
$Name: Rock&lt;br /&gt;
$POF file: asteroid01-01.pof&lt;br /&gt;
$Detail distance: (400, 1000, 2000, 4000)&lt;br /&gt;
$Category: Rocks&lt;br /&gt;
&lt;br /&gt;
$Name: Planet 2&lt;br /&gt;
$POF file: ast02.pof&lt;br /&gt;
$Detail distance: (400, 1000, 2000, 4000)&lt;br /&gt;
$Category: Planets&lt;br /&gt;
&lt;br /&gt;
$Name: Rock 2&lt;br /&gt;
$POF file: asteroid02-01.pof&lt;br /&gt;
$Detail distance: (400, 1000, 2000, 4000)&lt;br /&gt;
$Category: Rocks&lt;br /&gt;
&lt;br /&gt;
#END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:tables]]&lt;/div&gt;</summary>
		<author><name>MjnMixael</name></author>
	</entry>
</feed>