<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://staging-wiki.unvanquished.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anomalous</id>
	<title>Unvanquished - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://staging-wiki.unvanquished.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anomalous"/>
	<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/wiki/Special:Contributions/Anomalous"/>
	<updated>2026-04-04T19:45:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=MediaWiki:Sidebar&amp;diff=2766</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=MediaWiki:Sidebar&amp;diff=2766"/>
		<updated>2014-01-04T02:47:51Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Add “www.” where appropriate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- TODO:  Add proper language support via variables --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Wiki pages&lt;br /&gt;
** //www.unvanquished.net/wiki|Main page&lt;br /&gt;
** Special:RecentChanges|Recent changes&lt;br /&gt;
** Special:NewFiles|New file gallery&lt;br /&gt;
** Special:AllPages|All pages&lt;br /&gt;
** Special:LonelyPages|Orphaned pages&lt;br /&gt;
** Special:Random|Random page&lt;br /&gt;
&lt;br /&gt;
* In-Browser IRC&lt;br /&gt;
** http://webchat.freenode.net/?channels=unvanquished|#unvanquished&lt;br /&gt;
** http://webchat.freenode.net/?channels=unvanquished-dev|#unvanquished-dev&lt;br /&gt;
&lt;br /&gt;
* navigation&lt;br /&gt;
** //www.unvanquished.net|unvanquished.net&lt;br /&gt;
** //www.unvanquished.net/about|*/about&lt;br /&gt;
** //www.unvanquished.net/gallery|*/gallery&lt;br /&gt;
** //www.unvanquished.net/servers|*/servers&lt;br /&gt;
** //www.unvanquished.net/news|*/news&lt;br /&gt;
** //www.unvanquished.net/forum|*/forum&lt;br /&gt;
&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=MediaWiki:Sidebar&amp;diff=2765</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=MediaWiki:Sidebar&amp;diff=2765"/>
		<updated>2014-01-04T02:46:11Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Link format change (default to current protocol)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- TODO:  Add proper language support via variables --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Wiki pages&lt;br /&gt;
** //unvanquished.net/wiki|Main page&lt;br /&gt;
** Special:RecentChanges|Recent changes&lt;br /&gt;
** Special:NewFiles|New file gallery&lt;br /&gt;
** Special:AllPages|All pages&lt;br /&gt;
** Special:LonelyPages|Orphaned pages&lt;br /&gt;
** Special:Random|Random page&lt;br /&gt;
&lt;br /&gt;
* In-Browser IRC&lt;br /&gt;
** http://webchat.freenode.net/?channels=unvanquished|#unvanquished&lt;br /&gt;
** http://webchat.freenode.net/?channels=unvanquished-dev|#unvanquished-dev&lt;br /&gt;
&lt;br /&gt;
* navigation&lt;br /&gt;
** //unvanquished.net|unvanquished.net&lt;br /&gt;
** //unvanquished.net/about|*/about&lt;br /&gt;
** //unvanquished.net/gallery|*/gallery&lt;br /&gt;
** //unvanquished.net/servers|*/servers&lt;br /&gt;
** //unvanquished.net/news|*/news&lt;br /&gt;
** //unvanquished.net/forum|*/forum&lt;br /&gt;
&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=MediaWiki:Sidebar&amp;diff=2764</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=MediaWiki:Sidebar&amp;diff=2764"/>
		<updated>2014-01-04T02:45:08Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Reverted edits by Anomalous (talk) to last revision by Veyrdite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- TODO:  Add proper language support via variables --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Wiki pages&lt;br /&gt;
** https://unvanquished.net/wiki|Main page&lt;br /&gt;
** Special:RecentChanges|Recent changes&lt;br /&gt;
** Special:NewFiles|New file gallery&lt;br /&gt;
** Special:AllPages|All pages&lt;br /&gt;
** Special:LonelyPages|Orphaned pages&lt;br /&gt;
** Special:Random|Random page&lt;br /&gt;
&lt;br /&gt;
* In-Browser IRC&lt;br /&gt;
** http://webchat.freenode.net/?channels=unvanquished|#unvanquished&lt;br /&gt;
** http://webchat.freenode.net/?channels=unvanquished-dev|#unvanquished-dev&lt;br /&gt;
&lt;br /&gt;
* navigation&lt;br /&gt;
** https://unvanquished.net|unvanquished.net&lt;br /&gt;
** https://unvanquished.net/about|*/about&lt;br /&gt;
** https://unvanquished.net/gallery|*/gallery&lt;br /&gt;
** https://unvanquished.net/servers|*/servers&lt;br /&gt;
** https://unvanquished.net/news|*/news&lt;br /&gt;
** https://unvanquished.net/forum|*/forum&lt;br /&gt;
&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=MediaWiki:Sidebar&amp;diff=2763</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=MediaWiki:Sidebar&amp;diff=2763"/>
		<updated>2014-01-04T02:44:12Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Testing link format change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- TODO:  Add proper language support via variables --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Wiki pages&lt;br /&gt;
** [//www.unvanquished.net/wiki Main page]&lt;br /&gt;
** Special:RecentChanges|Recent changes&lt;br /&gt;
** Special:NewFiles|New file gallery&lt;br /&gt;
** Special:AllPages|All pages&lt;br /&gt;
** Special:LonelyPages|Orphaned pages&lt;br /&gt;
** Special:Random|Random page&lt;br /&gt;
&lt;br /&gt;
* In-Browser IRC&lt;br /&gt;
** http://webchat.freenode.net/?channels=unvanquished|#unvanquished&lt;br /&gt;
** http://webchat.freenode.net/?channels=unvanquished-dev|#unvanquished-dev&lt;br /&gt;
&lt;br /&gt;
* navigation&lt;br /&gt;
** https://www.unvanquished.net|unvanquished.net&lt;br /&gt;
** https://www.unvanquished.net/about|*/about&lt;br /&gt;
** https://www.unvanquished.net/gallery|*/gallery&lt;br /&gt;
** https://www.unvanquished.net/servers|*/servers&lt;br /&gt;
** https://www.unvanquished.net/news|*/news&lt;br /&gt;
** https://www.unvanquished.net/forum|*/forum&lt;br /&gt;
&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Maps&amp;diff=2562</id>
		<title>Maps</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Maps&amp;diff=2562"/>
		<updated>2013-12-12T01:10:55Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Yocto level shot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
=Official Unvanquished Maps=&lt;br /&gt;
These maps are distributed with the default installation&lt;br /&gt;
&lt;br /&gt;
==New Maps==&lt;br /&gt;
Maps that have been made or updated for Unvanquished&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name and Description&lt;br /&gt;
! Levelshot&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| '''Parpax'''&lt;br /&gt;
* Medium sized&lt;br /&gt;
* Many branching paths&lt;br /&gt;
* Crawl spaces and piping&lt;br /&gt;
* Elevators&lt;br /&gt;
by Viech&lt;br /&gt;
&lt;br /&gt;
|[[File:Levelshots-Parpax_compressed.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Platform 23'''&lt;br /&gt;
* Symmetrical&lt;br /&gt;
* Replacement for ATCS&lt;br /&gt;
* Two route design&lt;br /&gt;
|[[File:Levelshots-Plat23-b11.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Snowstation (beta 4)'''&lt;br /&gt;
* Two route design&lt;br /&gt;
* Medium sized&lt;br /&gt;
* Outside area&lt;br /&gt;
|[[File:Levelshots-Snowstation-b4.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Thunder'''&lt;br /&gt;
* Very large&lt;br /&gt;
|[[File:Levelshot-Thunder-b3.png|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Yocto'''&lt;br /&gt;
|[[File:Levelshot-Yocto-b1a.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gentrified Maps==&lt;br /&gt;
Maps that were born in Tremulous.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name and Description&lt;br /&gt;
! Levelshot&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''.:U.T:C.S:.'''&lt;br /&gt;
* Symmetrical&lt;br /&gt;
* Two route design&lt;br /&gt;
* Small&lt;br /&gt;
| [[File:Levelshot-Utcs.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Arachnid 2'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Crawl spaces and piping&lt;br /&gt;
* Medium sized&lt;br /&gt;
| [[File:Levelshots-Arachnid2.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Karith Station 2'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Outside area&lt;br /&gt;
* Crawl spaces&lt;br /&gt;
* Large&lt;br /&gt;
* Elevators&lt;br /&gt;
by Godmil&lt;br /&gt;
|[[File:Levelshots-Karith.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Methane (beta 1)'''&lt;br /&gt;
* Large&lt;br /&gt;
* Vertically complex&lt;br /&gt;
by Ingar&lt;br /&gt;
|[[File:Levelshots-Methane-beta1.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Nano!'''&lt;br /&gt;
* Small&lt;br /&gt;
* Symmetrical&lt;br /&gt;
by Ingar&lt;br /&gt;
|[[File:Levelshots-Nano.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Nexus 6'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Crawl spaces&lt;br /&gt;
* Medium sized&lt;br /&gt;
|[[File:Levelshots-Nexus6.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Niveus : Outpost 652'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Medium sized&lt;br /&gt;
|[[File:Levelshots-Niveus.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Orion I - communication ship (beta 2)'''&lt;br /&gt;
|[[File:Levelshots-Orion.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Spacetracks Release 1'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Many Elevators&lt;br /&gt;
* Crawl spaces&lt;br /&gt;
by Supertanker&lt;br /&gt;
|[[ File:Levelshots-Spacetracks-r1.jpg |400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Station15 Release 1'''&lt;br /&gt;
* Varied rooms and corridors&lt;br /&gt;
* Elevators&lt;br /&gt;
by Supertanker&lt;br /&gt;
|[[File:Levelshots-Station15-r1.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Tremor'''&lt;br /&gt;
* Medium sized&lt;br /&gt;
* Large rooms and corridors&lt;br /&gt;
* Crawl spaces (underground section)&lt;br /&gt;
by Vedacon&lt;br /&gt;
|[[File:Levelshots-Tremor.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=File:Levelshot-Yocto-b1a.jpg&amp;diff=2561</id>
		<title>File:Levelshot-Yocto-b1a.jpg</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=File:Levelshot-Yocto-b1a.jpg&amp;diff=2561"/>
		<updated>2013-12-12T01:10:06Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: From map-yocto-b1a.pk3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From map-yocto-b1a.pk3&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Maps&amp;diff=2559</id>
		<title>Maps</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Maps&amp;diff=2559"/>
		<updated>2013-12-12T01:01:07Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* New Maps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OutOfDate}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Official Unvanquished Maps=&lt;br /&gt;
These maps are distributed with the default installation&lt;br /&gt;
&lt;br /&gt;
==New Maps==&lt;br /&gt;
Maps that have been made or updated for Unvanquished&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name and Description&lt;br /&gt;
! Levelshot&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| '''Parpax'''&lt;br /&gt;
* Medium sized&lt;br /&gt;
* Many branching paths&lt;br /&gt;
* Crawl spaces and piping&lt;br /&gt;
* Elevators&lt;br /&gt;
by Viech&lt;br /&gt;
&lt;br /&gt;
|[[File:Levelshots-Parpax_compressed.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Platform 23'''&lt;br /&gt;
* Symmetrical&lt;br /&gt;
* Replacement for ATCS&lt;br /&gt;
* Two route design&lt;br /&gt;
|[[File:Levelshots-Plat23-b11.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Snowstation (beta 4)'''&lt;br /&gt;
* Two route design&lt;br /&gt;
* Medium sized&lt;br /&gt;
* Outside area&lt;br /&gt;
|[[File:Levelshots-Snowstation-b4.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Thunder'''&lt;br /&gt;
* Very large&lt;br /&gt;
|[[File:Levelshot-Thunder-b3.png|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Yocto'''&lt;br /&gt;
| TODO&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gentrified Maps==&lt;br /&gt;
Maps that were born in Tremulous.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name and Description&lt;br /&gt;
! Levelshot&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''.:U.T:C.S:.'''&lt;br /&gt;
* Symmetrical&lt;br /&gt;
* Two route design&lt;br /&gt;
* Small&lt;br /&gt;
| [[File:Levelshot-Utcs.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Arachnid 2'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Crawl spaces and piping&lt;br /&gt;
* Medium sized&lt;br /&gt;
| [[File:Levelshots-Arachnid2.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Karith Station 2'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Outside area&lt;br /&gt;
* Crawl spaces&lt;br /&gt;
* Large&lt;br /&gt;
* Elevators&lt;br /&gt;
by Godmil&lt;br /&gt;
|[[File:Levelshots-Karith.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Methane (beta 1)'''&lt;br /&gt;
* Large&lt;br /&gt;
* Vertically complex&lt;br /&gt;
by Ingar&lt;br /&gt;
|[[File:Levelshots-Methane-beta1.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Nano!'''&lt;br /&gt;
* Small&lt;br /&gt;
* Symmetrical&lt;br /&gt;
by Ingar&lt;br /&gt;
|[[File:Levelshots-Nano.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Nexus 6'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Crawl spaces&lt;br /&gt;
* Medium sized&lt;br /&gt;
|[[File:Levelshots-Nexus6.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Niveus : Outpost 652'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Medium sized&lt;br /&gt;
|[[File:Levelshots-Niveus.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Orion I - communication ship (beta 2)'''&lt;br /&gt;
|[[File:Levelshots-Orion.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Spacetracks Release 1'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Many Elevators&lt;br /&gt;
* Crawl spaces&lt;br /&gt;
by Supertanker&lt;br /&gt;
|[[ File:Levelshots-Spacetracks-r1.jpg |400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Station15 Release 1'''&lt;br /&gt;
* Varied rooms and corridors&lt;br /&gt;
* Elevators&lt;br /&gt;
by Supertanker&lt;br /&gt;
|[[File:Levelshots-Station15-r1.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Tremor'''&lt;br /&gt;
* Medium sized&lt;br /&gt;
* Large rooms and corridors&lt;br /&gt;
* Crawl spaces (underground section)&lt;br /&gt;
by Vedacon&lt;br /&gt;
|[[File:Levelshots-Tremor.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Maps&amp;diff=2558</id>
		<title>Maps</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Maps&amp;diff=2558"/>
		<updated>2013-12-12T01:00:16Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Thunder levelshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OutOfDate}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Official Unvanquished Maps=&lt;br /&gt;
These maps are distributed with the default installation&lt;br /&gt;
&lt;br /&gt;
==New Maps==&lt;br /&gt;
Maps that have been made or updated for Unvanquished&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name and Description&lt;br /&gt;
! Levelshot&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| '''Parpax'''&lt;br /&gt;
* Medium sized&lt;br /&gt;
* Many branching paths&lt;br /&gt;
* Crawl spaces and piping&lt;br /&gt;
* Elevators&lt;br /&gt;
by Viech&lt;br /&gt;
&lt;br /&gt;
|[[File:Levelshots-Parpax_compressed.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Platform 23'''&lt;br /&gt;
* Symmetrical&lt;br /&gt;
* Replacement for ATCS&lt;br /&gt;
* Two route design&lt;br /&gt;
|[[File:Levelshots-Plat23-b11.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Snowstation (beta 4)'''&lt;br /&gt;
* Two route design&lt;br /&gt;
* Medium sized&lt;br /&gt;
* Outside area&lt;br /&gt;
|[[File:Levelshots-Snowstation-b4.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Thunder'''&lt;br /&gt;
* Very large&lt;br /&gt;
|[[File:Levelshots-Thunder-b3.png|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Yocto'''&lt;br /&gt;
| TODO&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gentrified Maps==&lt;br /&gt;
Maps that were born in Tremulous.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name and Description&lt;br /&gt;
! Levelshot&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''.:U.T:C.S:.'''&lt;br /&gt;
* Symmetrical&lt;br /&gt;
* Two route design&lt;br /&gt;
* Small&lt;br /&gt;
| [[File:Levelshot-Utcs.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Arachnid 2'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Crawl spaces and piping&lt;br /&gt;
* Medium sized&lt;br /&gt;
| [[File:Levelshots-Arachnid2.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Karith Station 2'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Outside area&lt;br /&gt;
* Crawl spaces&lt;br /&gt;
* Large&lt;br /&gt;
* Elevators&lt;br /&gt;
by Godmil&lt;br /&gt;
|[[File:Levelshots-Karith.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Methane (beta 1)'''&lt;br /&gt;
* Large&lt;br /&gt;
* Vertically complex&lt;br /&gt;
by Ingar&lt;br /&gt;
|[[File:Levelshots-Methane-beta1.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Nano!'''&lt;br /&gt;
* Small&lt;br /&gt;
* Symmetrical&lt;br /&gt;
by Ingar&lt;br /&gt;
|[[File:Levelshots-Nano.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Nexus 6'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Crawl spaces&lt;br /&gt;
* Medium sized&lt;br /&gt;
|[[File:Levelshots-Nexus6.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Niveus : Outpost 652'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Medium sized&lt;br /&gt;
|[[File:Levelshots-Niveus.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Orion I - communication ship (beta 2)'''&lt;br /&gt;
|[[File:Levelshots-Orion.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Spacetracks Release 1'''&lt;br /&gt;
* Varied rooms, corridors and layers&lt;br /&gt;
* Many Elevators&lt;br /&gt;
* Crawl spaces&lt;br /&gt;
by Supertanker&lt;br /&gt;
|[[ File:Levelshots-Spacetracks-r1.jpg |400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| '''Station15 Release 1'''&lt;br /&gt;
* Varied rooms and corridors&lt;br /&gt;
* Elevators&lt;br /&gt;
by Supertanker&lt;br /&gt;
|[[File:Levelshots-Station15-r1.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|'''Tremor'''&lt;br /&gt;
* Medium sized&lt;br /&gt;
* Large rooms and corridors&lt;br /&gt;
* Crawl spaces (underground section)&lt;br /&gt;
by Vedacon&lt;br /&gt;
|[[File:Levelshots-Tremor.jpg|400px]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=File:Thunder-b3.png&amp;diff=2557</id>
		<title>File:Thunder-b3.png</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=File:Thunder-b3.png&amp;diff=2557"/>
		<updated>2013-12-12T00:46:49Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: From map-thunder-b3.pk3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From map-thunder-b3.pk3&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Compiling_the_source&amp;diff=2453</id>
		<title>Compiling the source</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Compiling_the_source&amp;diff=2453"/>
		<updated>2013-12-04T00:02:05Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Update Debian &amp;amp; Ubuntu build information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
First, you need to [[Getting_the_source|acquire the source code]].&lt;br /&gt;
&lt;br /&gt;
Regardless of what interface you may use to compile the source, you will need [http://www.cmake.org/cmake/resources/software.html CMake] to generate makefiles. You will also need to install [https://developer.apple.com/xcode/ Xcode] (making sure to choose to install the command-line utilities when prompted by the installer).&lt;br /&gt;
&lt;br /&gt;
Then, you will need to acquire (and in some cases, manually compile) at a minimum the [[#Dependencies|necessary libraries]].&lt;br /&gt;
&lt;br /&gt;
Once you have the source code and the libraries installed, you may actually proceed to compile the source. You have several options:&lt;br /&gt;
* '''Compile the source at the command line'''. This is the easiest if you would just like to compile the game to use yourself and you do not intend to work on the code.&lt;br /&gt;
* '''Compile the source using an IDE'''. This is preferred if you intend on developing the source.&lt;br /&gt;
** Xcode is Apple's flagship IDE and you should have installed to compile the source regardless of which method you use.&lt;br /&gt;
** [http://qt-project.org/downloads QtCreator] is cross-platform and provides real-time feedback of syntax errors, a Vim mode, as well as other features.&lt;br /&gt;
** [http://www.codeblocks.org/ Code::Blcoks] is also cross-platform but lacks some of the features of Xcode and QtCreator.&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
&lt;br /&gt;
You only need to use one of the following methods (HomeBrew or compiling by hand). Please try and avoid mixing methods as this may produce unexpected results.&lt;br /&gt;
&lt;br /&gt;
Unvanquished requires the following libraries:&lt;br /&gt;
* [[#JPEG|JPEG]], version 8 or higher. (Version 6 was known to have problems)&lt;br /&gt;
* [[#Simple_DirectMedia_Layer_.28SDL.29|Simple DirectMedia Layer]] (The binary provided by libsdl.org causes graphical corruptions. Compile from source or use homebrew/macports)&lt;br /&gt;
* [[#The_OpenGL_Extension_Wrangler_Library_.28GLEW.29|The OpenGL Extension Wrangler Library]]&lt;br /&gt;
* CuRL&lt;br /&gt;
* [[#The_GNU_MP_Bignum_Library_.28libgmp.29|GMP]]&lt;br /&gt;
* [[#WebP|WebP]] (v0.2.0 or newer)&lt;br /&gt;
&lt;br /&gt;
The following libraries are optional:&lt;br /&gt;
* Theora&lt;br /&gt;
* Speex&lt;br /&gt;
* [[#Ogg|Ogg]]&lt;br /&gt;
* [[#Vorbis|Vorbis]]&lt;br /&gt;
&lt;br /&gt;
====HomeBrew====&lt;br /&gt;
Install [http://mxcl.github.com/homebrew/ HomeBrew] and then run the following command&lt;br /&gt;
&lt;br /&gt;
 $ brew install nettle libjpeg curl sdl webp xvid gmp glew speex libvorbis theora&lt;br /&gt;
&lt;br /&gt;
All the necessary libraries should now have been installed.&lt;br /&gt;
&lt;br /&gt;
====Compiling by hand====&lt;br /&gt;
The following are shell scripts that download, compile, and install various libraries. This is more time consuming then other methods but might be useful if you need more control over your libraries&lt;br /&gt;
&lt;br /&gt;
=====JPEG=====&lt;br /&gt;
&lt;br /&gt;
 $ curl http://www.ijg.org/files/jpegsrc.v8d.tar.gz &amp;gt; jpegsrc.v8d.tar.gz&lt;br /&gt;
 $ tar xvzf jpegsrc.v8d.tar.gz&lt;br /&gt;
 $ cd jpeg-8d&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====The OpenGL Extension Wrangler Library (GLEW)=====&lt;br /&gt;
&lt;br /&gt;
 $ curl -L https://sourceforge.net/projects/glew/files/glew/1.7.0/glew-1.7.0.tgz/download &amp;gt; glew-1.7.0.tgz&lt;br /&gt;
 $ tar xvzf glew-1.7.0.tgz&lt;br /&gt;
 $ cd glew-1.7.0&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====Simple DirectMedia Layer (SDL)=====&lt;br /&gt;
&lt;br /&gt;
Do not use the binaries provided by libsdl.org, as these are known to cause issues with gamma and color display. Instead, compile your own:&lt;br /&gt;
&lt;br /&gt;
 $ curl http://www.libsdl.org/release/SDL-1.2.15.tar.gz &amp;gt; SDL-1.2.15.tar.gz&lt;br /&gt;
 $ tar xvzf SDL-1.2.15.tar.gz&lt;br /&gt;
 $ cd SDL-1.2.15&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====The GNU MP Bignum Library (libgmp)=====&lt;br /&gt;
&lt;br /&gt;
 $ curl ftp://ftp.gmplib.org/pub/gmp-5.0.5/gmp-5.0.5.tar.bz2 &amp;gt; gmp-5.0.5.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-5.0.5.tar.bz2&lt;br /&gt;
 $ cd gmp-5.0.5&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====Ogg=====&lt;br /&gt;
&lt;br /&gt;
 $ curl http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz &amp;gt; libogg-1.3.0.tar.gz&lt;br /&gt;
 $ tar xvzf libogg-1.3.0.tar.gz&lt;br /&gt;
 $ cd libogg-1.3.0&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====Vorbis=====&lt;br /&gt;
&lt;br /&gt;
 $ curl http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz &amp;gt; libvorbis-1.3.3.tar.gz&lt;br /&gt;
 $ tar xvzf libvorbis-1.3.3.tar.gz&lt;br /&gt;
 $ cd libvorbis-1.3.3&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====WebP=====&lt;br /&gt;
&lt;br /&gt;
You do not need to compile WebP by hand; Google provides binaries for Mac OS X available from their [https://code.google.com/p/webp/downloads/detail?name=libwebp-0.2.0-mac-10.5.tar.gz project page]. You will need version 0.2.0 or newer.&lt;br /&gt;
&lt;br /&gt;
Once downloaded, you must still install the header files and the binary:&lt;br /&gt;
&lt;br /&gt;
 $ curl https://webp.googlecode.com/files/libwebp-0.2.0-mac-10.5.tar.gz &amp;gt; libwebp-0.2.0-mac-10.5.tar.gz&lt;br /&gt;
 $ tar xvzf libwebp-0.2.0-mac-10.5.tar.gz&lt;br /&gt;
 $ cd libwebp-0.2.0-mac-10.5&lt;br /&gt;
 $ sudo cp include/webp /usr/local/include&lt;br /&gt;
 $ sudo cp lib/libwebp.a /usr/local/lib&lt;br /&gt;
&lt;br /&gt;
===Configuring with CMake===&lt;br /&gt;
&lt;br /&gt;
# Run CMake.&lt;br /&gt;
# Enter the location of the source code.&lt;br /&gt;
# Enter the location in which you would like to build the source code. This should be a different directory.&lt;br /&gt;
# Hit &amp;quot;Configure&amp;quot;. You will be prompted as to which generator you would like to use. If you have Xcode installed, choose that. Wait while the configuration process runs. You may have to set the following:&lt;br /&gt;
## If CMake did not find your jpeg headers for some reason, set &amp;lt;code&amp;gt;JPEG_INCLUDE_DIR&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/path/to/Unvanquished/src/libs/jpeg&amp;lt;/code&amp;gt;.&lt;br /&gt;
## Check &amp;lt;code&amp;gt;USE_INTERNAL_CRYPTO&amp;lt;/code&amp;gt; to avoid having to compile nettle and hogweed yourself.&lt;br /&gt;
## Check &amp;lt;code&amp;gt;USE_INTERNAL_SPEEX&amp;lt;/code&amp;gt; to avoid having to compile Speex yourself.&lt;br /&gt;
## Uncheck &amp;lt;code&amp;gt;USE_CIN_THEORA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;USE_CIN_XVID&amp;lt;/code&amp;gt; to avoid having to compile Theora or Xvid. (At present, there are not cutscenes or any such that require it.)&lt;br /&gt;
## '''You will probably not be able to compile with the GLSL optimizer enabled; uncheck &amp;lt;code&amp;gt;USE_GLSL_OPTIMIZER&amp;lt;/code&amp;gt;'''&lt;br /&gt;
## If you have selected to generate Xcode project files, make the &amp;lt;code&amp;gt;SDLMAIN_LIBRARY&amp;lt;/code&amp;gt; field blank. This option is not available if you have the generator set to Unix makefiles.&lt;br /&gt;
# Hit &amp;quot;Generate&amp;quot;.&lt;br /&gt;
# You may now close CMake.&lt;br /&gt;
&lt;br /&gt;
===Compiling===&lt;br /&gt;
&lt;br /&gt;
====With Xcode====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compilation will fail unless you manually create certain directories needed by the build scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/build/dir/CMakeFiles&lt;br /&gt;
$ mkdir gpp{game,trem,ui}-qvm.dir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a workaround to {{Issue|101}}.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Either start Xcode and open the project file (in the build directory you specified) or double-click the project file in Finder.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open the project file created by CMake, which should be in the build directory you specified.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Change the active target to &amp;quot;ALL_BUILD&amp;quot; and click Product&amp;amp;rarr;Build.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====With Unix Makefiles====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start Terminal (Applications &amp;amp;rarr; Utilities &amp;amp;rarr; Terminal).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Input the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/Unvanquished-build&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are on a multi-core or multi-processor machine, you may speed up the process by passing the &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; argument followed by the number of available cores to &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;; e.g., &amp;lt;code&amp;gt;make -j4&amp;lt;/code&amp;gt;. Note that doing so makes reading error messages more difficult, as multiple instances of the compiler will print to the screen at once, causing information to appear out of order.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testing the build===&lt;br /&gt;
&lt;br /&gt;
====With Xcode 4====&lt;br /&gt;
&lt;br /&gt;
To test the game, select the &amp;quot;client&amp;quot; scheme from the combo box on the toolbar, and click the run button or press {{Hotkey|MacCommand}}{{Hotkey|R}}.&lt;br /&gt;
&lt;br /&gt;
====With Unix Makefiles====&lt;br /&gt;
&lt;br /&gt;
After compiling, you'll have to place the data files in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; directory in your build directory. [[#Acquiring the Game Files|For download instructions, see below.]]&lt;br /&gt;
&lt;br /&gt;
Your file structure should look as follows:&lt;br /&gt;
&lt;br /&gt;
[[File:Build_dir_Mac_OS_X.png]]&lt;br /&gt;
&lt;br /&gt;
You may now start the application as such:&lt;br /&gt;
&lt;br /&gt;
 $ ./daemon.i386&lt;br /&gt;
&lt;br /&gt;
Note that older machines will not support the new OpenGL 3 renderer, and must be started specifying the &amp;quot;vanilla&amp;quot; (aka &amp;quot;GL&amp;quot;) renderer:&lt;br /&gt;
&lt;br /&gt;
 $ ./daemon.i386 +set cl_renderer GL&lt;br /&gt;
&lt;br /&gt;
===Bundling the Application===&lt;br /&gt;
&lt;br /&gt;
====With CPack====&lt;br /&gt;
&lt;br /&gt;
CPack is able to create standalone bundles (as well as many other types of installers). However you must generate the files using Unix Makefiles instead of Xcode.&lt;br /&gt;
&lt;br /&gt;
 $ cd /path/to/Unvanquished-build&lt;br /&gt;
 $ cpack -G Bundle&lt;br /&gt;
&lt;br /&gt;
Some warnings will be printed however these can be safely ignored. There should be a file called Unvanquished.dmg in the Unvanquished-build folder.&lt;br /&gt;
&lt;br /&gt;
====Manually====&lt;br /&gt;
&lt;br /&gt;
{{Note|header=Important|content=&lt;br /&gt;
Please be aware that these instructions are very much out of date, and may not work. Also note that the dynamic library bundler does '''not''' work as intended and although you will be able to run your build on your machine, it will most likely not work on other machines. It is strongly suggested that you compile the source using Xcode.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
You'll find the Mac [http://macdylibbundler.sourceforge.net/ dynamic library bundler] to be quite useful (you must generate the files using Unix Makefiles instead of Xcode):&lt;br /&gt;
&lt;br /&gt;
 $ curl -L http://sourceforge.net/projects/macdylibbundler/files/macdylibbundler/0.4.1/dylibbundler0.4.1.zip/download &amp;gt; \&lt;br /&gt;
    dylibbundler0.4.1.zip&lt;br /&gt;
 $ unzip dylibbundler0.4.1.zip&lt;br /&gt;
 $ cd dylibbundler&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Once you've done that, you can proceed to create the application bundle. Note that these steps assume that you have downloaded the data files to &amp;lt;code&amp;gt;main/&amp;lt;/code&amp;gt; as shown above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git=/path/to/Unvanquished-git-repo&lt;br /&gt;
$ build=/path/to/Unvanquished-build-dir&lt;br /&gt;
$ mkdir -pv Unvanquished.app/Contents/{libs,MacOS,Resources,Frameworks}&lt;br /&gt;
$ cp -r $build/main Unvanquished.app/Contents/MacOS&lt;br /&gt;
$ sips -s format tiff $git/debian/unvanquished.png --out temp.tiff&lt;br /&gt;
$ tiff2icns temp.tiff Unvanquished.app/Contents/Resources/Unvanquished.icns&lt;br /&gt;
$ rm temp.tiff&lt;br /&gt;
$ cp $build/daemon{,ded}.i386 $build/*.dylib Unvanquished.app/Contents/MacOS&lt;br /&gt;
$ cp -r /Library/Frameworks/SDL.framework Unvanquished.app/Contents/Frameworks&lt;br /&gt;
$ install_name_tool -id \&lt;br /&gt;
    @executable_path/../Frameworks/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    Unvanquished.app/Contents/Frameworks/SDL.framework/Versions/A/SDL&lt;br /&gt;
$ install_name_tool -change @rpath/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    @executable_path/../Frameworks/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    Unvanquished.app/Contents/MacOS/daemon.i386&lt;br /&gt;
$ install_name_tool -change @rpath/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    @executable_path/../Frameworks/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    Unvanquished.app/Contents/MacOS/librendererGLi386.dylib&lt;br /&gt;
$ install_name_tool -change @rpath/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    @executable_path/../Frameworks/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    Unvanquished.app/Contents/MacOS/librendererGL3i386.dylib&lt;br /&gt;
$ for binary in Unvanquished.app/Contents/MacOS/*.{i386,dylib}; do&lt;br /&gt;
    dylibbundler -b -x $binary -d $dest/Unvanquished.app/Contents/libs/; done&lt;br /&gt;
$ cp /usr/lib/libGLEW.1.7.0.dylib ./Unvanquished.app/Contents/libs/libGLEW.1.7.0.dylib&lt;br /&gt;
$ chmod +w ./Unvanquished.app/Contents/libs/libGLEW.1.7.0.dylib&lt;br /&gt;
$ install_name_tool -id @executable_path/../libs/libGLEW.1.7.0.dylib \&lt;br /&gt;
    ./Unvanquished.app/Contents/libs/libGLEW.1.7.0.dylib&lt;br /&gt;
$ install_name_tool -change /usr/lib/libGLEW.1.7.0.dylib \&lt;br /&gt;
    @executable_path/../libs/libGLEW.1.7.0.dylib \&lt;br /&gt;
    ./Unvanquished.app/Contents/MacOS/daemon.i386&lt;br /&gt;
$ cat &amp;gt; Unvanquished.app/Contents/Info.plist&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot;&lt;br /&gt;
          &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleName&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;Unvanquished&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleDisplayName&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;Unvanquished&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleExecutable&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;daemon.i386&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleIconFile&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;Unvanquished.icns&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleIdentifier&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;net.Unvanquished&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleInfoDictionaryVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;6.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundlePackageType&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;APPL&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleShortVersionString&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;0.4.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;0.4.0&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
^d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: &amp;lt;code&amp;gt;^d&amp;lt;/code&amp;gt; indicates pressing {{Hotkey|Ctrl}}{{Hotkey|D}} on the keyboard.&lt;br /&gt;
&lt;br /&gt;
The contents of the completed application bundle should look like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Bundle_dir_Mac_OS_X.png]]&lt;br /&gt;
&lt;br /&gt;
'''Note''': If you compiled SDL from source, you will not see a directory titled &amp;lt;code&amp;gt;SDL.framework&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&lt;br /&gt;
===Visual Studio===&lt;br /&gt;
&lt;br /&gt;
CMake can generate Visual Studio projects for Unvanquished.&lt;br /&gt;
&lt;br /&gt;
# Run the &amp;lt;code&amp;gt;Visual_Studio32.bat&amp;lt;/code&amp;gt; batch script in your source directory by double-clicking it. Alternatively, you may use the &amp;lt;code&amp;gt;Visual_Studio64.bat&amp;lt;/code&amp;gt; shell script if you have the [http://www.microsoft.com/en-us/download/details.aspx?id=8279 Windows 7 SDK] installed and a 64-bit system.&lt;br /&gt;
# Open &amp;lt;code&amp;gt;build-32/Daemon.sln&amp;lt;/code&amp;gt; in Visual Studio 2010.&lt;br /&gt;
# In the two text boxes in the toolbar, select &amp;quot;Release&amp;quot; or &amp;quot;Debug&amp;quot; in the first one and Win32 in the second one&lt;br /&gt;
# Press {{Hotkey|F5}} to build solution and run application, or just use Build &amp;amp;rarr; Build Solution to compile the code.&lt;br /&gt;
&lt;br /&gt;
====Important Notes====&lt;br /&gt;
&lt;br /&gt;
* LLVM is disabled and does not work correctly with CMake generated Visual Studio projects.&lt;br /&gt;
* ncurses is not supported under Visual Studio.&lt;br /&gt;
* The path to the build folder must not have any spaces otherwise generation of QVMs will fail. See {{Issue|102}}.&lt;br /&gt;
* Due to limitations with CMake, neither the startup project nor the working directory can be specified. These must be set manually to debug the client with Visual Studio:&lt;br /&gt;
** Right click on client and select &amp;quot;Set as StartUp project&amp;quot;.&lt;br /&gt;
** Right click on client, select properties, select Debugging and set &amp;quot;Working Directory&amp;quot; to &amp;lt;code&amp;gt;$(TargetPath)\..&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Troubleshooting====&lt;br /&gt;
&lt;br /&gt;
If installing the Windows 7 SDK [http://support.microsoft.com/kb/2717426?ppud=4&amp;amp;wa=wsignin1.0 fails with error code 5100] (when the installation fails, click &amp;quot;View Log&amp;quot;, and search for &amp;quot;5100&amp;quot;), remove any installed copies of the Microsoft Visual C++ 2010 x86 Redistributable and Microsoft Visual C++ 2010 x64 Redistributable via the control panel (Control Panel &amp;amp;rarr; Programs and Features), then run the installer again.&lt;br /&gt;
&lt;br /&gt;
===MinGW===&lt;br /&gt;
&lt;br /&gt;
It is possible to build Unvanquished with MinGW, although the process is rather arduous compared to Visual Studio or compiling for other platforms. Currently, you will also need [http://cygwin.com/setup.exe Cygwin] to build the GMP library as well.&lt;br /&gt;
&lt;br /&gt;
====Notes====&lt;br /&gt;
&lt;br /&gt;
* The easiest way to acquire and install MinGW is with the graphical [http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/ mingw-get-inst installer]. At a minimum, you will need to install the C and C++ compilers. &amp;lt;!-- TODO: maybe walk the user through the installer? --&amp;gt;&lt;br /&gt;
* When configuring the build with CMake, you will find that you will have to set a number of libraries manually. You can find precompiled DLLs for most of the dependencies; those that are not pre-compiled can be built with the corresponding &amp;lt;code&amp;gt;USE_INTERNAL_&amp;lt;/code&amp;gt; setting.&lt;br /&gt;
* '''The build will fail during QVM compilation if your source or build directories contain spaces.''' This is due to a bug with lcc. If your home directory contains a space, you may want to create source and build directories at the root of one of your drives (e.g., &amp;lt;code&amp;gt;C:\Unvanquished\Source&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;C:\Unvanquished\Build&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
====Instructions====&lt;br /&gt;
&lt;br /&gt;
The easiest way to get a build up (at the time of writing) is as follows:&lt;br /&gt;
&lt;br /&gt;
{{Note|content=Although there are 64-bit binaries of most of the libraries required to build the game, these do not work with MinGW at present, so the following instructions all use the 32-bit binaries.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You will need to download and install some version of the DirectX SDK to compile the source. You may download the June 2010 release from [http://www.microsoft.com/en-us/download/details.aspx?id=6812 Microsoft].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Although there are binaries of gmp distributed with the source, they have are dependent on Visual Studio's implementations of &amp;lt;code&amp;gt;_ftol2_sse&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;_alloca_probe_16&amp;lt;/code&amp;gt;. A fix may be found on [http://stackoverflow.com/questions/6753111/static-linking-with-openssl Stack Exchange], but requires that Visual Studio be installed, which defeats the purpose of attempting to use MinGW to compile the source. You can build gmp yourself:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download and extract the latest version of the [http://gmplib.org/ GNU MP Bignum Library (GMP)]. (You will need either cygwin with tar and bz2 installed or 7-zip to extract the archive.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install the following Cygwin packages if you have not already:&lt;br /&gt;
* binutils&lt;br /&gt;
* gcc&lt;br /&gt;
* gcc-g++&lt;br /&gt;
* m4&lt;br /&gt;
* make&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;As part of the GMP compilation process, a file called &amp;lt;code&amp;gt;gen-fib.c&amp;lt;/code&amp;gt; generates a table of numbers in the Fibonacci sequence. The generated file does not play nicely with Cygwin or MinGW, so you must fix it. Edit &amp;lt;code&amp;gt;gen-fib.c&amp;lt;/code&amp;gt;, and at around line 100, change these lines&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  for (i = 0; i &amp;lt; fnum; i++)&lt;br /&gt;
    {&lt;br /&gt;
      printf (&amp;quot;  CNST_LIMB (0x&amp;quot;);&lt;br /&gt;
      mpz_out_str (stdout, 16, f[i]);&lt;br /&gt;
      printf (&amp;quot;),  /* %d */\n&amp;quot;, i-1);&lt;br /&gt;
    }&lt;br /&gt;
  printf (&amp;quot;};\n&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  for (i = 0; i &amp;lt; fnum; i++)&lt;br /&gt;
    {&lt;br /&gt;
      printf (&amp;quot;  CNST_LIMB (0x&amp;quot;);&lt;br /&gt;
      mpz_out_str (stdout, 16, f[i]);&lt;br /&gt;
      printf (&amp;quot;)%c  /* %d */\n&amp;quot;, (i == (fnum-1)) ? ' ' : ',', i-1);&lt;br /&gt;
    }&lt;br /&gt;
  printf (&amp;quot;};\n&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The patch file looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -100,7 +100,7 @@&lt;br /&gt;
     {&lt;br /&gt;
       printf (&amp;quot;  CNST_LIMB (0x&amp;quot;);&lt;br /&gt;
       mpz_out_str (stdout, 16, f[i]);&lt;br /&gt;
-      printf (&amp;quot;),  /* %d */\n&amp;quot;, i-1);&lt;br /&gt;
+      printf (&amp;quot;)%c  /* %d */\n&amp;quot;, (i == (fnum-1)) ? ' ' : ',', i-1);&lt;br /&gt;
     }&lt;br /&gt;
   printf (&amp;quot;};\n&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compiling with MinGW does not work, so you will need to compile with Cygwin. At the prompt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./configure --disable-static --enable-shared&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;--disable-static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--enable-shared&amp;lt;/code&amp;gt; flags configure GMP to build a DLL instead of a static library. You may optionally perform &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;. Additional compilation instructions [http://www.cs.nyu.edu/exact/core/gmp/ are available].&lt;br /&gt;
&amp;lt;p&amp;gt;If you experience difficulties with compilation and it appears that MinGW gcc is being detected by &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; and not Cygwin gcc, you can try editing your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ export PATH=`echo $PATH | sed &amp;quot;s|/cygdrive/c/MinGW/bin:||&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Re-run &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; afterwards.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the [http://www.libsdl.org/release/SDL-1.2.15-win32.zip latest stable version] of SDL for Windows. Extract the archive and copy &amp;lt;code&amp;gt;SDL.dll&amp;lt;/code&amp;gt; from it to the root of your build directory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the following CMake flags:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_CRYPTO&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copies of crypto libraries. &amp;lt;!-- FIXME: I think these are nettle and something else --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_GLEW&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of GLEW.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_JPEG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of JPEG.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_SDL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of SDL.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_SPEEX&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of Speex.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_WEBP&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of WebP.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_CURSES&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables curses.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PNG_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the PNG library DLL.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/libpng/libs/win32/libpng.lib&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PNG_PNG_INCLUDE_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the PNG library header files.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/libpng&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FREETYPE_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the compiled FreeType library.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/freetype/lib/freetype.lib&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FREETYPE_INCLUDE_DIR_freetype2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the FreeType library header files.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/freetype/include/freetype2&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FREETYPE_INCLUDE_DIR_ft2build&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the FreeType library file &amp;quot;ftbuild.h&amp;quot;.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/freetype/include/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GMP_INCLUDE_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the GMP library header files.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/gmp/include&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GMP_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the GMP library.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;path/to/compiled/gmp/&amp;lt;/var&amp;gt;.libs/cyggmp-10.dll&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ZLIB_INCLUDE_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the zlib library header files.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/zlibwapi/include&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ZLIB_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the zlib library.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/zlibwapi/lib/x32/zlib1.dll&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CURL_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the CURL library.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/curl-7.21.6/lib/win32/release/libcurl.dll&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CURL_INCLUDE_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the zlib library.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/curl-7.21.6/include/curl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_OPENAL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables OpenAL support.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_CIN_THEORA&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables Theora support.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_CIN_XVID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables Xvid support.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_CODEC_THEORA&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables Ogg support.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDL_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| The path to the SDL DLL.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;BuildPath&amp;lt;/var&amp;gt;/SDL.dll&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDLMAIN_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables Ogg support.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/libsdl/src/main/win32/SDL_win32_main.c&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Do note that CMake is slash-direction&amp;amp;ndash;agnostic; it can handle both forward- and backslashes on Windows.&lt;br /&gt;
&amp;lt;p&amp;gt;If you would like to compile a debug build, change &amp;lt;code&amp;gt;CMAKE_RELEASE_TYPE&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/CMakeLists.txt&amp;lt;/code&amp;gt; and edit the line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    set( OS_LIBRARIES m winmm ws2_32 psapi z )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(around line 1040) to look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    set( OS_LIBRARIES m winmm ws2_32 psapi )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also edit around line 1700:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###########################&lt;br /&gt;
#Configure Download Script#&lt;br /&gt;
###########################&lt;br /&gt;
&lt;br /&gt;
if( NOT MSVC )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###########################&lt;br /&gt;
#Configure Download Script#&lt;br /&gt;
###########################&lt;br /&gt;
&lt;br /&gt;
if( NOT WIN32 )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/libsdl/src/main/win32/SDL_win32_main.c&amp;lt;/code&amp;gt; and edit the lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Include the SDL main definition header */&lt;br /&gt;
#include &amp;quot;SDL.h&amp;quot;&lt;br /&gt;
#include &amp;quot;SDL_main.h&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to look like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Include the SDL main definition header */&lt;br /&gt;
#include &amp;quot;../../../include/SDL.h&amp;quot;&lt;br /&gt;
#include &amp;quot;../../../include/SDL_main.h&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open a command prompt and &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; to your source directory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; mingw32-make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you would like verbose output, set the &amp;lt;code&amp;gt;VERBOSE&amp;lt;/code&amp;gt; environment variable before running &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; set VERBOSE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To make it easier to build the source, you can create a batch file (call it something like &amp;lt;code&amp;gt;compile.bat&amp;lt;/code&amp;gt;) and place it in your build directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
&lt;br /&gt;
set RETURN=compile&lt;br /&gt;
&lt;br /&gt;
:get_time&lt;br /&gt;
	:: Thank you, Rob van der Woude:&lt;br /&gt;
	:: (http://www.robvanderwoude.com/datetimentparse.php)&lt;br /&gt;
	FOR /F &amp;quot;tokens=1,2,3 delims=:.&amp;quot; %%A IN (&amp;quot;%Time%&amp;quot;) DO (&lt;br /&gt;
		SET /A HOURS   = 100%%A %% 100&lt;br /&gt;
		SET /A MINUTES = 100%%B %% 100&lt;br /&gt;
		SET /A SECONDS = 100%%C %% 100&lt;br /&gt;
	)&lt;br /&gt;
	SET /A TICKS=( %HOURS% * 3600 ) + ( %MINUTES% * 60 ) + %SECONDS%&lt;br /&gt;
	GOTO %RETURN%&lt;br /&gt;
&lt;br /&gt;
:compile&lt;br /&gt;
	SET START_TICKS=%TICKS%&lt;br /&gt;
&lt;br /&gt;
	SET VERBOSE=1&lt;br /&gt;
	:: mingw32-make clean&lt;br /&gt;
	mingw32-make -j4&lt;br /&gt;
&lt;br /&gt;
	set RETURN=finish&lt;br /&gt;
	GOTO get_time&lt;br /&gt;
&lt;br /&gt;
:finish&lt;br /&gt;
	SET /A COMPILE_TIME=%TICKS% - %START_TICKS%&lt;br /&gt;
	SET /A MINUTES=%COMPILE_TIME% / 60&lt;br /&gt;
	SET /A SECONDS=%COMPILE_TIME% %% 60&lt;br /&gt;
	ECHO.&lt;br /&gt;
	ECHO Compilation took %MINUTES%m %SECONDS%s.&lt;br /&gt;
	PAUSE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Once compilation finishes, you will find that the game will fail to run due to DLL dependencies. To resolve these:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You will need to move &amp;lt;code&amp;gt;INTERNAL_GLEW&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;Release/&amp;lt;/code&amp;gt; folder of the build directory to the root of the build directory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You will need to place the following other DLLs in your build directory:&lt;br /&gt;
* freetype6.dll&lt;br /&gt;
* libcurl.dll&lt;br /&gt;
* libpng14-14.dll&lt;br /&gt;
* zlib1.dll&lt;br /&gt;
If the renderer's DLL dependencies are not met, you will be informed that the game failed to load a renderer. If you receive an error stating that the application failed to start at all, then you are likely missing some version of the Microsoft Visual C runtime redistributable.&lt;br /&gt;
&amp;lt;p&amp;gt;You may find that you also need these DLLs (if you configured your build differently):&amp;lt;/p&amp;gt;&lt;br /&gt;
* libbz2.dll&lt;br /&gt;
* libogg.dll&lt;br /&gt;
* libtheora.dll&lt;br /&gt;
* libvorbis.dll&lt;br /&gt;
* libvorbisfile.dll&lt;br /&gt;
* msvcr100.dll&lt;br /&gt;
* msvcr100d.dll&lt;br /&gt;
* zlibwapi.dll&lt;br /&gt;
The easiest way to obtain these DLLs is by copying them from the installation directory of an [http://sourceforge.net/projects/unvanquished/files/latest/download official release] of Unvanquished.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You will need to copy your compiled DLL of GMP to your build directory. It may be found in &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;path/to/compiled/gmp/&amp;lt;/var&amp;gt;.libs/cyggmp-10.dll&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;As you compiled GMP with Cygwin, it in turn depends on &amp;lt;code&amp;gt;cygwin1.dll&amp;lt;/code&amp;gt;, which may typically be found in &amp;lt;code&amp;gt;C:\cygwin\bin\&amp;lt;/code&amp;gt;. Copy and paste it into your build directory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Once you have completed these steps, you should never have to do them again.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes====&lt;br /&gt;
&lt;br /&gt;
* If you would like to use curses, try using [http://sourceforge.net/projects/pdcurses/files/pdcurses PDCurses].&lt;br /&gt;
&lt;br /&gt;
===QtCreator===&lt;br /&gt;
&lt;br /&gt;
# Install MinGW and follow the above instructions, except select Code::Blocks as the generator.&lt;br /&gt;
# Start QtCreator, and select &amp;quot;Open File or Project&amp;amp;hellip;&amp;quot; from the File menu.&lt;br /&gt;
# Navigate to your source directory and open CMakeLists.txt.&lt;br /&gt;
# At the CMake Wizard, select the same build directory you already configured using CMake. (If you did not chose Code::Blocks as the generator, you will have to start over again, as QtCreator requires a Code::Blocks project file in order to compile the source.)&lt;br /&gt;
# Ensure that a generator is selected in the combo box, and click &amp;quot;Run CMake&amp;quot;. If there is no generator listed, see the [[#Troubleshooting|troubleshooting]] section below.&lt;br /&gt;
# Click &amp;quot;Finish&amp;quot; to close the wizard.&lt;br /&gt;
&lt;br /&gt;
You should now be able to compile, run, and debug the code using QtCreator.&lt;br /&gt;
&lt;br /&gt;
====Troubleshooting====&lt;br /&gt;
&lt;br /&gt;
If at the &amp;quot;Run CMake&amp;quot; prompt of the the CMake Wizard, select &amp;quot;Run CMake&amp;quot; and are warned that no generator was selected, and notice that there are no generators in the combo box, you will likely have to [http://doc.qt.digia.com/qtcreator-2.4/creator-tool-chains.html manually configure your toolchain]. Select &amp;quot;Options&amp;amp;hellip;&amp;quot; from the &amp;quot;Tools&amp;quot; menu, then navigate to &amp;quot;Build &amp;amp;amp; Run&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
At the options window,&lt;br /&gt;
* Go to the &amp;quot;Kits&amp;quot; tab, and mouse over the &amp;quot;Desktop (default)&amp;quot; kit under &amp;quot;Manual&amp;quot;. If there were any errors in configuring this kit, they will be displayed in the tool tip. If there are problems, select the kit. You may need to manually specify the location of the MinGW debugger, for example, which is typically &amp;lt;code&amp;gt;C:\MinGW\bin\gdb.exe&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Go to the &amp;quot;Compilers&amp;quot; tab, and ensure that MinGW is present. If not, you will need to add it manually.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: this may be incomplete --&amp;gt;&lt;br /&gt;
====Debian/Ubuntu====&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install g++ gcc cmake libcurl4-gnutls-dev libfreetype6-dev \&lt;br /&gt;
   libglew-dev libgmp-dev nettle-dev zlib1g-dev libncursesw5-dev \&lt;br /&gt;
   libsdl2-dev libopenal-dev libjpeg8-dev libpng12-dev libwebp-dev \&lt;br /&gt;
   libogg-dev libvorbis-dev libspeexdsp-dev libtheora-dev libopusfile-dev \&lt;br /&gt;
   libxvidcore-dev&lt;br /&gt;
&lt;br /&gt;
If libsdl2-dev isn't available, you can use libsdl1.2-dev instead.&lt;br /&gt;
&lt;br /&gt;
If the version of WebP supplied by your version of Debian or Ubuntu is older than v0.2.0, you will need to [https://code.google.com/p/webp/downloads/detail?name=libwebp-0.2.0.tar.gz download] and [https://developers.google.com/speed/webp/docs/compiling#unix compile it from source]. After compiling and installing with &amp;lt;code&amp;gt;sudo make install&amp;lt;/code&amp;gt;, in CMake, you'll need to set &amp;lt;code&amp;gt;WEBP_INCLUDE_DIR&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/usr/local/include/webp&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;WEBP_LIBRARY&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/usr/local/lib/libwebp.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''We currently provide ready-to-use libwebp-dev, libogg-dev libopusfile-dev where needed in our [http://{{SERVERNAME}}/index.php/Download#ubuntu Debian and Ubuntu repositories], alongside .debs of the game and server.'''&lt;br /&gt;
&lt;br /&gt;
Actual dev package names may vary, e.g. libgmp3-dev instead of libgmp-dev and libglew1.7-dev instead of libglew-dev.&lt;br /&gt;
&lt;br /&gt;
Since we have a debian directory in the source, you can also to check what's needed then install the listed packages (choosing from alternatives as needed):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ dpkg-checkbuilddeps&lt;br /&gt;
 …&lt;br /&gt;
 $ sudo apt-get install &amp;lt;var&amp;gt;package(s)&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If dpkg-checkbuilddeps produces no output, you have all necessary build dependencies. Also, debhelper's only needed if you're building .debs.&lt;br /&gt;
&lt;br /&gt;
====Gentoo====&lt;br /&gt;
&lt;br /&gt;
 $ emerge curl freetype glew gmp jpeg ncurses libogg openal libpng libsdl libvorbis zlib&lt;br /&gt;
&lt;br /&gt;
====openSUSE====&lt;br /&gt;
&lt;br /&gt;
 $ sudo install zypper gcc gcc-c++ Mesa-libGL-devel SDL-devel libjpeg8-devel \&lt;br /&gt;
   libpng12-devel glew-devel webp-devel ncurses-devel gmp-devel libcurl-devel \&lt;br /&gt;
   libnettle-devel openal-soft-devel speex-devel libvorbis-devel \&lt;br /&gt;
   libtheora-devel&lt;br /&gt;
&lt;br /&gt;
The latest version of WebP must be installed manually:&lt;br /&gt;
&lt;br /&gt;
 $ wget https://webp.googlecode.com/files/libwebp-0.2.1.tar.gz&lt;br /&gt;
 $ tar xvzf libwebp-0.2.1.tar.gz&lt;br /&gt;
 $ cd libwebp-0.2.1&lt;br /&gt;
 $ ./configure &amp;amp;&amp;amp; make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
You must disable curses (set &amp;lt;code&amp;gt;USE_CURSES&amp;lt;/code&amp;gt; appropriately in CMake) as failing to do so will cause Unvanquished to crash on startup.&lt;br /&gt;
&lt;br /&gt;
===Configuring the code with CMake===&lt;br /&gt;
&lt;br /&gt;
After you have [[Getting the source|acquired the source code]], you can proceed to compile. Unvanquished uses CMake, so you must have that installed. &lt;br /&gt;
&lt;br /&gt;
====Using ccmake (curses-based front-end)====&lt;br /&gt;
&lt;br /&gt;
On Debian or Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install cmake-curses-gui&lt;br /&gt;
&lt;br /&gt;
On Gentoo you should set the '''ncurses''' USE flag either globally or individually, just for cmake.&lt;br /&gt;
To add the USE flag globally, edit the USE array in /etc/make.conf for it to include '''ncurses'''.&lt;br /&gt;
To only install cmake with ncurses functionality, you could do the following:&lt;br /&gt;
&lt;br /&gt;
 $ echo 'dev-util/cmake ncurses' &amp;gt;&amp;gt; /etc/portage/package.use &amp;amp;&amp;amp; emerge cmake&lt;br /&gt;
&lt;br /&gt;
Note that in Ubuntu, &amp;lt;code&amp;gt;cmake-curses-gui&amp;lt;/code&amp;gt; is in Universe, which you may have to enable with &amp;lt;code&amp;gt;software-properties-gtk&amp;lt;/code&amp;gt;. Make sure to reload the software sources with &amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt; afterwards.&lt;br /&gt;
&lt;br /&gt;
Next, configure the codebase.&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ mkdir build&lt;br /&gt;
 $ cd build&lt;br /&gt;
 $ ccmake ..&lt;br /&gt;
&lt;br /&gt;
Or, in Debian or Ubuntu, you can build a package (but you'll need to have devscripts and fakeroot installed):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ fakeroot dpkg-buildpackage -b -uc&lt;br /&gt;
 $ sudo dpkg -i &amp;lt;var&amp;gt;../unvanquished_*.deb&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once in &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt;, use the following keys:&lt;br /&gt;
&lt;br /&gt;
* Press {{Hotkey|c}} to configure. If an error occurs during this phase, make note of it and press {{Hotkey|e}} to dismiss it.&lt;br /&gt;
* Use the up and down arrow keys to navigate the compilation options.&lt;br /&gt;
* Press {{Hotkey|Enter}} to enable or disable boolean options (i.e., on/off) or to edit textual options.&lt;br /&gt;
** Press {{Hotkey|Esc}} when editing a textual option to cancel the change.&lt;br /&gt;
&lt;br /&gt;
Once you have finished the configuration process, press {{Hotkey|C}} again, then {{Hotkey|G}} to generate the makefile.&lt;br /&gt;
&lt;br /&gt;
====Using cmake-qt-gui (graphical front-end)====&lt;br /&gt;
&lt;br /&gt;
This graphical front end for cmake has its own package you must install:&lt;br /&gt;
&lt;br /&gt;
=====Debian/Ubuntu=====&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install cmake-qt-gui&lt;br /&gt;
&lt;br /&gt;
=====Gentoo=====&lt;br /&gt;
&lt;br /&gt;
With the '''qt4''' USE flag enabled:&lt;br /&gt;
&lt;br /&gt;
 $ emerge cmake&lt;br /&gt;
&lt;br /&gt;
Once installed, run with &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cmake-qt-gui.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
# Set the path where you have the source code downloaded.&lt;br /&gt;
# Set the path where you would like to build the engine. This may be the same directory if you wish.&lt;br /&gt;
# Click 'Configure'.&lt;br /&gt;
# Click 'Generate'.&lt;br /&gt;
&lt;br /&gt;
====Unnecessary libraries====&lt;br /&gt;
&lt;br /&gt;
Regardless of which front-end to cmake you use, you may want to disable some libraries that are not strictly necessary:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_OPENAL&amp;lt;/code&amp;gt; &amp;amp;mdash; If this is disabled, SDL is used instead for sound.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CODEC_VORBIS&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this will cause certain sound effects (those using the &amp;lt;code&amp;gt;.ogg&amp;lt;/code&amp;gt; format) not to play. At present, this has only a minor impact on gameplay, but more and more sounds will likely use the format in the future.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CURSES&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this will cause the external (not in-game) console to not use curses; it will not be scrollable and will be similar to the console in the original Tremulous. This does in no way affect gameplay.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CIN_THEORA&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this prevents videos from being recorded in Theora.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CIN_XVID&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this prevents videos from being recorded in Xvid.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_VOIP&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this removes VOIP support. Alternatively enabling &amp;lt;code&amp;gt;USE_INTERNAL_SPEEX&amp;lt;/code&amp;gt; will use the libraries distributed with Unvanquished for VoIP&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_INTERNAL_CRYPTO&amp;lt;/code&amp;gt; &amp;amp;mdash; Enable this to use the crypto libraries provided by Unvanquished.&lt;br /&gt;
&lt;br /&gt;
===Compiling===&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;path/to/unvanquished/build&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ make -j4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; switch to make allows you to speed up the compilation process by running it in multiple threads; set the number following this to the number of cores your processor(s) have.&lt;br /&gt;
&lt;br /&gt;
==Acquiring the Game Files==&lt;br /&gt;
&lt;br /&gt;
===Acquiring mandatory game files===&lt;br /&gt;
&lt;br /&gt;
The game files are not in the Git repository, and must be downloaded separately. This may be done on the command line or from your web browser. The downloads may be found on [http://sourceforge.net/projects/unvanquished/files/Assets SourceForge.net]. If you download the files from your browser, just download the files named &amp;quot;pak*.pk3&amp;quot;, and save them to the [[Running_the_game#Data_locations|data location]] for your system.&lt;br /&gt;
&lt;br /&gt;
On Linux, this may be done as follows:&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;[path to Unvanquished installation or build]&amp;lt;/var&amp;gt;/main&lt;br /&gt;
 $ for file in {{CurrentVersion|PakFiles}}; do&lt;br /&gt;
 if [ ! -e $file ]; then&lt;br /&gt;
 wget -O $file &amp;quot;http://sourceforge.net/projects/unvanquished/files/Assets/$file/download&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
On FreeBSD, using the &amp;lt;code&amp;gt;sh&amp;lt;/code&amp;gt; shell:&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;[path to Unvanquished installation or build]&amp;lt;/var&amp;gt;/main&lt;br /&gt;
 $ for file in {{CurrentVersion|PakFiles}}; do&lt;br /&gt;
 if [ ! -e $file ]; then&lt;br /&gt;
 fetch -r -o $file &amp;quot;http://sourceforge.net/projects/unvanquished/files/Assets/$file/download&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
On Mac OS X:&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/Library/Application\ Support/Unvanquished/main&lt;br /&gt;
 $ for file in {{CurrentVersion|PakFiles}}; do&lt;br /&gt;
 if [ ! -e $file ]; then&lt;br /&gt;
 curl -L &amp;quot;http://sourceforge.net/projects/unvanquished/files/Assets/$file/download&amp;quot; &amp;gt; $file&lt;br /&gt;
 fi&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Linux users may also use the &amp;lt;code&amp;gt;download-pk3.sh&amp;lt;/code&amp;gt; script that is distributed with the source code, which requires that curl be installed:&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;[path to Unvanquished source code]&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ mkdir -p ~/.Unvanquished/main&lt;br /&gt;
 $ ./download-pk3.sh ~/.Unvanquished/main&lt;br /&gt;
&lt;br /&gt;
===Downloading the map pack===&lt;br /&gt;
&lt;br /&gt;
The map pack exists only for convenience; if you do not download the map pack, Unvanquished will automatically download maps as needed when you attempt to play online.&lt;br /&gt;
&lt;br /&gt;
To download the map pack on Linux:&lt;br /&gt;
&lt;br /&gt;
 $ wget -O maps.7z &amp;quot;http://sourceforge.net/projects/unvanquished/files/Map%20Pack/maps.7z&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
To download the map pack on Mac OS X:&lt;br /&gt;
&lt;br /&gt;
 $ curl -L &amp;quot;http://sourceforge.net/projects/unvanquished/files/Map%20Pack/maps.7z&amp;quot; &amp;gt; maps.7z; done&lt;br /&gt;
&lt;br /&gt;
Note that you will need to unzip the map pack on either system as it is compressed with LZMA. Mac users can use the [http://wakaba.c3.cx/s/apps/unarchiver.html Unarchiver]. Uncompressing the archive on Linux is highly dependent on your distribution.&lt;br /&gt;
&lt;br /&gt;
===Verifying the Files===&lt;br /&gt;
&lt;br /&gt;
Download the latest [http://sourceforge.net/projects/unvanquished/files/Assets/{{CurrentVersion|MD5HashFile}} MD5 hash file] and save it to your system's [[Running_the_game#Data_directory|data location]].&lt;br /&gt;
&lt;br /&gt;
On systems with the &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; command (Mac OS X):&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/Library/Application\ Support/Unvanquished/main&lt;br /&gt;
 $ cat {{CurrentVersion|MD5HashFile}} | while read line; do&lt;br /&gt;
 file=&amp;quot;`echo &amp;quot;$line&amp;quot; | sed -E &amp;quot;s/^[a-fA-F0-9]+ +\*?//&amp;quot;`&amp;quot;&lt;br /&gt;
 if [ -e &amp;quot;$file&amp;quot; ]; then&lt;br /&gt;
 if [ `md5 -r &amp;quot;$file&amp;quot; | cut -d\  -f1` = &amp;quot;`echo &amp;quot;$line&amp;quot; | cut -d\  -f1`&amp;quot; ]&lt;br /&gt;
 then echo &amp;quot;File \&amp;quot;$file\&amp;quot; appears okay.&amp;quot;&lt;br /&gt;
 else echo &amp;quot;File \&amp;quot;$file\&amp;quot; is corrupt&amp;quot;'!' &amp;gt;&amp;amp;2&lt;br /&gt;
 fi; fi; done&lt;br /&gt;
&lt;br /&gt;
On systems with the &amp;lt;code&amp;gt;md5sum&amp;lt;/code&amp;gt; command (most Linux distributions):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;[[Running_the_game#Data_directory|/path/to/data/files]]&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ md5sum -c {{CurrentVersion|MD5HashFile}} 2&amp;gt;&amp;amp;1 | grep -v &amp;quot;open or read\|file or directory&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; invocation is used to strip output complaining about missing files.&lt;br /&gt;
&lt;br /&gt;
Any files that are found to be corrupt should be replaced; just download a [http://sourceforge.net/projects/unvanquished/files/Assets new copy] of the affected file(s).&lt;br /&gt;
&lt;br /&gt;
==Errors==&lt;br /&gt;
&lt;br /&gt;
===CMake cannot locate Newton===&lt;br /&gt;
&lt;br /&gt;
If CMake cannot find Newton, you'll need to set it up yourself.&lt;br /&gt;
&lt;br /&gt;
It should be in &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;/path/to/Unvanquished&amp;lt;/var&amp;gt;/src/libs/libnewton/libs/&amp;lt;var&amp;gt;your_os&amp;lt;/var&amp;gt;/libNewton.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
Be sure to replace &amp;lt;var&amp;gt;your_os&amp;lt;/var&amp;gt; with the proper directory name.&lt;br /&gt;
&lt;br /&gt;
Use CMake as before to change the &amp;lt;code&amp;gt;NEWTON_LIBRARY&amp;lt;/code&amp;gt; build setting to the said path:&lt;br /&gt;
&lt;br /&gt;
# Start the CMake configurator:&amp;lt;pre&amp;gt;$ ccmake ..&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Scroll down and highlight &amp;lt;code&amp;gt;NEWTON_LIBRARY&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Press {{Hotkey|Enter}} to begin editing and input in the path.&lt;br /&gt;
# Press {{Hotkey|C}} to configure and {{Hotkey|G}} to generate the new makefiles.&lt;br /&gt;
# Press {{Hotkey|Q}} to quit.&lt;br /&gt;
# Recompile the source:&amp;lt;pre&amp;gt;$ make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The C Compiler is not able to compile a simple test program===&lt;br /&gt;
&lt;br /&gt;
When attempting to generate a solution for Xcode CMake fails with the following error&lt;br /&gt;
  -- Check for working C compiler using: Xcode -- broken&lt;br /&gt;
  CMake Error at /Applications/CMake 2.8-8.app/Contents/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):&lt;br /&gt;
   The C compiler &amp;quot;/usr/bin/gcc&amp;quot; is not able to compile a simple test program.&lt;br /&gt;
  &lt;br /&gt;
    It fails with the following output:&lt;br /&gt;
  &lt;br /&gt;
     Change Dir: /Users/danielmaloney/Documents/Unvanquished/build-xcode/CMakeFiles/CMakeTmp&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &lt;br /&gt;
    Run Build Command:/Applications/CMake\ 2.8-8.app/Contents/bin/cmakexbuild&lt;br /&gt;
    -project CMAKE_TRY_COMPILE.xcodeproj build -target&lt;br /&gt;
    cmTryCompileExec1400153232 -configuration Debug&lt;br /&gt;
  &lt;br /&gt;
    Error: No developer directory found at /Developer.  Run&lt;br /&gt;
    /usr/bin/xcode-select to update the developer directory path.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
    CMake will not be able to correctly generate this project.&lt;br /&gt;
  Call Stack (most recent call first):&lt;br /&gt;
    CMakeLists.txt:19 (project)&lt;br /&gt;
&lt;br /&gt;
This is due to Xcode 4.3 having a different directory structure to previous versions. Simply running the following command will correct this error:&lt;br /&gt;
 sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer/&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Template:SupportedModelFormats&amp;diff=2140</id>
		<title>Template:SupportedModelFormats</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Template:SupportedModelFormats&amp;diff=2140"/>
		<updated>2013-10-11T21:28:11Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Daemon engine currently only supports the following:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Format&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Introduced in&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Supported techniques&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Exporter availability&lt;br /&gt;
|-&lt;br /&gt;
! Title&lt;br /&gt;
! Year&lt;br /&gt;
|-&lt;br /&gt;
| MD3&lt;br /&gt;
| Quake 3&lt;br /&gt;
| 1999&lt;br /&gt;
| Per-frame vertex animation&lt;br /&gt;
|&lt;br /&gt;
* Milkshape 3d&lt;br /&gt;
* Blender 2.4 or newer&lt;br /&gt;
|-&lt;br /&gt;
| [http://udn.epicgames.com/Two/BinaryFormatSpecifications.html PSK]&lt;br /&gt;
| Unreal Tournament 2003 (Unreal Engine 2)&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
| 2002&lt;br /&gt;
| Bones with vertex weights&lt;br /&gt;
|&lt;br /&gt;
* Maya&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 3ds Max&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SoftImage&lt;br /&gt;
|-&lt;br /&gt;
| MDC&lt;br /&gt;
| Wolfenstein: Enemy Territory&lt;br /&gt;
| 2003&lt;br /&gt;
| Unsure&lt;br /&gt;
| Unsure&lt;br /&gt;
|-&lt;br /&gt;
| MD5&lt;br /&gt;
| Doom 3&lt;br /&gt;
| 2004&lt;br /&gt;
| Bones with vertex weights&lt;br /&gt;
|&lt;br /&gt;
* Maya&lt;br /&gt;
* 3ds Max&lt;br /&gt;
* Blender 2.4 or newer&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
# Actually, America's Army 1.0 was the first title to be released using this format, as it used Unreal Engine 2 as well; it was released in June of that year, and Unreal Tournament 2003 in October.&lt;br /&gt;
# With the [http://udn.epicgames.com/Two/ActorX.html ActorX plugin].&lt;br /&gt;
# With a plugin provided by [http://udn.epicgames.com/Two/ActorX.html#XSI%20Exporter%20Plugins SoftImage].&lt;br /&gt;
&lt;br /&gt;
However, we recommend that you use the MD5 format at this time.&lt;br /&gt;
&lt;br /&gt;
Support for the IQM format has been planned, but it is unlikely that it will be added any time in the future.&lt;br /&gt;
&lt;br /&gt;
Note that mappers may use other formats for static models, such as the ASE ('''A'''SCII '''S'''cene '''E'''xport, not to be confused with Adobe's .ase format) and Wavefront Obj formats. A complete listing is available on the [[Mapping#Models|mapping]] page.&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Exporting_models&amp;diff=2139</id>
		<title>Tutorials/Exporting models</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Exporting_models&amp;diff=2139"/>
		<updated>2013-10-11T21:24:36Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* MD5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Modeling]]&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
''Notice: This guide was written for the 2.6 series of Blender. Most of this guide should apply for other versions of Blender, but this is not guaranteed.''&lt;br /&gt;
&lt;br /&gt;
Getting a finished model out of Blender and into the game is a relatively involved process with a number of possible pitfalls. This guide aims to describe the process in as much detail as possible to assist users who have not done it before, or those who have exported models for other games and would like to know what (if anything) is different.&lt;br /&gt;
&lt;br /&gt;
If you would like to export from Maya, you may find the official [http://www.iddevnet.com/quake4/Animations id Software documentation] useful.&lt;br /&gt;
&lt;br /&gt;
At present, this guide primarily describes the process for exporting models to the MD5 format. While the engine supports both MD3 and MD5, the latter is preferred. The reasons for this are discussed [[#What_is_MD5?|below]].&lt;br /&gt;
&lt;br /&gt;
Before a model may be exported and used in-game, it must be adequately prepared: &amp;lt;!-- TODO: determine which of these are only applicable to the old exporter. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[#Limitations_of_the_engine|Engine limitations]] must be adhered to.&lt;br /&gt;
* The model must have a texture applied to it. This texture is not automagically applied to the model after it is exported and loaded in-game, this is only necessary to satisfy the MD5 exporter; that is, the game cannot read from the exported model the filename of the texture to use.&lt;br /&gt;
* The model must be a mesh and must have an armature modifier applied to it.&lt;br /&gt;
* The armature's bones all must have at least one keyframe.&lt;br /&gt;
&lt;br /&gt;
The actual process of exporting a model is straightforward:&lt;br /&gt;
&lt;br /&gt;
# After ensuring that the above requirements are met, the mesh itself is exported.&lt;br /&gt;
# If using the old exporter, each animation is exported separately. The new exporter adds support for [[#Batch_export_with_the_new_exporter|batch export]] of animations.&lt;br /&gt;
# A [[#Configuring_the_model|configuration file]] specifying data such as the bounding box size and vertical offset is written. This may include information that is specific to the particular type of model (i.e., buildable or player model).&lt;br /&gt;
# A [[#Writing_shaders|shader]] is written that determines how the model is textured in-game.&lt;br /&gt;
# Finally, after everything is properly named and configured, the files are [[Packaging_game_data|packaged]] and placed in the correct game data folder to allow it to be loaded in-game.&lt;br /&gt;
&lt;br /&gt;
==What is MD5?==&lt;br /&gt;
&lt;br /&gt;
MD5 is the model format created by id Software for Doom 3 which is also used by Unvanquished. It is an improvement over its predecessor, MD3, in that it uses bones to pose the model.&lt;br /&gt;
&lt;br /&gt;
{{Note|header=What about MD3? IQM? PSK? ASE? Obj?|content=&lt;br /&gt;
{{SupportedModelFormats}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Advantages over MD3===&lt;br /&gt;
&lt;br /&gt;
* Unlike MD3, MD5 is bone-based, meaning that instead of storing an entire mesh for each frame of animation, there is only one mesh file. This single mesh file is deformed using a vertex shader.&lt;br /&gt;
* Because there is only one mesh, only one VBO (vertex buffer object) needs to be created for each MD5 model. The deformation is performed entirely on the GPU, so it is (theoretically) faster than MD3, and uses less memory.&lt;br /&gt;
* Because the format is in plain-text, it can be easily verified for sanity (i.e., to ensure that it was exported correctly and not corrupted in some way).&lt;br /&gt;
&lt;br /&gt;
===Disadvantages over MD3===&lt;br /&gt;
&lt;br /&gt;
* Some forms of motion are more difficult to achieve; certain animation techniques (such as lattices) are not usable.&lt;br /&gt;
* Because the format is in plain-text, it takes up more space than it needs to, though this is negligible and a MD5 model will typically be smaller than the same model in MD3 format as less data is used per each frame of animation with MD5 as compared to MD3.&lt;br /&gt;
&lt;br /&gt;
===Limitations of the engine===&lt;br /&gt;
&lt;br /&gt;
The engine places certain limitations on the fidelity of your models when using the MD5 format. These are:&lt;br /&gt;
&lt;br /&gt;
* There may not be more than 128 bones. (Note: this was increased from 64.)&lt;br /&gt;
* There may not be more than 100,000 vertices.&lt;br /&gt;
* There may not be more than 10,000 triangles.&lt;br /&gt;
* No vertex may belong to more than four vertex groups (i.e., one vertex may not be controlled by more than four bones). An error message will be displayed in-game if this requirement is not met. A [[#.22R_LoadMD5:_vertex_.25i_requires_more_than_.25i_weights_on_surface_.28.25i.29_in_model_.27.25s.27.22|script]] may be used before exporting to check that this limitation is not exceeded.&lt;br /&gt;
&lt;br /&gt;
{{Note|header=Developer Note|content=The limitation on vertex groups is a hard-coded limitation of the vertex shader ({{SourceFile|main/glsl/vertexSkinning_vp.glsl}}) that deforms the base mesh.}}&lt;br /&gt;
&lt;br /&gt;
===Limitations of the format===&lt;br /&gt;
&lt;br /&gt;
The MD5 format only supports bones. You may not&lt;br /&gt;
&lt;br /&gt;
* Use lattices or any other means of deformation.&lt;br /&gt;
* Scale bones.&lt;br /&gt;
* Use keyframes on anything other than bone poses. You may, however, set keyframes on bone constraint influences or anything else that would affect a bone's position or rotation.&lt;br /&gt;
&lt;br /&gt;
Note that you do not have to have a parent/child relationship between bones. In fact, in some instances, avoiding a parent/child relationship is necessary to achieve certain effects, such as moving bones around.&lt;br /&gt;
&lt;br /&gt;
==Acquiring and installing the exporter==&lt;br /&gt;
&lt;br /&gt;
===MD3===&lt;br /&gt;
&lt;br /&gt;
If for some reason you are interested in the MD3 exporter, it is available from [http://sourceforge.net/projects/md3exporter/ SourceForge].&lt;br /&gt;
&lt;br /&gt;
===MD5===&lt;br /&gt;
&lt;br /&gt;
====Old exporter====&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
You can download the exporter from [http://www.katsbits.com/smforum/index.php?topic=178.0 this thread on katsbits.com]. Installation instructions are in the thread.&lt;br /&gt;
&lt;br /&gt;
====New exporter====&lt;br /&gt;
&lt;br /&gt;
As of 15 May 2012, there is another [http://sourceforge.net/projects/blenderbitsbobs/ MD5 exporter available for Blender 2.63+] ([http://www.katsbits.com/smforum/index.php?topic=404.0 discussion on katsbits]). This has been found to be superior to the old exporter. Note that portions of this guide have not yet been updated to reflect the differences in the new exporter.&lt;br /&gt;
&lt;br /&gt;
We have [http://sourceforge.net/u/dsalt/blenderbitsbobs/ a patched version] which allows each mesh objects to have a custom property, &amp;lt;var&amp;gt;q3tex&amp;lt;/var&amp;gt;, which contains the name of a shader. This is output in the ‘shader’ line for that mesh in the md5mesh file.&lt;br /&gt;
&lt;br /&gt;
==Exporting the mesh==&lt;br /&gt;
&lt;br /&gt;
===MD5===&lt;br /&gt;
&lt;br /&gt;
Note that for buildables and weapons, the filename of the exported mesh is dictated by the corresponding [[#Configuring_the_model|configuration file]]. All player models, however, are hardcoded to look for &amp;lt;code&amp;gt;body.md5mesh&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Old exporter====&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
# Select the armature and the mesh. The order in which you select the two does not matter.&lt;br /&gt;
# Click File &amp;amp;rarr; Export &amp;amp;rarr; Quake&amp;amp;nbsp;Model&amp;amp;nbsp;5&amp;amp;nbsp;(.md5)&lt;br /&gt;
# On the left shelf that appears in the file prompt, change the Exports combo box to &amp;quot;Mesh only.&amp;quot; Don't worry about the scale or name fields.&lt;br /&gt;
# Click &amp;quot;Export MD5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once this has been completed, you must manually edit the mesh file (the one with a &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt; extension) to specify the correct shader to use.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- snip ---&lt;br /&gt;
mesh {&lt;br /&gt;
	shader &amp;quot;models/buildables/medistat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	numverts 4&lt;br /&gt;
	vert 0 ( 1.000000 0.000000 ) 0 1&lt;br /&gt;
	vert 1 ( 0.000000 0.000000 ) 1 1&lt;br /&gt;
--- snip ---&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;models/buildables/medistat&amp;lt;/code&amp;gt; is '''not''' a file path to a shader; it is the name (again, not filename) of the shader to use. That is, a shader with the matching name will be used for this model.&lt;br /&gt;
&lt;br /&gt;
To avoid having to do this every time you export the mesh, set the name of the material applied to the object in Blender to the same as you edited the md5mesh.&lt;br /&gt;
&lt;br /&gt;
====New exporter====&lt;br /&gt;
&lt;br /&gt;
* Select the mesh to export.&lt;br /&gt;
* Click File &amp;amp;rarr; Export &amp;amp;rarr; MD5 Mesh (.md5mesh).&lt;br /&gt;
* Specify the output filename in the dialog, and click &amp;quot;Export MD5MESH&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The exported model is not ready to be used in-game just yet; it must be manually edited. Open the exported &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt; file in a text editor, and manually delete the top three lines of the file (highlighted in red below):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#f00;&amp;quot;&amp;gt;// Parameters used during export:&lt;br /&gt;
 //   Reorient: True&lt;br /&gt;
 //   Scale: 1.0&amp;lt;/span&amp;gt;&lt;br /&gt;
 MD5Version 10&lt;br /&gt;
 commandline &amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 numJoints 4&lt;br /&gt;
 numMeshes 1&lt;br /&gt;
 &lt;br /&gt;
 joints {&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;remainder of file omitted for brevity&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to save the file when you are done. You will also have to do this for each animation file that you export.&lt;br /&gt;
&lt;br /&gt;
If you do not want to have to do this each time, you can edit the exporter script. Open the &amp;lt;code&amp;gt;export_md5.py&amp;lt;/code&amp;gt; script in the &amp;lt;code&amp;gt;io_scene_md5&amp;lt;/code&amp;gt; folder where you installed the script, at around line 30, edit this code:&lt;br /&gt;
&lt;br /&gt;
 def record_parameters(correctionMatrix):&lt;br /&gt;
     return [&lt;br /&gt;
     &amp;quot;// Parameters used during export:\n&amp;quot;,&lt;br /&gt;
     &amp;quot;//   Reorient: {}\n&amp;quot;.format(bool(correctionMatrix.to_euler()[2])),&lt;br /&gt;
     &amp;quot;//   Scale: {}\n&amp;quot;.format(correctionMatrix.decompose()[2][0])]&lt;br /&gt;
&lt;br /&gt;
to look like this:&lt;br /&gt;
&lt;br /&gt;
 def record_parameters(correctionMatrix):&lt;br /&gt;
     return []&lt;br /&gt;
&lt;br /&gt;
If you are comfortable with applying patches, you may use this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -27,10 +27,7 @@&lt;br /&gt;
     return pairs&lt;br /&gt;
 &lt;br /&gt;
 def record_parameters(correctionMatrix):&lt;br /&gt;
-    return [&lt;br /&gt;
-    &amp;quot;// Parameters used during export:\n&amp;quot;,&lt;br /&gt;
-    &amp;quot;//   Reorient: {}\n&amp;quot;.format(bool(correctionMatrix.to_euler()[2])),&lt;br /&gt;
-    &amp;quot;//   Scale: {}\n&amp;quot;.format(correctionMatrix.decompose()[2][0])]&lt;br /&gt;
+    return []&lt;br /&gt;
 &lt;br /&gt;
 def define_components(obj, bm, bones, correctionMatrix):&lt;br /&gt;
     scaleFactor = correctionMatrix.to_scale()[0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you will also have to manually set the shader as with the [[#Old_exporter_2|old exporter]].&lt;br /&gt;
&lt;br /&gt;
==Exporting the animations==&lt;br /&gt;
&lt;br /&gt;
===MD3===&lt;br /&gt;
&lt;br /&gt;
Exported MD3 animations require a configuration file that specifies which frames of the animation correspond to which actions the game will display.&lt;br /&gt;
&lt;br /&gt;
This varies slightly by the type (i.e., weapon or buildable) of model.&lt;br /&gt;
&lt;br /&gt;
===MD5===&lt;br /&gt;
&lt;br /&gt;
====Old exporter====&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
The procedure for exporting animations is the same as for exporting the mesh with regard to selecting the mesh and the armature. Before using the exporter, however, you must be certain to set the start and end frames to encompass only the particular animation that you wish to export; each animation must be exported separately, unless the [[#New_exporter|new exporter]] is used, which adds a [[#Batch_export_with_the_new_exporter|batch export]] feature.&lt;br /&gt;
&lt;br /&gt;
[[Image:Md5_export_timeline.png|frame|center|The timeline view in Blender, which is used to set which frames of animation to export. Here, only one frame of animation (frame 180) is being exported.]]&lt;br /&gt;
&lt;br /&gt;
At the export file prompt, choose &amp;quot;Anim only.&amp;quot; from the &amp;quot;Exports&amp;quot; combo box. Enter as the filename the name of the particular animation that you are exporting; the correct names to use are given below.&lt;br /&gt;
&lt;br /&gt;
====Batch export with the new exporter====&lt;br /&gt;
&lt;br /&gt;
The [[Exporting Models#Batch export|new exporter]] now supports batch export of models.&lt;br /&gt;
&lt;br /&gt;
To make use of this feature, you must set [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Markers frame markers] denoting the start and end of each animation. The name of frame markers denoting the start of an animation must end in &amp;quot;_start&amp;quot; and markers denoting the end of an animation must end in &amp;quot;_end&amp;quot;; for example, frame markers denoting the start and end of a buildable's construct animation would be &amp;quot;construct_start&amp;quot; and &amp;quot;construct_end&amp;quot;. Avoid using frame markers with duplicate names, as which one will be used by the exporter is not predictable. Note that frame markers may overlap however you please; this is useful when two animations share a frame or you would like to automate the process of exporting the same few frames of animation as several different animation files (e.g., for testing purposes).&lt;br /&gt;
&lt;br /&gt;
All operations in modifying frame markers are performed in the [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Timeline timeline]:&lt;br /&gt;
* To create a frame marker, move the timeline to the desired frame and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;M&amp;lt;/span&amp;gt;.&lt;br /&gt;
* To select a frame marker, click with the right mouse button.&lt;br /&gt;
* To move a frame marker, select it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;G&amp;lt;/span&amp;gt;.&lt;br /&gt;
* To delete a frame marker, select it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;.&lt;br /&gt;
* To rename a frame marker, select it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;Ctrl&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;M&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The actual exportation process becomes much simpler:&lt;br /&gt;
&lt;br /&gt;
# Click File &amp;amp;rarr; Export &amp;amp;rarr; MD5 (batch export).&lt;br /&gt;
# Specify the filename of the &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt; to export.&lt;br /&gt;
&lt;br /&gt;
==Animation names==&lt;br /&gt;
&lt;br /&gt;
The filenames for each exported animation must be what the engine expects for it to be able to load them, and vary depending on the format (MD3 or MD5) and type (e.g., buildable, weapon, or player) of model being exported.&lt;br /&gt;
&lt;br /&gt;
===Weapons===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
See the &amp;lt;code&amp;gt;CG_ParseWeaponFile()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Weapon state constants are enumerated in the &amp;lt;code&amp;gt;weaponstate_t&amp;lt;/code&amp;gt; enum in {{SourceFile|src/gamelogic/game/bg_public.h}}&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{{!}} class{{=}}&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
! Constant&lt;br /&gt;
! Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_READY&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon at its idle state, ready to fire.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_RAISING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being raised. It may not be fired in this state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_DROPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being put away. It may not be fired in this state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_FIRING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being fired.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_RELOADING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being reloaded.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_NEEDS_RESET&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The Lucifer Cannon in its overcharged state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
Control of weapon states is done by &amp;lt;code&amp;gt;PM_Weapon()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PM_BeginWeaponChange()&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;PM_FinishWeaponChange()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/game/bg_pmove.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Note that for both MD3 and MD5 models, there may be separate models for first- and third-person views. Please see &amp;quot;[[#Weapons|Configuring the model]]&amp;quot; for more information regarding how to specify separate models.&lt;br /&gt;
&lt;br /&gt;
====MD3====&lt;br /&gt;
&lt;br /&gt;
MD3 does not use separate files for separate animations. Instead, a configuration file specifies what frames of a single MD3 animation are used for each in-game animation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Find out how barrel spin is handled by the engine. Is it animated into the barrel model or is it done procedurally?''&lt;br /&gt;
&lt;br /&gt;
In addition to the base weapon mesh, there may be as many as three additional MD3 meshes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Search string&lt;br /&gt;
! Tag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_flash.md3&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;tag_flash&amp;lt;/code&amp;gt;&lt;br /&gt;
| The weapon's muzzle flash.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_barrel.md3&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;tag_barrel&amp;lt;/code&amp;gt;&lt;br /&gt;
| The weapon's barrel.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_hand.md3&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| Hands holding the weapon model. Note: this is not used for third person models.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For non-programmers, the &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt; string is replaced by the parameter given to the &amp;lt;code&amp;gt;weaponModel&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;weaponModel3rdPerson&amp;lt;/code&amp;gt; keyword.&lt;br /&gt;
&lt;br /&gt;
The tag &amp;lt;code&amp;gt;tag_weapon&amp;lt;/code&amp;gt; is used on the main weapon model to align the third person weapon model to the third person player model.&lt;br /&gt;
&lt;br /&gt;
====MD5====&lt;br /&gt;
&lt;br /&gt;
Note that each animation filename must have the &amp;lt;code&amp;gt;.md5anim&amp;lt;/code&amp;gt; extension.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Animation name&lt;br /&gt;
! Engine constant&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_IDLE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Animation played when a weapon is not being fired&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_lower&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_DROP&amp;lt;/code&amp;gt;&lt;br /&gt;
| Animation played when a weapon is being put away&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_reload&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_RELOAD&amp;lt;/code&amp;gt;&lt;br /&gt;
| Weapon reload animation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_raise&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_RAISE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Animation played when a weapon is switched to&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_fire&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Default attack animation&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;7&amp;quot; | Usage of these is highly dependent on the player class. The marauder, for example, may randomly use one of these instead of &amp;lt;code&amp;gt;WANIM_ATTACK1&amp;lt;/code&amp;gt;.&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK4&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK7&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK8&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
# See &amp;lt;code&amp;gt;PM_Weapon()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Buildables===&lt;br /&gt;
&lt;br /&gt;
====MD3====&lt;br /&gt;
&lt;br /&gt;
As always, MD3 buildable models require a separate configuration file that specifies which frames of the animation correspond to actions displayed by the game.&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
This file is parsed by &amp;lt;code&amp;gt;CG_ParseBuildableAnimationFile()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/cgame/cg_buildable.c}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Each line in the configuration file corresponds to a single animation. Those animations are in the same order as in the table for MD5 animation names below.&lt;br /&gt;
&lt;br /&gt;
The order that animations appear in the configuration file must match this order exactly. Animations may not be omitted.&lt;br /&gt;
&lt;br /&gt;
The syntax is as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;var&amp;gt;firstFrame&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;numFrames&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;loopFrames&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;fps&amp;lt;/var&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;var&amp;gt;firstFrame&amp;lt;/var&amp;gt; &amp;amp;mdash; Specifies the initial frame of the animation.&lt;br /&gt;
* &amp;lt;var&amp;gt;numFrames&amp;lt;/var&amp;gt; &amp;amp;mdash; Specifies the number of frames following the initial frame that comprise that animation.&lt;br /&gt;
* &amp;lt;var&amp;gt;loopFrames&amp;lt;/var&amp;gt; &amp;amp;mdash; (''Optional'')&lt;br /&gt;
* &amp;lt;var&amp;gt;fps&amp;lt;/var&amp;gt; &amp;amp;mdash; (''Optional, may only be used if loopFrames is specified'') Specifies the framerate of the animation. If not specified, defaults to 1.&lt;br /&gt;
&lt;br /&gt;
C and C++ style comments (i.e., &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/* */&amp;lt;/code&amp;gt;) are permitted past the last argument.&lt;br /&gt;
&lt;br /&gt;
====MD5====&lt;br /&gt;
&lt;br /&gt;
As with weapon animations, each animation filename must have the &amp;lt;code&amp;gt;.md5anim&amp;lt;/code&amp;gt; extension.&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
These animation constants are in the &amp;lt;code&amp;gt;buildableAnimNumber_t&amp;lt;/code&amp;gt; enumeration in {{SourceFile|src/gamelogic/game/bg_public.c}}. Animations are set using the &amp;lt;code&amp;gt;G_SetIdleBuildableAnim()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;G_SetBuildableAnim()&amp;lt;/code&amp;gt; functions. All animations are in entity behavior functions in {{SourceFile|src/gamelogic/game/g_buildable.c}}.&lt;br /&gt;
&lt;br /&gt;
Sounds for animations are enumerated in the &amp;lt;code&amp;gt;cg_buildableSoundNames&amp;lt;/code&amp;gt; array in {{SourceFile|src/gamelogic/game/bg_public.h}}. Which animations are loaded is defined in &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Items in this table are in the same order as in enum buildableAnimNumber_t --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Animation name&lt;br /&gt;
! Engine constant&lt;br /&gt;
! Used by&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_IDLE1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Idle animation, shown when the buildable is not doing anything (and in the case of human buildables, when they are also powered). Used in place of other animations if they are missing unless otherwise noted.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_IDLE2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Medistation, telenode, barricade, egg&lt;br /&gt;
| ‘Active’ idle state, e.g. while the medistation is currently healing (and not transitioning into or out of the healing state).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;powerdown&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_POWERDOWN&amp;lt;/code&amp;gt;&lt;br /&gt;
| Human buildables, (barricade)&lt;br /&gt;
| Animation played when a buildable has just lost power.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle_unpowered&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_IDLE_UNPOWERED&amp;lt;/code&amp;gt;&lt;br /&gt;
| Human buildables, (barricade)&lt;br /&gt;
| Idle animation played when a buildable has no power. ''(Formerly &amp;lt;code&amp;gt;idle3&amp;lt;/code&amp;gt;.)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;construct&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_CONSTRUCT1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Construction animation, shown when the buildable is being built.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;construct2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_CONSTRUCT2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Medistation, (telenode), (egg)&lt;br /&gt;
| Animation played when returning to the primary idle state, e.g. medistation transitioning from healing.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_ATTACK1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All (except tesla)&lt;br /&gt;
| Animation played when a buidlable is attacking or transitioning to its ‘active’ idle state. For the barricade, the animation when it is shrinking.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| (Medistation), (telenode), barricade, (egg)&lt;br /&gt;
| Unshrink animation for the barricade. (Falls back on &amp;lt;code&amp;gt;BANIM_ATTACK1&amp;lt;/code&amp;gt;.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;spawn&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_SPAWN1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Telenode, Egg&lt;br /&gt;
| Animation for when when someone is spawning from a telenode or egg.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;spawn2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_SPAWN2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Currently unused.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_PAIN1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Default pain animation, used when a buildable is damaged.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_PAIN2&amp;lt;/code&amp;gt;&lt;br /&gt;
| (Medistation), barricade, (egg)&lt;br /&gt;
| Pain animation used for the barricade when it is damaged and shrunk. (Falls back on &amp;lt;code&amp;gt;BANIM_PAIN1&amp;lt;/code&amp;gt;.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destroy&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_DESTROY1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Played when a buildable is killed or destroyed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destroy_unpowered&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_DESTROY_UNPOWERED&amp;lt;/code&amp;gt;&lt;br /&gt;
| All which can be unpowered&lt;br /&gt;
| Played when an unpowered buildable is killed or destroyed. (Falls back on &amp;lt;code&amp;gt;BANIM_DESTROY1&amp;lt;/code&amp;gt;.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destroyed&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_DESTROYED&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| The animation played after the buildable's destroy animation finishes playing but before it blows up; essentially, the buildable in a dead state. For the barricade, this is the same animation as for its shrunk state.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Note: buildables whose names are in (parentheses) may not actually use the animation, but it is possible that at some point they will. However, the animations are loaded.''&lt;br /&gt;
&lt;br /&gt;
===Player models===&lt;br /&gt;
&lt;br /&gt;
====MD5====&lt;br /&gt;
&lt;br /&gt;
As with weapon animations, each animation filename must have the &amp;lt;code&amp;gt;.md5anim&amp;lt;/code&amp;gt; extension.&lt;br /&gt;
&lt;br /&gt;
Items in italics need to be double-checked.&lt;br /&gt;
&lt;br /&gt;
Note that at present, some of these strings do not match the constants.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Animation name&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Engine constant&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Humans?&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Aliens?&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! Assumed Correct&lt;br /&gt;
! Actual (Humans)&lt;br /&gt;
! Actual (Aliens)&lt;br /&gt;
! Humans&lt;br /&gt;
! Aliens&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_ATTACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_ATTACK1&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack2&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack3&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack3&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack3&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_ATTACK3&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;charge&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;charge&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_CHARGE&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Tyrant charge animation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_IDLECR&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_backward&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_forward&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_BACKCR&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_forward&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_forward&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_WALKCR&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;die&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;die&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;die&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BOTH_DEATH1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_DEATH1&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;gesture&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;gesture&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;gesture&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_GESTURE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_GESTURE&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_IDLE&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| Human idle animation. It seems as though NSPA_STAND (&amp;quot;stand&amp;quot;) is used as the idle animation for aliens.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_JUMP&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_JUMP&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;jump_back&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump_back&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_JUMPB&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_JUMPBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Evidently although humans have a separate constant for jumping backwards, they use the same animation file as for jumping forwards.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_LAND&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_LAND&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;land_back&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land_back&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_LANDB&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_LANDBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Like with jumping, humans evidently use the same animation for both LEGS_LAND and LEGS_LANDB.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain1&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;pain1&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_PAIN1&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Humans evidently do not have a pain animation?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain2&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;pain2&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_PAIN2&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run_backwards&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; (?)&lt;br /&gt;
| &amp;lt;code&amp;gt;run_backwards&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_BACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUNBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Note: Not sure if this is correct for the humans&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run_left&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;run_left&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUNLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run_right&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;run_right&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUNLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;stand&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;stand&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_STAND&amp;lt;/code&amp;gt;&lt;br /&gt;
| ''No''&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| TORSO_STAND is in the code, but I didn't see an animation loaded for the humans&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;stand2&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_STAND2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| ''No''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;step&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;step&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_TURN&amp;lt;/code&amp;gt;?&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| ''No''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;swim&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;swim&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;swim&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_SWIM&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_SWIM&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;turn&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;step&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_TURN&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_WALK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_backwards&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_backwards&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_BACKWALK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALKBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_left&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_left&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALKLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_right&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_right&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALKLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- other animation constants seen that aren't in the table:&lt;br /&gt;
LEGS_WALKCR_BACK&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Writing shaders==&lt;br /&gt;
&lt;br /&gt;
As was implied before, the texture(s) used by a model are not stored in the md5mesh or md5anim files; they are specified by a separate shader file that is placed in the &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
Shaders are a very large topic and are outside the scope of this guide. The [http://tremap.xtr3m.net/__Games/Xreal/Manual_Shader_1/ShaderManual.htm XReal shader guide] explains shaders in detail. However, the following shader should do for most purposes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
models/buildables/trapper&lt;br /&gt;
{&lt;br /&gt;
	diffuseMap models/buildables/trapper/trapper.tga&lt;br /&gt;
	bumpMap models/buildables/trapper/trapper_n.tga&lt;br /&gt;
	specularMap models/buildables/trapper/trapper_s.tga&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do take note that&lt;br /&gt;
* &amp;lt;code&amp;gt;models/buildables/trapper&amp;lt;/code&amp;gt; is NOT a path, it is merely a string that matches the shader specified by the &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt;, and&lt;br /&gt;
* &amp;lt;code&amp;gt;bumpMap&amp;lt;/code&amp;gt; actually refers to a normal map.&lt;br /&gt;
&lt;br /&gt;
==Configuring the model==&lt;br /&gt;
&lt;br /&gt;
Aside from the textures used by a model, the scale, vertical position, and bounding box size of the model must be specified. This is done with a configuration file. These were formerly placed in &amp;lt;code&amp;gt;overrides/buildables/&amp;lt;/code&amp;gt; (for buildables) or &amp;lt;code&amp;gt;overrides/classes/&amp;lt;/code&amp;gt; (for player models), but are now placed in &amp;lt;code&amp;gt;configs/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Player models===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
Reading the configuration file for player models is handled by the &amp;lt;code&amp;gt;CG_ParseCharacterFile()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/cgame/cg_players.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The configuration file may use the following keywords:&lt;br /&gt;
&lt;br /&gt;
''Note: this list is incomplete''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;headoffset &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;z&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;sex &amp;lt;var&amp;gt;gender&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sets the gender of the model. Options are &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; for female or &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; for neuter. Any other character is interpreted as male.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;fixedlegs&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;fixedtorso&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;firstTorsoBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;footsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;flesh&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;metal&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;splash&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;lastTorsoBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;torsoControlBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;neckControlBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;modelScale&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
name        &amp;quot;Basilisk&amp;quot;&lt;br /&gt;
model       level1&lt;br /&gt;
modelScale  1.0&lt;br /&gt;
skin        default&lt;br /&gt;
shadowScale 1.0&lt;br /&gt;
hud         alien_general_hud&lt;br /&gt;
mins        -18 -18 -18&lt;br /&gt;
maxs        18 18 18&lt;br /&gt;
crouchMaxs  18 18 18&lt;br /&gt;
deadMins    -18 -18 -4&lt;br /&gt;
deadMaxs    18 18 4&lt;br /&gt;
zOffset     0.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Weapons===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
Weapon configuration files are parsed with &amp;lt;code&amp;gt;CG_ParseWeaponConfig()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The configuration file may use the following keywords:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;weaponModel &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;weaponModel3rdPerson &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;idleSound &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;icon &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;mdash; The relative path to the icon that is displayed in the HUD for that weapon.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;crosshair &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;disableIn3rdPerson&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After those keywords, one of the following keywords must be used, followed by an opening curly brace (&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;), more commands, and a final closing curly brace (&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;primary&amp;lt;/code&amp;gt; (engine constant: &amp;lt;code&amp;gt;WPM_PRIMARY&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;secondary&amp;lt;/code&amp;gt; (engine constant: &amp;lt;code&amp;gt;WPM_SECONDARY&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;tertiary&amp;lt;/code&amp;gt; (engine constant: &amp;lt;code&amp;gt;WPM_TERTIARY&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The configuration between the curly braces is handled by &amp;lt;code&amp;gt;CG_ParseWeaponModeSection&amp;lt;/code&amp;gt;, in the same file. It accepts the following keywords:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileModel &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileSprite &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;shader&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;amp;mdash; The size of the missile sprite. If this value is negative, it is made zero.&lt;br /&gt;
* &amp;lt;var&amp;gt;shader&amp;lt;/var&amp;gt; &amp;amp;mdash; The shader describing the missile sprite.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileRotates&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileAnimates &amp;lt;var&amp;gt;startFrame&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;numFrames&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;frameRate&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;looping&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileParticleSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileTrailSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;muzzleParticleSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactParticleSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactMark &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;shader&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactSound &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;amp;mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; &amp;amp;mdash; The file path of the sound file to use.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactFleshSound &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;amp;mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; &amp;amp;mdash; The file path of the sound file to use.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;alwaysImpact&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;flashDLightColor &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Specifies the color of the muzzle flash &amp;lt;!-- didn't actually double check this --&amp;gt; dynamic lighting.&amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;amp;mdash; The red color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;amp;mdash; The green color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt; &amp;amp;mdash; The blue color component as a floating point number in the range [0,1].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;continuousFlash&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileDlightColor &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;amp;mdash; The red color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;amp;mdash; The green color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt; &amp;amp;mdash; The blue color component as a floating point number in the range [0,1].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileDlight &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;amp;mdash; If this value is negative, it is made zero.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;firingSound &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileSound &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;flashSound &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;amp;mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; &amp;amp;mdash; The file path of the sound file to use.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example, this is the configuration for the chaingun (&amp;lt;code&amp;gt;models/weapons/chaingun/weapon.cfg&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
weaponModel       models/weapons/chaingun/chaingun.md3&lt;br /&gt;
&lt;br /&gt;
icon              icons/iconw_chaingun&lt;br /&gt;
crosshair         48 gfx/2d/crosshair-chaingun_s&lt;br /&gt;
&lt;br /&gt;
primary&lt;br /&gt;
{&lt;br /&gt;
  flashDlightColor      1.0 1.0 0.0&lt;br /&gt;
  flashSound            0 models/weapons/chaingun/flash0.wav&lt;br /&gt;
  flashSound            1 models/weapons/chaingun/flash1.wav&lt;br /&gt;
  flashSound            2 models/weapons/chaingun/flash2.wav&lt;br /&gt;
  flashSound            3 models/weapons/chaingun/flash3.wav&lt;br /&gt;
&lt;br /&gt;
  impactMark            8 gfx/marks/bullet_mrk&lt;br /&gt;
&lt;br /&gt;
  impactSound           0 models/weapons/chaingun/impact0.wav&lt;br /&gt;
&lt;br /&gt;
  impactParticleSystem  models/weapons/rifle/impactPS&lt;br /&gt;
  muzzleParticleSystem  models/weapons/chaingun/muzzlePS&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buildables===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
Reading the configuration file for buildables is handled by the &amp;lt;code&amp;gt;BG_ParseBuildableFile()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/game/bg_misc.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The configuration file may use the following keywords:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;model &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; Some models may actually have several different model files (not sure why); this argument specifies which. Clamped to the range [0,3] (which should actually be [0, MAX_BUILDABLE_MODELS]), which means that you may use as many as four models per buildable. This is only used by the machine gun turret, which is composed of different parts.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; The file path where the model file is located. Note that for MD5 models, an extension of &amp;lt;code&amp;gt;.md3&amp;lt;/code&amp;gt; is still to be used; it will automatically be changed by the engine.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;modelScale &amp;lt;var&amp;gt;scale&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Scales the model linearly.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;mins &amp;lt;var&amp;gt;minX&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minY&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minZ&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The coordinates passed to this and &amp;lt;code&amp;gt;maxs&amp;lt;/code&amp;gt; define the bounding box for the model that is used for collision. The bounding box is always aligned to the global coordinate axes regardless of the orientation of the model, which is something to keep in mind when defining these values. You will likely have to debug these values by enabling drawing the bounding boxes. Load a map in developer mode with &amp;lt;code&amp;gt;\devmap&amp;lt;/code&amp;gt; and set &amp;lt;code&amp;gt;\cg_drawBBOX&amp;lt;/code&amp;gt; to 1. The three arguments combined form the coordinate of one corner of the bounding box, and &amp;lt;code&amp;gt;maxs&amp;lt;/code&amp;gt; the opposite corner.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;maxs &amp;lt;var&amp;gt;minX&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minY&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minZ&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Defines the opposite corner of the AABB. (See above.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;zOffset &amp;lt;var&amp;gt;offset&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Sets the vertical offset of the model; in other words, how far off the ground it is.&amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;offset&amp;lt;/var&amp;gt; The offset as a floating point (decimal) value.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
model       0 models/buildables/trapper/trapper.md3&lt;br /&gt;
modelScale  0.8&lt;br /&gt;
mins        -15 -15 -15&lt;br /&gt;
maxs        15 15 15&lt;br /&gt;
zOffset     -15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that at present, you do not have to change the filename extension of the model to match what it actually is; that is, if the model is actually an md5, you may leave the extension as &amp;quot;.md3&amp;quot; and not &amp;quot;.md5mesh&amp;quot; or whatever.&lt;br /&gt;
&lt;br /&gt;
==Directory overview==&lt;br /&gt;
&lt;br /&gt;
This section provides an overview of the subset of the directory structure used by models; directories used for other purposes have been omitted.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;armor/&amp;lt;/code&amp;gt; Location of configurations for the three armor types (i.e., light, helmet, and battlesuit). You should not have to edit these.&lt;br /&gt;
* &amp;lt;code&amp;gt;configs/&amp;lt;/code&amp;gt; Location of configuration files for various models.&lt;br /&gt;
** &amp;lt;code&amp;gt;buildables/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;gfx/&amp;lt;/code&amp;gt; Location of various 2d effect textures, such as those used for weapons.&lt;br /&gt;
** ''Subdirectories omitted for brevity''&lt;br /&gt;
* &amp;lt;code&amp;gt;models/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ammo/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;tesla/&amp;lt;/code&amp;gt; Contains a single image used for the tesla sparks. Not sure why it's located here.&lt;br /&gt;
** &amp;lt;code&amp;gt;buildables/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;acid_tube/&amp;lt;/code&amp;gt; Acid tube&lt;br /&gt;
*** &amp;lt;code&amp;gt;arm/&amp;lt;/code&amp;gt; Armory&lt;br /&gt;
*** &amp;lt;code&amp;gt;barricade/&amp;lt;/code&amp;gt; Barricade&lt;br /&gt;
*** &amp;lt;code&amp;gt;booster/&amp;lt;/code&amp;gt; Booster&lt;br /&gt;
*** &amp;lt;code&amp;gt;dcc/&amp;lt;/code&amp;gt; Defense Computer&lt;br /&gt;
*** &amp;lt;code&amp;gt;eggpod/&amp;lt;/code&amp;gt; Egg&lt;br /&gt;
*** &amp;lt;code&amp;gt;hive/&amp;lt;/code&amp;gt; Hive&lt;br /&gt;
*** &amp;lt;code&amp;gt;hovel/&amp;lt;/code&amp;gt; Hovel&lt;br /&gt;
*** &amp;lt;code&amp;gt;medistat/&amp;lt;/code&amp;gt; Medistation&lt;br /&gt;
*** &amp;lt;code&amp;gt;mgturret/&amp;lt;/code&amp;gt; Machinegun Turret&lt;br /&gt;
*** &amp;lt;code&amp;gt;overmind/&amp;lt;/code&amp;gt; Overmind&lt;br /&gt;
*** &amp;lt;code&amp;gt;reactor/&amp;lt;/code&amp;gt; Reactor&lt;br /&gt;
*** &amp;lt;code&amp;gt;repeater/&amp;lt;/code&amp;gt; Repeater&lt;br /&gt;
*** &amp;lt;code&amp;gt;telenode/&amp;lt;/code&amp;gt; Telenode&lt;br /&gt;
*** &amp;lt;code&amp;gt;tesla/&amp;lt;/code&amp;gt; Tesla generator&lt;br /&gt;
*** &amp;lt;code&amp;gt;trapper/&amp;lt;/code&amp;gt; Trapper&lt;br /&gt;
** &amp;lt;code&amp;gt;players/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;builder/&amp;lt;/code&amp;gt; Human builder model.&lt;br /&gt;
*** &amp;lt;code&amp;gt;human_base/&amp;lt;/code&amp;gt; Unarmored human model. Also includes the jetpack and battery pack.&lt;br /&gt;
*** &amp;lt;code&amp;gt;human_bsuit/&amp;lt;/code&amp;gt; Battlesuit model.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level0/&amp;lt;/code&amp;gt; Dretch.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level1/&amp;lt;/code&amp;gt; Basilisk and advanced basilisk. (The advanced basilisk uses the same model as the regular dragoon, but a different texture.)&lt;br /&gt;
*** &amp;lt;code&amp;gt;level2/&amp;lt;/code&amp;gt; Marauder and advanced marauder. (Same as basilisk with regard to advanced model.)&lt;br /&gt;
*** &amp;lt;code&amp;gt;level3/&amp;lt;/code&amp;gt; Dragoon and advanced dragoon. (Same as basilisk with regard to advanced model.)&lt;br /&gt;
*** &amp;lt;code&amp;gt;level4/&amp;lt;/code&amp;gt; Tyrant.&lt;br /&gt;
** &amp;lt;code&amp;gt;weapons/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;abuild/&amp;lt;/code&amp;gt; As there is no weapon model for the granger, the only thing in this directory is a config to hide the (nonexistant) weapon model in third person (a hack, I guess).&lt;br /&gt;
*** &amp;lt;code&amp;gt;abuildupg/&amp;lt;/code&amp;gt; Advanced granger weapon. Same as above, except the config file specifies sounds for the attack sounds (which are also located in this directory).&lt;br /&gt;
*** &amp;lt;code&amp;gt;ackit/&amp;lt;/code&amp;gt; Advanced construction kit.&lt;br /&gt;
*** &amp;lt;code&amp;gt;blaster/&amp;lt;/code&amp;gt; Blaster.&lt;br /&gt;
*** &amp;lt;code&amp;gt;chaingun/&amp;lt;/code&amp;gt; Chaingun.&lt;br /&gt;
*** &amp;lt;code&amp;gt;ckit/&amp;lt;/code&amp;gt; Construction kit.&lt;br /&gt;
*** &amp;lt;code&amp;gt;flamer/&amp;lt;/code&amp;gt; Flamethrower.&lt;br /&gt;
*** &amp;lt;code&amp;gt;grenade/&amp;lt;/code&amp;gt; Grenade.&lt;br /&gt;
*** &amp;lt;code&amp;gt;hive/&amp;lt;/code&amp;gt; Sprites, configuration file, and sound file for the hive.&lt;br /&gt;
*** &amp;lt;code&amp;gt;lcannon/&amp;lt;/code&amp;gt; Lucifer cannon.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level0/&amp;lt;/code&amp;gt; Dretch configuration and attack sound file.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level1/&amp;lt;/code&amp;gt; Basilisk configuration and attack sound files (hit and miss).&lt;br /&gt;
*** &amp;lt;code&amp;gt;level1upg/&amp;lt;/code&amp;gt; Advanced Basilisk configuration and added gas attack sound file.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level2/&amp;lt;/code&amp;gt; Marauder configuration and attack sound files (hit and miss).&lt;br /&gt;
*** &amp;lt;code&amp;gt;level2upg/&amp;lt;/code&amp;gt; Advanced Marauder configuration and added electric attack sound file.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level3/&amp;lt;/code&amp;gt; Dragoon configuration and attack sound files (hit, miss, and pounce).&lt;br /&gt;
*** &amp;lt;code&amp;gt;level3upg/&amp;lt;/code&amp;gt; Advanced Dragoon configuration and added barb sound files and model.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level4/&amp;lt;/code&amp;gt; Tyrant configuration and attack sound files (hit and miss).&lt;br /&gt;
*** &amp;lt;code&amp;gt;lgun/&amp;lt;/code&amp;gt; Lasgun&lt;br /&gt;
*** &amp;lt;code&amp;gt;lockblob/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;mdriver/&amp;lt;/code&amp;gt; Mass Driver&lt;br /&gt;
*** &amp;lt;code&amp;gt;mgturret/&amp;lt;/code&amp;gt; Machinegun turret '''''FIXME: why does this show up twice?'''''&lt;br /&gt;
*** &amp;lt;code&amp;gt;prifle/&amp;lt;/code&amp;gt; Plasma rifle&lt;br /&gt;
*** &amp;lt;code&amp;gt;psaw/&amp;lt;/code&amp;gt; Painsaw&lt;br /&gt;
*** &amp;lt;code&amp;gt;rifle/&amp;lt;/code&amp;gt; Rifle&lt;br /&gt;
*** &amp;lt;code&amp;gt;shells/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;shotgun/&amp;lt;/code&amp;gt; Shotgun&lt;br /&gt;
*** &amp;lt;code&amp;gt;teslagen/&amp;lt;/code&amp;gt; Tesla generator '''''FIXME: why does this show up twice?'''''&lt;br /&gt;
* &amp;lt;code&amp;gt;overrides/&amp;lt;/code&amp;gt; Depreciated directory for model configuration files. Use &amp;lt;code&amp;gt;configs/&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
** &amp;lt;code&amp;gt;buildables/&amp;lt;/code&amp;gt; Depreceated location for buildable model configs.&lt;br /&gt;
** &amp;lt;code&amp;gt;classes/&amp;lt;/code&amp;gt; Depreceated location for character model configs.&lt;br /&gt;
* &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt; Location for shaders.&lt;br /&gt;
&lt;br /&gt;
==Getting the model in game==&lt;br /&gt;
&lt;br /&gt;
There are two approaches to test your model in-game. The model and related files may be in actual folders, or the engine can load them from a &amp;lt;code&amp;gt;.pk3&amp;lt;/code&amp;gt; (package) file, which is really just a zip-compressed archive with the extension changed. The process for creating these archives is discussed on the [[packaging game data]] page.&lt;br /&gt;
&lt;br /&gt;
==Testing the model==&lt;br /&gt;
&lt;br /&gt;
Once you have the model exported, the shader and configuration written, and everything packaged into a .pk3 file and in place, you are ready to test.&lt;br /&gt;
&lt;br /&gt;
===Testing externally===&lt;br /&gt;
&lt;br /&gt;
Rather than testing the exported model in-game, you may also test the model with a stand-alone MD5 viewer. At present, there is a viewer for Windows available [http://www.katsbits.com/files/md5/modelviewer_0.93a.zip here].&lt;br /&gt;
&lt;br /&gt;
===Testing in game===&lt;br /&gt;
&lt;br /&gt;
See the [[testing]] page.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
===Old exporter===&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
====Error while exporting from Blender====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Md5_export_error_no_armature.png]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; | This error displays when the selected object does not have an armature modifier. Any object exported as an md5 needs bones, even if it is static. If you are unsure of how to create a static object with md5, just add an armature, set the playback start and end frame to 1, and add a location or rotation keyframe at frame 1.&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Md5_export_error_no_animation.png]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; | This error displays when there are no keyframes. Follow the abov instructions for exporting a static object with md5.&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Md5_export_error_no_material.png]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; | This error displays when the object does not have a material applied to it. This is required by the script, even though it really does not affect the exported result.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Appearance problems in-game===&lt;br /&gt;
&lt;br /&gt;
====All or part of the mesh appears to be sucked to the center====&lt;br /&gt;
&lt;br /&gt;
''Please note that as of 2012-02-27, the MD5 exporter does not work properly in several more recent versions of Blender. Use Blender 2.59 until this is fixed. See [http://www.katsbits.com/smforum/index.php?topic=167.msg2135#msg2135 the MD5 exporter thread] for more information.''&lt;br /&gt;
&lt;br /&gt;
This can happen for a number of reasons:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There are vertices without weights.&lt;br /&gt;
&amp;lt;p&amp;gt;''Solution'': apply weights to vertices that do not have them. If those verts are not to be animated, weight them to a bone that does not move.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You are using Blender 2.61 and you have bones that have animated positions.&lt;br /&gt;
&amp;lt;p&amp;gt;''Solution'': Use an earlier version of blender until this is fixed in the exporter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You are using Blender 2.62 and you have bones that are not located at the origin and do not have a parent or have animated positions.&lt;br /&gt;
&amp;lt;p&amp;gt;''Solution'': Again, use an earlier version of blender until this is fixed in the exporter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;R_LoadMD5: vertex %i requires more than %i weights on surface (%i) in model '%s'&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
This error is displayed in the console in game when a vertex belongs to too many groups.&lt;br /&gt;
&lt;br /&gt;
You can use this script to check your model for this before exporting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Copyright 2012 Nicholas De Cicco. &amp;lt;velociostrich@gmail.com&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
# you may not use this file except in compliance with the License.&lt;br /&gt;
# You may obtain a copy of the License at&lt;br /&gt;
#&lt;br /&gt;
#	http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
#&lt;br /&gt;
# Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
# distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
# See the License for the specific language governing permissions and&lt;br /&gt;
# limitations under the License.&lt;br /&gt;
&lt;br /&gt;
import bpy, math&lt;br /&gt;
from bpy.props import *&lt;br /&gt;
&lt;br /&gt;
MAX_GROUPS_PER_VERT = 4&lt;br /&gt;
&lt;br /&gt;
# Switch to object mode for vertex selection to work&lt;br /&gt;
bpy.ops.object.mode_set(mode='OBJECT')&lt;br /&gt;
&lt;br /&gt;
for obj in bpy.context.selected_objects:&lt;br /&gt;
	# Check to see that the object is a mesh.&lt;br /&gt;
	if obj.type != 'MESH':&lt;br /&gt;
		continue&lt;br /&gt;
&lt;br /&gt;
	# Select verts that belong to too many groups&lt;br /&gt;
	for vertex in obj.data.vertices:&lt;br /&gt;
		if len(vertex.groups) &amp;gt; MAX_GROUPS_PER_VERT:&lt;br /&gt;
			vertex.select = True&lt;br /&gt;
		else:&lt;br /&gt;
			vertex.select = False&lt;br /&gt;
&lt;br /&gt;
# Switch back to edit mode so the user can see any selected verts&lt;br /&gt;
bpy.ops.object.mode_set(mode='EDIT')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Using the Script====&lt;br /&gt;
&lt;br /&gt;
# Select the mesh (or meshes) that you would like to check.&lt;br /&gt;
# Create a new text editor window and text data block.&lt;br /&gt;
# Copy and paste the script into the text editor.&lt;br /&gt;
# Click &amp;quot;Run Script&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once the script has ran, the 3d view will switch to edit mode and any offending vertices will be selected. A handy tip: clicking an individual vertex will reveal which groups it is a member of in the properties shelf.&lt;br /&gt;
&lt;br /&gt;
[[Image:Properties_shelf_vertex_groups.png|frame|center|The vertex group section of the properties shelf]]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
* [http://www.modwiki.net/wiki/MD5_%28file_format%29 MD5 file format documentation]&lt;br /&gt;
* [http://www.katsbits.com/tools/# Tools for MD5 and other file formats]&lt;br /&gt;
* [http://download.blender.org/release/ Older versions of Blender]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Exporting_models&amp;diff=2138</id>
		<title>Tutorials/Exporting models</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Exporting_models&amp;diff=2138"/>
		<updated>2013-10-11T21:20:45Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* New exporter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Modeling]]&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
''Notice: This guide was written for the 2.6 series of Blender. Most of this guide should apply for other versions of Blender, but this is not guaranteed.''&lt;br /&gt;
&lt;br /&gt;
Getting a finished model out of Blender and into the game is a relatively involved process with a number of possible pitfalls. This guide aims to describe the process in as much detail as possible to assist users who have not done it before, or those who have exported models for other games and would like to know what (if anything) is different.&lt;br /&gt;
&lt;br /&gt;
If you would like to export from Maya, you may find the official [http://www.iddevnet.com/quake4/Animations id Software documentation] useful.&lt;br /&gt;
&lt;br /&gt;
At present, this guide primarily describes the process for exporting models to the MD5 format. While the engine supports both MD3 and MD5, the latter is preferred. The reasons for this are discussed [[#What_is_MD5?|below]].&lt;br /&gt;
&lt;br /&gt;
Before a model may be exported and used in-game, it must be adequately prepared: &amp;lt;!-- TODO: determine which of these are only applicable to the old exporter. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[#Limitations_of_the_engine|Engine limitations]] must be adhered to.&lt;br /&gt;
* The model must have a texture applied to it. This texture is not automagically applied to the model after it is exported and loaded in-game, this is only necessary to satisfy the MD5 exporter; that is, the game cannot read from the exported model the filename of the texture to use.&lt;br /&gt;
* The model must be a mesh and must have an armature modifier applied to it.&lt;br /&gt;
* The armature's bones all must have at least one keyframe.&lt;br /&gt;
&lt;br /&gt;
The actual process of exporting a model is straightforward:&lt;br /&gt;
&lt;br /&gt;
# After ensuring that the above requirements are met, the mesh itself is exported.&lt;br /&gt;
# If using the old exporter, each animation is exported separately. The new exporter adds support for [[#Batch_export_with_the_new_exporter|batch export]] of animations.&lt;br /&gt;
# A [[#Configuring_the_model|configuration file]] specifying data such as the bounding box size and vertical offset is written. This may include information that is specific to the particular type of model (i.e., buildable or player model).&lt;br /&gt;
# A [[#Writing_shaders|shader]] is written that determines how the model is textured in-game.&lt;br /&gt;
# Finally, after everything is properly named and configured, the files are [[Packaging_game_data|packaged]] and placed in the correct game data folder to allow it to be loaded in-game.&lt;br /&gt;
&lt;br /&gt;
==What is MD5?==&lt;br /&gt;
&lt;br /&gt;
MD5 is the model format created by id Software for Doom 3 which is also used by Unvanquished. It is an improvement over its predecessor, MD3, in that it uses bones to pose the model.&lt;br /&gt;
&lt;br /&gt;
{{Note|header=What about MD3? IQM? PSK? ASE? Obj?|content=&lt;br /&gt;
{{SupportedModelFormats}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Advantages over MD3===&lt;br /&gt;
&lt;br /&gt;
* Unlike MD3, MD5 is bone-based, meaning that instead of storing an entire mesh for each frame of animation, there is only one mesh file. This single mesh file is deformed using a vertex shader.&lt;br /&gt;
* Because there is only one mesh, only one VBO (vertex buffer object) needs to be created for each MD5 model. The deformation is performed entirely on the GPU, so it is (theoretically) faster than MD3, and uses less memory.&lt;br /&gt;
* Because the format is in plain-text, it can be easily verified for sanity (i.e., to ensure that it was exported correctly and not corrupted in some way).&lt;br /&gt;
&lt;br /&gt;
===Disadvantages over MD3===&lt;br /&gt;
&lt;br /&gt;
* Some forms of motion are more difficult to achieve; certain animation techniques (such as lattices) are not usable.&lt;br /&gt;
* Because the format is in plain-text, it takes up more space than it needs to, though this is negligible and a MD5 model will typically be smaller than the same model in MD3 format as less data is used per each frame of animation with MD5 as compared to MD3.&lt;br /&gt;
&lt;br /&gt;
===Limitations of the engine===&lt;br /&gt;
&lt;br /&gt;
The engine places certain limitations on the fidelity of your models when using the MD5 format. These are:&lt;br /&gt;
&lt;br /&gt;
* There may not be more than 128 bones. (Note: this was increased from 64.)&lt;br /&gt;
* There may not be more than 100,000 vertices.&lt;br /&gt;
* There may not be more than 10,000 triangles.&lt;br /&gt;
* No vertex may belong to more than four vertex groups (i.e., one vertex may not be controlled by more than four bones). An error message will be displayed in-game if this requirement is not met. A [[#.22R_LoadMD5:_vertex_.25i_requires_more_than_.25i_weights_on_surface_.28.25i.29_in_model_.27.25s.27.22|script]] may be used before exporting to check that this limitation is not exceeded.&lt;br /&gt;
&lt;br /&gt;
{{Note|header=Developer Note|content=The limitation on vertex groups is a hard-coded limitation of the vertex shader ({{SourceFile|main/glsl/vertexSkinning_vp.glsl}}) that deforms the base mesh.}}&lt;br /&gt;
&lt;br /&gt;
===Limitations of the format===&lt;br /&gt;
&lt;br /&gt;
The MD5 format only supports bones. You may not&lt;br /&gt;
&lt;br /&gt;
* Use lattices or any other means of deformation.&lt;br /&gt;
* Scale bones.&lt;br /&gt;
* Use keyframes on anything other than bone poses. You may, however, set keyframes on bone constraint influences or anything else that would affect a bone's position or rotation.&lt;br /&gt;
&lt;br /&gt;
Note that you do not have to have a parent/child relationship between bones. In fact, in some instances, avoiding a parent/child relationship is necessary to achieve certain effects, such as moving bones around.&lt;br /&gt;
&lt;br /&gt;
==Acquiring and installing the exporter==&lt;br /&gt;
&lt;br /&gt;
===MD3===&lt;br /&gt;
&lt;br /&gt;
If for some reason you are interested in the MD3 exporter, it is available from [http://sourceforge.net/projects/md3exporter/ SourceForge].&lt;br /&gt;
&lt;br /&gt;
===MD5===&lt;br /&gt;
&lt;br /&gt;
====Old exporter====&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
You can download the exporter from [http://www.katsbits.com/smforum/index.php?topic=178.0 this thread on katsbits.com]. Installation instructions are in the thread.&lt;br /&gt;
&lt;br /&gt;
====New exporter====&lt;br /&gt;
&lt;br /&gt;
As of 15 May 2012, there is another [http://sourceforge.net/projects/blenderbitsbobs/ MD5 exporter available for Blender 2.63+] ([http://www.katsbits.com/smforum/index.php?topic=404.0 discussion on katsbits]). This has been found to be superior to the old exporter. Note that portions of this guide have not yet been updated to reflect the differences in the new exporter.&lt;br /&gt;
&lt;br /&gt;
We have [http://sourceforge.net/u/dsalt/blenderbitsbobs/ a patched version] which allows each mesh objects to have a custom property, &amp;lt;var&amp;gt;q3tex&amp;lt;/var&amp;gt;, which contains the name of a shader. This is output in the ‘shader’ line for that mesh in the md5mesh file.&lt;br /&gt;
&lt;br /&gt;
==Exporting the mesh==&lt;br /&gt;
&lt;br /&gt;
===MD5===&lt;br /&gt;
&lt;br /&gt;
Note that for buildables and weapons, the filename of the exported mesh is dictated by the corresponding [[#Configuring_the_model|configuration file]]. All player models, however, are hardcoded to look for &amp;lt;code&amp;gt;body.md5mesh&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Old exporter====&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
# Select the armature and the mesh. The order in which you select the two does not matter.&lt;br /&gt;
# Click File &amp;amp;rarr; Export &amp;amp;rarr; Quake&amp;amp;nbsp;Model&amp;amp;nbsp;5&amp;amp;nbsp;(.md5)&lt;br /&gt;
# On the left shelf that appears in the file prompt, change the Exports combo box to &amp;quot;Mesh only.&amp;quot; Don't worry about the scale or name fields.&lt;br /&gt;
# Click &amp;quot;Export MD5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once this has been completed, you must manually edit the mesh file (the one with a &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt; extension) to specify the correct shader to use.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- snip ---&lt;br /&gt;
mesh {&lt;br /&gt;
	shader &amp;quot;models/buildables/medistat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	numverts 4&lt;br /&gt;
	vert 0 ( 1.000000 0.000000 ) 0 1&lt;br /&gt;
	vert 1 ( 0.000000 0.000000 ) 1 1&lt;br /&gt;
--- snip ---&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;models/buildables/medistat&amp;lt;/code&amp;gt; is '''not''' a file path to a shader; it is the name (again, not filename) of the shader to use. That is, a shader with the matching name will be used for this model.&lt;br /&gt;
&lt;br /&gt;
To avoid having to do this every time you export the mesh, set the name of the material applied to the object in Blender to the same as you edited the md5mesh.&lt;br /&gt;
&lt;br /&gt;
====New exporter====&lt;br /&gt;
&lt;br /&gt;
* Select the mesh to export.&lt;br /&gt;
* Click File &amp;amp;rarr; Export &amp;amp;rarr; MD5 Mesh (.md5mesh).&lt;br /&gt;
* Specify the output filename in the dialog, and click &amp;quot;Export MD5MESH&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The exported model is not ready to be used in-game just yet; it must be manually edited. Open the exported &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt; file in a text editor, and manually delete the top three lines of the file (highlighted in red below):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#f00;&amp;quot;&amp;gt;// Parameters used during export:&lt;br /&gt;
 //   Reorient: True&lt;br /&gt;
 //   Scale: 1.0&amp;lt;/span&amp;gt;&lt;br /&gt;
 MD5Version 10&lt;br /&gt;
 commandline &amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 numJoints 4&lt;br /&gt;
 numMeshes 1&lt;br /&gt;
 &lt;br /&gt;
 joints {&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;remainder of file omitted for brevity&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to save the file when you are done. You will also have to do this for each animation file that you export.&lt;br /&gt;
&lt;br /&gt;
If you do not want to have to do this each time, you can edit the exporter script. Open the &amp;lt;code&amp;gt;export_md5.py&amp;lt;/code&amp;gt; script in the &amp;lt;code&amp;gt;io_scene_md5&amp;lt;/code&amp;gt; folder where you installed the script, at around line 30, edit this code:&lt;br /&gt;
&lt;br /&gt;
 def record_parameters(correctionMatrix):&lt;br /&gt;
     return [&lt;br /&gt;
     &amp;quot;// Parameters used during export:\n&amp;quot;,&lt;br /&gt;
     &amp;quot;//   Reorient: {}\n&amp;quot;.format(bool(correctionMatrix.to_euler()[2])),&lt;br /&gt;
     &amp;quot;//   Scale: {}\n&amp;quot;.format(correctionMatrix.decompose()[2][0])]&lt;br /&gt;
&lt;br /&gt;
to look like this:&lt;br /&gt;
&lt;br /&gt;
 def record_parameters(correctionMatrix):&lt;br /&gt;
     return []&lt;br /&gt;
&lt;br /&gt;
If you are comfortable with applying patches, you may use this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -27,10 +27,7 @@&lt;br /&gt;
     return pairs&lt;br /&gt;
 &lt;br /&gt;
 def record_parameters(correctionMatrix):&lt;br /&gt;
-    return [&lt;br /&gt;
-    &amp;quot;// Parameters used during export:\n&amp;quot;,&lt;br /&gt;
-    &amp;quot;//   Reorient: {}\n&amp;quot;.format(bool(correctionMatrix.to_euler()[2])),&lt;br /&gt;
-    &amp;quot;//   Scale: {}\n&amp;quot;.format(correctionMatrix.decompose()[2][0])]&lt;br /&gt;
+    return []&lt;br /&gt;
 &lt;br /&gt;
 def define_components(obj, bm, bones, correctionMatrix):&lt;br /&gt;
     scaleFactor = correctionMatrix.to_scale()[0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you will also have to manually set the shader as with the [[#Old_exporter_2|old exporter]].&lt;br /&gt;
&lt;br /&gt;
==Exporting the animations==&lt;br /&gt;
&lt;br /&gt;
===MD3===&lt;br /&gt;
&lt;br /&gt;
Exported MD3 animations require a configuration file that specifies which frames of the animation correspond to which actions the game will display.&lt;br /&gt;
&lt;br /&gt;
This varies slightly by the type (i.e., weapon or buildable) of model.&lt;br /&gt;
&lt;br /&gt;
===MD5===&lt;br /&gt;
&lt;br /&gt;
====Old exporter====&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
The procedure for exporting animations is the same as for exporting the mesh with regard to selecting the mesh and the armature. Before using the exporter, however, you must be certain to set the start and end frames to encompass only the particular animation that you wish to export; each animation must be exported separately, unless the [[#New_exporter|new exporter]] is used, which adds a [[#Batch_export_with_the_new_exporter|batch export]] feature.&lt;br /&gt;
&lt;br /&gt;
[[Image:Md5_export_timeline.png|frame|center|The timeline view in Blender, which is used to set which frames of animation to export. Here, only one frame of animation (frame 180) is being exported.]]&lt;br /&gt;
&lt;br /&gt;
At the export file prompt, choose &amp;quot;Anim only.&amp;quot; from the &amp;quot;Exports&amp;quot; combo box. Enter as the filename the name of the particular animation that you are exporting; the correct names to use are given below.&lt;br /&gt;
&lt;br /&gt;
====Batch export with the new exporter====&lt;br /&gt;
&lt;br /&gt;
The [[Exporting Models#Batch export|new exporter]] now supports batch export of models.&lt;br /&gt;
&lt;br /&gt;
To make use of this feature, you must set [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Markers frame markers] denoting the start and end of each animation. The name of frame markers denoting the start of an animation must end in &amp;quot;_start&amp;quot; and markers denoting the end of an animation must end in &amp;quot;_end&amp;quot;; for example, frame markers denoting the start and end of a buildable's construct animation would be &amp;quot;construct_start&amp;quot; and &amp;quot;construct_end&amp;quot;. Avoid using frame markers with duplicate names, as which one will be used by the exporter is not predictable. Note that frame markers may overlap however you please; this is useful when two animations share a frame or you would like to automate the process of exporting the same few frames of animation as several different animation files (e.g., for testing purposes).&lt;br /&gt;
&lt;br /&gt;
All operations in modifying frame markers are performed in the [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Timeline timeline]:&lt;br /&gt;
* To create a frame marker, move the timeline to the desired frame and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;M&amp;lt;/span&amp;gt;.&lt;br /&gt;
* To select a frame marker, click with the right mouse button.&lt;br /&gt;
* To move a frame marker, select it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;G&amp;lt;/span&amp;gt;.&lt;br /&gt;
* To delete a frame marker, select it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;.&lt;br /&gt;
* To rename a frame marker, select it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;Ctrl&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;M&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The actual exportation process becomes much simpler:&lt;br /&gt;
&lt;br /&gt;
# Click File &amp;amp;rarr; Export &amp;amp;rarr; MD5 (batch export).&lt;br /&gt;
# Specify the filename of the &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt; to export.&lt;br /&gt;
&lt;br /&gt;
==Animation names==&lt;br /&gt;
&lt;br /&gt;
The filenames for each exported animation must be what the engine expects for it to be able to load them, and vary depending on the format (MD3 or MD5) and type (e.g., buildable, weapon, or player) of model being exported.&lt;br /&gt;
&lt;br /&gt;
===Weapons===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
See the &amp;lt;code&amp;gt;CG_ParseWeaponFile()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Weapon state constants are enumerated in the &amp;lt;code&amp;gt;weaponstate_t&amp;lt;/code&amp;gt; enum in {{SourceFile|src/gamelogic/game/bg_public.h}}&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{{!}} class{{=}}&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
! Constant&lt;br /&gt;
! Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_READY&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon at its idle state, ready to fire.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_RAISING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being raised. It may not be fired in this state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_DROPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being put away. It may not be fired in this state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_FIRING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being fired.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_RELOADING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being reloaded.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_NEEDS_RESET&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The Lucifer Cannon in its overcharged state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
Control of weapon states is done by &amp;lt;code&amp;gt;PM_Weapon()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PM_BeginWeaponChange()&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;PM_FinishWeaponChange()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/game/bg_pmove.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Note that for both MD3 and MD5 models, there may be separate models for first- and third-person views. Please see &amp;quot;[[#Weapons|Configuring the model]]&amp;quot; for more information regarding how to specify separate models.&lt;br /&gt;
&lt;br /&gt;
====MD3====&lt;br /&gt;
&lt;br /&gt;
MD3 does not use separate files for separate animations. Instead, a configuration file specifies what frames of a single MD3 animation are used for each in-game animation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Find out how barrel spin is handled by the engine. Is it animated into the barrel model or is it done procedurally?''&lt;br /&gt;
&lt;br /&gt;
In addition to the base weapon mesh, there may be as many as three additional MD3 meshes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Search string&lt;br /&gt;
! Tag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_flash.md3&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;tag_flash&amp;lt;/code&amp;gt;&lt;br /&gt;
| The weapon's muzzle flash.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_barrel.md3&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;tag_barrel&amp;lt;/code&amp;gt;&lt;br /&gt;
| The weapon's barrel.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_hand.md3&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| Hands holding the weapon model. Note: this is not used for third person models.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For non-programmers, the &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt; string is replaced by the parameter given to the &amp;lt;code&amp;gt;weaponModel&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;weaponModel3rdPerson&amp;lt;/code&amp;gt; keyword.&lt;br /&gt;
&lt;br /&gt;
The tag &amp;lt;code&amp;gt;tag_weapon&amp;lt;/code&amp;gt; is used on the main weapon model to align the third person weapon model to the third person player model.&lt;br /&gt;
&lt;br /&gt;
====MD5====&lt;br /&gt;
&lt;br /&gt;
Note that each animation filename must have the &amp;lt;code&amp;gt;.md5anim&amp;lt;/code&amp;gt; extension.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Animation name&lt;br /&gt;
! Engine constant&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_IDLE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Animation played when a weapon is not being fired&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_lower&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_DROP&amp;lt;/code&amp;gt;&lt;br /&gt;
| Animation played when a weapon is being put away&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_reload&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_RELOAD&amp;lt;/code&amp;gt;&lt;br /&gt;
| Weapon reload animation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_raise&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_RAISE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Animation played when a weapon is switched to&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_fire&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Default attack animation&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;7&amp;quot; | Usage of these is highly dependent on the player class. The marauder, for example, may randomly use one of these instead of &amp;lt;code&amp;gt;WANIM_ATTACK1&amp;lt;/code&amp;gt;.&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK4&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK7&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK8&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
# See &amp;lt;code&amp;gt;PM_Weapon()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Buildables===&lt;br /&gt;
&lt;br /&gt;
====MD3====&lt;br /&gt;
&lt;br /&gt;
As always, MD3 buildable models require a separate configuration file that specifies which frames of the animation correspond to actions displayed by the game.&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
This file is parsed by &amp;lt;code&amp;gt;CG_ParseBuildableAnimationFile()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/cgame/cg_buildable.c}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Each line in the configuration file corresponds to a single animation. Those animations are in the same order as in the table for MD5 animation names below.&lt;br /&gt;
&lt;br /&gt;
The order that animations appear in the configuration file must match this order exactly. Animations may not be omitted.&lt;br /&gt;
&lt;br /&gt;
The syntax is as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;var&amp;gt;firstFrame&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;numFrames&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;loopFrames&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;fps&amp;lt;/var&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;var&amp;gt;firstFrame&amp;lt;/var&amp;gt; &amp;amp;mdash; Specifies the initial frame of the animation.&lt;br /&gt;
* &amp;lt;var&amp;gt;numFrames&amp;lt;/var&amp;gt; &amp;amp;mdash; Specifies the number of frames following the initial frame that comprise that animation.&lt;br /&gt;
* &amp;lt;var&amp;gt;loopFrames&amp;lt;/var&amp;gt; &amp;amp;mdash; (''Optional'')&lt;br /&gt;
* &amp;lt;var&amp;gt;fps&amp;lt;/var&amp;gt; &amp;amp;mdash; (''Optional, may only be used if loopFrames is specified'') Specifies the framerate of the animation. If not specified, defaults to 1.&lt;br /&gt;
&lt;br /&gt;
C and C++ style comments (i.e., &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/* */&amp;lt;/code&amp;gt;) are permitted past the last argument.&lt;br /&gt;
&lt;br /&gt;
====MD5====&lt;br /&gt;
&lt;br /&gt;
As with weapon animations, each animation filename must have the &amp;lt;code&amp;gt;.md5anim&amp;lt;/code&amp;gt; extension.&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
These animation constants are in the &amp;lt;code&amp;gt;buildableAnimNumber_t&amp;lt;/code&amp;gt; enumeration in {{SourceFile|src/gamelogic/game/bg_public.c}}. Animations are set using the &amp;lt;code&amp;gt;G_SetIdleBuildableAnim()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;G_SetBuildableAnim()&amp;lt;/code&amp;gt; functions. All animations are in entity behavior functions in {{SourceFile|src/gamelogic/game/g_buildable.c}}.&lt;br /&gt;
&lt;br /&gt;
Sounds for animations are enumerated in the &amp;lt;code&amp;gt;cg_buildableSoundNames&amp;lt;/code&amp;gt; array in {{SourceFile|src/gamelogic/game/bg_public.h}}. Which animations are loaded is defined in &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Items in this table are in the same order as in enum buildableAnimNumber_t --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Animation name&lt;br /&gt;
! Engine constant&lt;br /&gt;
! Used by&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_IDLE1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Idle animation, shown when the buildable is not doing anything (and in the case of human buildables, when they are also powered). Used in place of other animations if they are missing unless otherwise noted.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_IDLE2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Medistation, telenode, barricade, egg&lt;br /&gt;
| ‘Active’ idle state, e.g. while the medistation is currently healing (and not transitioning into or out of the healing state).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;powerdown&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_POWERDOWN&amp;lt;/code&amp;gt;&lt;br /&gt;
| Human buildables, (barricade)&lt;br /&gt;
| Animation played when a buildable has just lost power.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle_unpowered&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_IDLE_UNPOWERED&amp;lt;/code&amp;gt;&lt;br /&gt;
| Human buildables, (barricade)&lt;br /&gt;
| Idle animation played when a buildable has no power. ''(Formerly &amp;lt;code&amp;gt;idle3&amp;lt;/code&amp;gt;.)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;construct&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_CONSTRUCT1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Construction animation, shown when the buildable is being built.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;construct2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_CONSTRUCT2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Medistation, (telenode), (egg)&lt;br /&gt;
| Animation played when returning to the primary idle state, e.g. medistation transitioning from healing.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_ATTACK1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All (except tesla)&lt;br /&gt;
| Animation played when a buidlable is attacking or transitioning to its ‘active’ idle state. For the barricade, the animation when it is shrinking.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| (Medistation), (telenode), barricade, (egg)&lt;br /&gt;
| Unshrink animation for the barricade. (Falls back on &amp;lt;code&amp;gt;BANIM_ATTACK1&amp;lt;/code&amp;gt;.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;spawn&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_SPAWN1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Telenode, Egg&lt;br /&gt;
| Animation for when when someone is spawning from a telenode or egg.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;spawn2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_SPAWN2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Currently unused.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_PAIN1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Default pain animation, used when a buildable is damaged.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_PAIN2&amp;lt;/code&amp;gt;&lt;br /&gt;
| (Medistation), barricade, (egg)&lt;br /&gt;
| Pain animation used for the barricade when it is damaged and shrunk. (Falls back on &amp;lt;code&amp;gt;BANIM_PAIN1&amp;lt;/code&amp;gt;.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destroy&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_DESTROY1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Played when a buildable is killed or destroyed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destroy_unpowered&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_DESTROY_UNPOWERED&amp;lt;/code&amp;gt;&lt;br /&gt;
| Human buildings, barricade&lt;br /&gt;
| Played when an unpowered buildable is killed or destroyed. (Falls back on &amp;lt;code&amp;gt;BANIM_DESTROY1&amp;lt;/code&amp;gt;.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destroyed&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_DESTROYED&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| The animation played after the buildable's destroy animation finishes playing but before it blows up; essentially, the buildable in a dead state. For the barricade, this is the same animation as for its shrunk state.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Note: buildables whose names are in (parentheses) may not actually use the animation, but it is possible that at some point they will. However, the animations are loaded.''&lt;br /&gt;
&lt;br /&gt;
===Player models===&lt;br /&gt;
&lt;br /&gt;
====MD5====&lt;br /&gt;
&lt;br /&gt;
As with weapon animations, each animation filename must have the &amp;lt;code&amp;gt;.md5anim&amp;lt;/code&amp;gt; extension.&lt;br /&gt;
&lt;br /&gt;
Items in italics need to be double-checked.&lt;br /&gt;
&lt;br /&gt;
Note that at present, some of these strings do not match the constants.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Animation name&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Engine constant&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Humans?&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Aliens?&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! Assumed Correct&lt;br /&gt;
! Actual (Humans)&lt;br /&gt;
! Actual (Aliens)&lt;br /&gt;
! Humans&lt;br /&gt;
! Aliens&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_ATTACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_ATTACK1&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack2&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack3&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack3&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack3&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_ATTACK3&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;charge&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;charge&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_CHARGE&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Tyrant charge animation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_IDLECR&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_backward&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_forward&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_BACKCR&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_forward&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_forward&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_WALKCR&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;die&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;die&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;die&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BOTH_DEATH1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_DEATH1&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;gesture&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;gesture&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;gesture&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_GESTURE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_GESTURE&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_IDLE&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| Human idle animation. It seems as though NSPA_STAND (&amp;quot;stand&amp;quot;) is used as the idle animation for aliens.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_JUMP&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_JUMP&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;jump_back&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump_back&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_JUMPB&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_JUMPBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Evidently although humans have a separate constant for jumping backwards, they use the same animation file as for jumping forwards.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_LAND&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_LAND&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;land_back&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land_back&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_LANDB&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_LANDBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Like with jumping, humans evidently use the same animation for both LEGS_LAND and LEGS_LANDB.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain1&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;pain1&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_PAIN1&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Humans evidently do not have a pain animation?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain2&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;pain2&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_PAIN2&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run_backwards&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; (?)&lt;br /&gt;
| &amp;lt;code&amp;gt;run_backwards&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_BACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUNBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Note: Not sure if this is correct for the humans&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run_left&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;run_left&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUNLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run_right&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;run_right&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUNLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;stand&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;stand&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_STAND&amp;lt;/code&amp;gt;&lt;br /&gt;
| ''No''&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| TORSO_STAND is in the code, but I didn't see an animation loaded for the humans&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;stand2&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_STAND2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| ''No''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;step&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;step&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_TURN&amp;lt;/code&amp;gt;?&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| ''No''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;swim&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;swim&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;swim&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_SWIM&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_SWIM&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;turn&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;step&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_TURN&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_WALK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_backwards&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_backwards&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_BACKWALK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALKBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_left&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_left&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALKLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_right&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_right&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALKLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- other animation constants seen that aren't in the table:&lt;br /&gt;
LEGS_WALKCR_BACK&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Writing shaders==&lt;br /&gt;
&lt;br /&gt;
As was implied before, the texture(s) used by a model are not stored in the md5mesh or md5anim files; they are specified by a separate shader file that is placed in the &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
Shaders are a very large topic and are outside the scope of this guide. The [http://tremap.xtr3m.net/__Games/Xreal/Manual_Shader_1/ShaderManual.htm XReal shader guide] explains shaders in detail. However, the following shader should do for most purposes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
models/buildables/trapper&lt;br /&gt;
{&lt;br /&gt;
	diffuseMap models/buildables/trapper/trapper.tga&lt;br /&gt;
	bumpMap models/buildables/trapper/trapper_n.tga&lt;br /&gt;
	specularMap models/buildables/trapper/trapper_s.tga&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do take note that&lt;br /&gt;
* &amp;lt;code&amp;gt;models/buildables/trapper&amp;lt;/code&amp;gt; is NOT a path, it is merely a string that matches the shader specified by the &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt;, and&lt;br /&gt;
* &amp;lt;code&amp;gt;bumpMap&amp;lt;/code&amp;gt; actually refers to a normal map.&lt;br /&gt;
&lt;br /&gt;
==Configuring the model==&lt;br /&gt;
&lt;br /&gt;
Aside from the textures used by a model, the scale, vertical position, and bounding box size of the model must be specified. This is done with a configuration file. These were formerly placed in &amp;lt;code&amp;gt;overrides/buildables/&amp;lt;/code&amp;gt; (for buildables) or &amp;lt;code&amp;gt;overrides/classes/&amp;lt;/code&amp;gt; (for player models), but are now placed in &amp;lt;code&amp;gt;configs/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Player models===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
Reading the configuration file for player models is handled by the &amp;lt;code&amp;gt;CG_ParseCharacterFile()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/cgame/cg_players.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The configuration file may use the following keywords:&lt;br /&gt;
&lt;br /&gt;
''Note: this list is incomplete''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;headoffset &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;z&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;sex &amp;lt;var&amp;gt;gender&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sets the gender of the model. Options are &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; for female or &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; for neuter. Any other character is interpreted as male.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;fixedlegs&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;fixedtorso&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;firstTorsoBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;footsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;flesh&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;metal&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;splash&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;lastTorsoBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;torsoControlBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;neckControlBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;modelScale&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
name        &amp;quot;Basilisk&amp;quot;&lt;br /&gt;
model       level1&lt;br /&gt;
modelScale  1.0&lt;br /&gt;
skin        default&lt;br /&gt;
shadowScale 1.0&lt;br /&gt;
hud         alien_general_hud&lt;br /&gt;
mins        -18 -18 -18&lt;br /&gt;
maxs        18 18 18&lt;br /&gt;
crouchMaxs  18 18 18&lt;br /&gt;
deadMins    -18 -18 -4&lt;br /&gt;
deadMaxs    18 18 4&lt;br /&gt;
zOffset     0.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Weapons===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
Weapon configuration files are parsed with &amp;lt;code&amp;gt;CG_ParseWeaponConfig()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The configuration file may use the following keywords:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;weaponModel &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;weaponModel3rdPerson &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;idleSound &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;icon &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;mdash; The relative path to the icon that is displayed in the HUD for that weapon.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;crosshair &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;disableIn3rdPerson&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After those keywords, one of the following keywords must be used, followed by an opening curly brace (&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;), more commands, and a final closing curly brace (&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;primary&amp;lt;/code&amp;gt; (engine constant: &amp;lt;code&amp;gt;WPM_PRIMARY&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;secondary&amp;lt;/code&amp;gt; (engine constant: &amp;lt;code&amp;gt;WPM_SECONDARY&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;tertiary&amp;lt;/code&amp;gt; (engine constant: &amp;lt;code&amp;gt;WPM_TERTIARY&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The configuration between the curly braces is handled by &amp;lt;code&amp;gt;CG_ParseWeaponModeSection&amp;lt;/code&amp;gt;, in the same file. It accepts the following keywords:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileModel &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileSprite &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;shader&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;amp;mdash; The size of the missile sprite. If this value is negative, it is made zero.&lt;br /&gt;
* &amp;lt;var&amp;gt;shader&amp;lt;/var&amp;gt; &amp;amp;mdash; The shader describing the missile sprite.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileRotates&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileAnimates &amp;lt;var&amp;gt;startFrame&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;numFrames&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;frameRate&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;looping&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileParticleSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileTrailSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;muzzleParticleSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactParticleSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactMark &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;shader&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactSound &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;amp;mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; &amp;amp;mdash; The file path of the sound file to use.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactFleshSound &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;amp;mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; &amp;amp;mdash; The file path of the sound file to use.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;alwaysImpact&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;flashDLightColor &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Specifies the color of the muzzle flash &amp;lt;!-- didn't actually double check this --&amp;gt; dynamic lighting.&amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;amp;mdash; The red color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;amp;mdash; The green color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt; &amp;amp;mdash; The blue color component as a floating point number in the range [0,1].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;continuousFlash&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileDlightColor &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;amp;mdash; The red color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;amp;mdash; The green color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt; &amp;amp;mdash; The blue color component as a floating point number in the range [0,1].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileDlight &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;amp;mdash; If this value is negative, it is made zero.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;firingSound &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileSound &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;flashSound &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;amp;mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; &amp;amp;mdash; The file path of the sound file to use.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example, this is the configuration for the chaingun (&amp;lt;code&amp;gt;models/weapons/chaingun/weapon.cfg&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
weaponModel       models/weapons/chaingun/chaingun.md3&lt;br /&gt;
&lt;br /&gt;
icon              icons/iconw_chaingun&lt;br /&gt;
crosshair         48 gfx/2d/crosshair-chaingun_s&lt;br /&gt;
&lt;br /&gt;
primary&lt;br /&gt;
{&lt;br /&gt;
  flashDlightColor      1.0 1.0 0.0&lt;br /&gt;
  flashSound            0 models/weapons/chaingun/flash0.wav&lt;br /&gt;
  flashSound            1 models/weapons/chaingun/flash1.wav&lt;br /&gt;
  flashSound            2 models/weapons/chaingun/flash2.wav&lt;br /&gt;
  flashSound            3 models/weapons/chaingun/flash3.wav&lt;br /&gt;
&lt;br /&gt;
  impactMark            8 gfx/marks/bullet_mrk&lt;br /&gt;
&lt;br /&gt;
  impactSound           0 models/weapons/chaingun/impact0.wav&lt;br /&gt;
&lt;br /&gt;
  impactParticleSystem  models/weapons/rifle/impactPS&lt;br /&gt;
  muzzleParticleSystem  models/weapons/chaingun/muzzlePS&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buildables===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
Reading the configuration file for buildables is handled by the &amp;lt;code&amp;gt;BG_ParseBuildableFile()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/game/bg_misc.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The configuration file may use the following keywords:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;model &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; Some models may actually have several different model files (not sure why); this argument specifies which. Clamped to the range [0,3] (which should actually be [0, MAX_BUILDABLE_MODELS]), which means that you may use as many as four models per buildable. This is only used by the machine gun turret, which is composed of different parts.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; The file path where the model file is located. Note that for MD5 models, an extension of &amp;lt;code&amp;gt;.md3&amp;lt;/code&amp;gt; is still to be used; it will automatically be changed by the engine.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;modelScale &amp;lt;var&amp;gt;scale&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Scales the model linearly.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;mins &amp;lt;var&amp;gt;minX&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minY&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minZ&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The coordinates passed to this and &amp;lt;code&amp;gt;maxs&amp;lt;/code&amp;gt; define the bounding box for the model that is used for collision. The bounding box is always aligned to the global coordinate axes regardless of the orientation of the model, which is something to keep in mind when defining these values. You will likely have to debug these values by enabling drawing the bounding boxes. Load a map in developer mode with &amp;lt;code&amp;gt;\devmap&amp;lt;/code&amp;gt; and set &amp;lt;code&amp;gt;\cg_drawBBOX&amp;lt;/code&amp;gt; to 1. The three arguments combined form the coordinate of one corner of the bounding box, and &amp;lt;code&amp;gt;maxs&amp;lt;/code&amp;gt; the opposite corner.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;maxs &amp;lt;var&amp;gt;minX&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minY&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minZ&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Defines the opposite corner of the AABB. (See above.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;zOffset &amp;lt;var&amp;gt;offset&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Sets the vertical offset of the model; in other words, how far off the ground it is.&amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;offset&amp;lt;/var&amp;gt; The offset as a floating point (decimal) value.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
model       0 models/buildables/trapper/trapper.md3&lt;br /&gt;
modelScale  0.8&lt;br /&gt;
mins        -15 -15 -15&lt;br /&gt;
maxs        15 15 15&lt;br /&gt;
zOffset     -15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that at present, you do not have to change the filename extension of the model to match what it actually is; that is, if the model is actually an md5, you may leave the extension as &amp;quot;.md3&amp;quot; and not &amp;quot;.md5mesh&amp;quot; or whatever.&lt;br /&gt;
&lt;br /&gt;
==Directory overview==&lt;br /&gt;
&lt;br /&gt;
This section provides an overview of the subset of the directory structure used by models; directories used for other purposes have been omitted.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;armor/&amp;lt;/code&amp;gt; Location of configurations for the three armor types (i.e., light, helmet, and battlesuit). You should not have to edit these.&lt;br /&gt;
* &amp;lt;code&amp;gt;configs/&amp;lt;/code&amp;gt; Location of configuration files for various models.&lt;br /&gt;
** &amp;lt;code&amp;gt;buildables/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;gfx/&amp;lt;/code&amp;gt; Location of various 2d effect textures, such as those used for weapons.&lt;br /&gt;
** ''Subdirectories omitted for brevity''&lt;br /&gt;
* &amp;lt;code&amp;gt;models/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ammo/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;tesla/&amp;lt;/code&amp;gt; Contains a single image used for the tesla sparks. Not sure why it's located here.&lt;br /&gt;
** &amp;lt;code&amp;gt;buildables/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;acid_tube/&amp;lt;/code&amp;gt; Acid tube&lt;br /&gt;
*** &amp;lt;code&amp;gt;arm/&amp;lt;/code&amp;gt; Armory&lt;br /&gt;
*** &amp;lt;code&amp;gt;barricade/&amp;lt;/code&amp;gt; Barricade&lt;br /&gt;
*** &amp;lt;code&amp;gt;booster/&amp;lt;/code&amp;gt; Booster&lt;br /&gt;
*** &amp;lt;code&amp;gt;dcc/&amp;lt;/code&amp;gt; Defense Computer&lt;br /&gt;
*** &amp;lt;code&amp;gt;eggpod/&amp;lt;/code&amp;gt; Egg&lt;br /&gt;
*** &amp;lt;code&amp;gt;hive/&amp;lt;/code&amp;gt; Hive&lt;br /&gt;
*** &amp;lt;code&amp;gt;hovel/&amp;lt;/code&amp;gt; Hovel&lt;br /&gt;
*** &amp;lt;code&amp;gt;medistat/&amp;lt;/code&amp;gt; Medistation&lt;br /&gt;
*** &amp;lt;code&amp;gt;mgturret/&amp;lt;/code&amp;gt; Machinegun Turret&lt;br /&gt;
*** &amp;lt;code&amp;gt;overmind/&amp;lt;/code&amp;gt; Overmind&lt;br /&gt;
*** &amp;lt;code&amp;gt;reactor/&amp;lt;/code&amp;gt; Reactor&lt;br /&gt;
*** &amp;lt;code&amp;gt;repeater/&amp;lt;/code&amp;gt; Repeater&lt;br /&gt;
*** &amp;lt;code&amp;gt;telenode/&amp;lt;/code&amp;gt; Telenode&lt;br /&gt;
*** &amp;lt;code&amp;gt;tesla/&amp;lt;/code&amp;gt; Tesla generator&lt;br /&gt;
*** &amp;lt;code&amp;gt;trapper/&amp;lt;/code&amp;gt; Trapper&lt;br /&gt;
** &amp;lt;code&amp;gt;players/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;builder/&amp;lt;/code&amp;gt; Human builder model.&lt;br /&gt;
*** &amp;lt;code&amp;gt;human_base/&amp;lt;/code&amp;gt; Unarmored human model. Also includes the jetpack and battery pack.&lt;br /&gt;
*** &amp;lt;code&amp;gt;human_bsuit/&amp;lt;/code&amp;gt; Battlesuit model.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level0/&amp;lt;/code&amp;gt; Dretch.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level1/&amp;lt;/code&amp;gt; Basilisk and advanced basilisk. (The advanced basilisk uses the same model as the regular dragoon, but a different texture.)&lt;br /&gt;
*** &amp;lt;code&amp;gt;level2/&amp;lt;/code&amp;gt; Marauder and advanced marauder. (Same as basilisk with regard to advanced model.)&lt;br /&gt;
*** &amp;lt;code&amp;gt;level3/&amp;lt;/code&amp;gt; Dragoon and advanced dragoon. (Same as basilisk with regard to advanced model.)&lt;br /&gt;
*** &amp;lt;code&amp;gt;level4/&amp;lt;/code&amp;gt; Tyrant.&lt;br /&gt;
** &amp;lt;code&amp;gt;weapons/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;abuild/&amp;lt;/code&amp;gt; As there is no weapon model for the granger, the only thing in this directory is a config to hide the (nonexistant) weapon model in third person (a hack, I guess).&lt;br /&gt;
*** &amp;lt;code&amp;gt;abuildupg/&amp;lt;/code&amp;gt; Advanced granger weapon. Same as above, except the config file specifies sounds for the attack sounds (which are also located in this directory).&lt;br /&gt;
*** &amp;lt;code&amp;gt;ackit/&amp;lt;/code&amp;gt; Advanced construction kit.&lt;br /&gt;
*** &amp;lt;code&amp;gt;blaster/&amp;lt;/code&amp;gt; Blaster.&lt;br /&gt;
*** &amp;lt;code&amp;gt;chaingun/&amp;lt;/code&amp;gt; Chaingun.&lt;br /&gt;
*** &amp;lt;code&amp;gt;ckit/&amp;lt;/code&amp;gt; Construction kit.&lt;br /&gt;
*** &amp;lt;code&amp;gt;flamer/&amp;lt;/code&amp;gt; Flamethrower.&lt;br /&gt;
*** &amp;lt;code&amp;gt;grenade/&amp;lt;/code&amp;gt; Grenade.&lt;br /&gt;
*** &amp;lt;code&amp;gt;hive/&amp;lt;/code&amp;gt; Sprites, configuration file, and sound file for the hive.&lt;br /&gt;
*** &amp;lt;code&amp;gt;lcannon/&amp;lt;/code&amp;gt; Lucifer cannon.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level0/&amp;lt;/code&amp;gt; Dretch configuration and attack sound file.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level1/&amp;lt;/code&amp;gt; Basilisk configuration and attack sound files (hit and miss).&lt;br /&gt;
*** &amp;lt;code&amp;gt;level1upg/&amp;lt;/code&amp;gt; Advanced Basilisk configuration and added gas attack sound file.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level2/&amp;lt;/code&amp;gt; Marauder configuration and attack sound files (hit and miss).&lt;br /&gt;
*** &amp;lt;code&amp;gt;level2upg/&amp;lt;/code&amp;gt; Advanced Marauder configuration and added electric attack sound file.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level3/&amp;lt;/code&amp;gt; Dragoon configuration and attack sound files (hit, miss, and pounce).&lt;br /&gt;
*** &amp;lt;code&amp;gt;level3upg/&amp;lt;/code&amp;gt; Advanced Dragoon configuration and added barb sound files and model.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level4/&amp;lt;/code&amp;gt; Tyrant configuration and attack sound files (hit and miss).&lt;br /&gt;
*** &amp;lt;code&amp;gt;lgun/&amp;lt;/code&amp;gt; Lasgun&lt;br /&gt;
*** &amp;lt;code&amp;gt;lockblob/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;mdriver/&amp;lt;/code&amp;gt; Mass Driver&lt;br /&gt;
*** &amp;lt;code&amp;gt;mgturret/&amp;lt;/code&amp;gt; Machinegun turret '''''FIXME: why does this show up twice?'''''&lt;br /&gt;
*** &amp;lt;code&amp;gt;prifle/&amp;lt;/code&amp;gt; Plasma rifle&lt;br /&gt;
*** &amp;lt;code&amp;gt;psaw/&amp;lt;/code&amp;gt; Painsaw&lt;br /&gt;
*** &amp;lt;code&amp;gt;rifle/&amp;lt;/code&amp;gt; Rifle&lt;br /&gt;
*** &amp;lt;code&amp;gt;shells/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;shotgun/&amp;lt;/code&amp;gt; Shotgun&lt;br /&gt;
*** &amp;lt;code&amp;gt;teslagen/&amp;lt;/code&amp;gt; Tesla generator '''''FIXME: why does this show up twice?'''''&lt;br /&gt;
* &amp;lt;code&amp;gt;overrides/&amp;lt;/code&amp;gt; Depreciated directory for model configuration files. Use &amp;lt;code&amp;gt;configs/&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
** &amp;lt;code&amp;gt;buildables/&amp;lt;/code&amp;gt; Depreceated location for buildable model configs.&lt;br /&gt;
** &amp;lt;code&amp;gt;classes/&amp;lt;/code&amp;gt; Depreceated location for character model configs.&lt;br /&gt;
* &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt; Location for shaders.&lt;br /&gt;
&lt;br /&gt;
==Getting the model in game==&lt;br /&gt;
&lt;br /&gt;
There are two approaches to test your model in-game. The model and related files may be in actual folders, or the engine can load them from a &amp;lt;code&amp;gt;.pk3&amp;lt;/code&amp;gt; (package) file, which is really just a zip-compressed archive with the extension changed. The process for creating these archives is discussed on the [[packaging game data]] page.&lt;br /&gt;
&lt;br /&gt;
==Testing the model==&lt;br /&gt;
&lt;br /&gt;
Once you have the model exported, the shader and configuration written, and everything packaged into a .pk3 file and in place, you are ready to test.&lt;br /&gt;
&lt;br /&gt;
===Testing externally===&lt;br /&gt;
&lt;br /&gt;
Rather than testing the exported model in-game, you may also test the model with a stand-alone MD5 viewer. At present, there is a viewer for Windows available [http://www.katsbits.com/files/md5/modelviewer_0.93a.zip here].&lt;br /&gt;
&lt;br /&gt;
===Testing in game===&lt;br /&gt;
&lt;br /&gt;
See the [[testing]] page.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
===Old exporter===&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
====Error while exporting from Blender====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Md5_export_error_no_armature.png]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; | This error displays when the selected object does not have an armature modifier. Any object exported as an md5 needs bones, even if it is static. If you are unsure of how to create a static object with md5, just add an armature, set the playback start and end frame to 1, and add a location or rotation keyframe at frame 1.&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Md5_export_error_no_animation.png]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; | This error displays when there are no keyframes. Follow the abov instructions for exporting a static object with md5.&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Md5_export_error_no_material.png]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; | This error displays when the object does not have a material applied to it. This is required by the script, even though it really does not affect the exported result.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Appearance problems in-game===&lt;br /&gt;
&lt;br /&gt;
====All or part of the mesh appears to be sucked to the center====&lt;br /&gt;
&lt;br /&gt;
''Please note that as of 2012-02-27, the MD5 exporter does not work properly in several more recent versions of Blender. Use Blender 2.59 until this is fixed. See [http://www.katsbits.com/smforum/index.php?topic=167.msg2135#msg2135 the MD5 exporter thread] for more information.''&lt;br /&gt;
&lt;br /&gt;
This can happen for a number of reasons:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There are vertices without weights.&lt;br /&gt;
&amp;lt;p&amp;gt;''Solution'': apply weights to vertices that do not have them. If those verts are not to be animated, weight them to a bone that does not move.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You are using Blender 2.61 and you have bones that have animated positions.&lt;br /&gt;
&amp;lt;p&amp;gt;''Solution'': Use an earlier version of blender until this is fixed in the exporter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You are using Blender 2.62 and you have bones that are not located at the origin and do not have a parent or have animated positions.&lt;br /&gt;
&amp;lt;p&amp;gt;''Solution'': Again, use an earlier version of blender until this is fixed in the exporter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;R_LoadMD5: vertex %i requires more than %i weights on surface (%i) in model '%s'&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
This error is displayed in the console in game when a vertex belongs to too many groups.&lt;br /&gt;
&lt;br /&gt;
You can use this script to check your model for this before exporting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Copyright 2012 Nicholas De Cicco. &amp;lt;velociostrich@gmail.com&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
# you may not use this file except in compliance with the License.&lt;br /&gt;
# You may obtain a copy of the License at&lt;br /&gt;
#&lt;br /&gt;
#	http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
#&lt;br /&gt;
# Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
# distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
# See the License for the specific language governing permissions and&lt;br /&gt;
# limitations under the License.&lt;br /&gt;
&lt;br /&gt;
import bpy, math&lt;br /&gt;
from bpy.props import *&lt;br /&gt;
&lt;br /&gt;
MAX_GROUPS_PER_VERT = 4&lt;br /&gt;
&lt;br /&gt;
# Switch to object mode for vertex selection to work&lt;br /&gt;
bpy.ops.object.mode_set(mode='OBJECT')&lt;br /&gt;
&lt;br /&gt;
for obj in bpy.context.selected_objects:&lt;br /&gt;
	# Check to see that the object is a mesh.&lt;br /&gt;
	if obj.type != 'MESH':&lt;br /&gt;
		continue&lt;br /&gt;
&lt;br /&gt;
	# Select verts that belong to too many groups&lt;br /&gt;
	for vertex in obj.data.vertices:&lt;br /&gt;
		if len(vertex.groups) &amp;gt; MAX_GROUPS_PER_VERT:&lt;br /&gt;
			vertex.select = True&lt;br /&gt;
		else:&lt;br /&gt;
			vertex.select = False&lt;br /&gt;
&lt;br /&gt;
# Switch back to edit mode so the user can see any selected verts&lt;br /&gt;
bpy.ops.object.mode_set(mode='EDIT')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Using the Script====&lt;br /&gt;
&lt;br /&gt;
# Select the mesh (or meshes) that you would like to check.&lt;br /&gt;
# Create a new text editor window and text data block.&lt;br /&gt;
# Copy and paste the script into the text editor.&lt;br /&gt;
# Click &amp;quot;Run Script&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once the script has ran, the 3d view will switch to edit mode and any offending vertices will be selected. A handy tip: clicking an individual vertex will reveal which groups it is a member of in the properties shelf.&lt;br /&gt;
&lt;br /&gt;
[[Image:Properties_shelf_vertex_groups.png|frame|center|The vertex group section of the properties shelf]]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
* [http://www.modwiki.net/wiki/MD5_%28file_format%29 MD5 file format documentation]&lt;br /&gt;
* [http://www.katsbits.com/tools/# Tools for MD5 and other file formats]&lt;br /&gt;
* [http://download.blender.org/release/ Older versions of Blender]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=2127</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=2127"/>
		<updated>2013-10-04T17:14:38Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* sell */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float: right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
{{note|content=The game handles &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;commands specially, in a way which has implications concerning usage.&lt;br /&gt;
&lt;br /&gt;
There is one way to use them in bindings which works properly, and that's to use the command on its own.&lt;br /&gt;
&lt;br /&gt;
It is possible to have other commands following one of these ''but'' this is not well handled – the game appends information about when the key was pressed but, at present, assumes that there's just one command present in the binding. It also causes problems on key-up when the &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;command is the first command since, while the it will (correctly) be converted to a &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;command, any following commands will be executed unmodifed, except for the last one (which gets the timing information).&lt;br /&gt;
&lt;br /&gt;
If you need to use a binding which contains one of these with other commands then use something like “&amp;lt;samp&amp;gt;wait; +taunt; wait; -taunt&amp;lt;/samp&amp;gt;”. Timing information will not be added; the server has information which allows it to calculate ‘close enough’ timing information, and there may be a knock-on effect on an immediately-following action.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===buy===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 18.)&amp;lt;/i&amp;gt; This command can take multiple parameters. It can also be used to sell items.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;+&amp;lt;i&amp;gt;item&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; || Sell all which conflicts, then buy &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;-&amp;lt;i&amp;gt;item or type&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; || Sell &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt;, or all items of the given type. (See sell.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;?&amp;lt;i&amp;gt;item&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; || Try to buy &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt;, failing quietly.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For example, if you want a sell-all bind, you would use “&amp;lt;samp&amp;gt;buy -all rifle&amp;lt;/samp&amp;gt;” – this will get rid of all equipment and re-equip you with a rifle (though if you're building something, you won't lose your construction kit and consequently will not acquire a rifle).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
===sell===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 15.)&amp;lt;/i&amp;gt; This command can take multiple parameters.&lt;br /&gt;
&lt;br /&gt;
Special item names:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;weapon&amp;lt;/code&amp;gt;                       || Your current weapon (not blaster)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;weapons&amp;lt;/code&amp;gt;                      || All weapons&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;upgrades&amp;lt;/code&amp;gt;                     || All upgrades&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;armour&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;armor&amp;lt;/code&amp;gt; || All armour items&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt;                          || Everything&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===class===&lt;br /&gt;
&lt;br /&gt;
This command behaves differently depending on which team you are on.&lt;br /&gt;
&lt;br /&gt;
* As a human or alien, when dead, this command will cause you to spawn with the desired class or weapon, respectively.&lt;br /&gt;
* As an alien, this command will cause you to evolve to the class specified. You may not &amp;quot;evolve&amp;quot; into lower-level classes.&lt;br /&gt;
&lt;br /&gt;
Note that regardless of when you invoke this command, an argument '''must''' be supplied or no result will occur.&lt;br /&gt;
&lt;br /&gt;
The following arguments may be used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable progress&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Team&lt;br /&gt;
! Argument&lt;br /&gt;
! Spawnable?&lt;br /&gt;
! Availability&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;10&amp;quot; | Aliens&lt;br /&gt;
| &amp;lt;code&amp;gt;builder&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; class=&amp;quot;done&amp;quot; | Yes&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | Stage 1&lt;br /&gt;
| [[Granger]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level0&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Dretch]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level1&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; class=&amp;quot;none&amp;quot; | No&lt;br /&gt;
| [[Basilisk]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level2&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Marauder]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level3&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Dragoon]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;builderupg&amp;lt;/code&amp;gt;&lt;br /&gt;
| class=&amp;quot;done&amp;quot; | Yes&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Stage 2&lt;br /&gt;
| [[Advanced Granger]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level1upg&amp;lt;/code&amp;gt;&lt;br /&gt;
| class=&amp;quot;none&amp;quot; rowspan=&amp;quot;4&amp;quot; | No&lt;br /&gt;
| [[Advanced Basilisk]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level2upg&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Advanced Marauder]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level3upg&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Advanced Dragoon]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level4&amp;lt;/code&amp;gt;&lt;br /&gt;
| Stage 3&lt;br /&gt;
| [[Tyrant]]&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Humans&lt;br /&gt;
| &amp;lt;code&amp;gt;rifle&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; class=&amp;quot;done&amp;quot;  | Yes&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Stage 1&lt;br /&gt;
| [[Rifle]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ckit&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Construction Kit]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|content=&lt;br /&gt;
For the aliens, when at a higher stage, you may still spawn as a non-advanced variant of any particular class. For example, if you type&lt;br /&gt;
&lt;br /&gt;
 \class builder&lt;br /&gt;
&lt;br /&gt;
you will spawn as a normal Granger even when the Advanced Granger is available.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Condition handling==&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
For commands relevant to development and testing purposes, please see the [[Testing]] page.&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=2126</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=2126"/>
		<updated>2013-10-04T17:10:21Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* buy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float: right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
{{note|content=The game handles &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;commands specially, in a way which has implications concerning usage.&lt;br /&gt;
&lt;br /&gt;
There is one way to use them in bindings which works properly, and that's to use the command on its own.&lt;br /&gt;
&lt;br /&gt;
It is possible to have other commands following one of these ''but'' this is not well handled – the game appends information about when the key was pressed but, at present, assumes that there's just one command present in the binding. It also causes problems on key-up when the &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;command is the first command since, while the it will (correctly) be converted to a &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;command, any following commands will be executed unmodifed, except for the last one (which gets the timing information).&lt;br /&gt;
&lt;br /&gt;
If you need to use a binding which contains one of these with other commands then use something like “&amp;lt;samp&amp;gt;wait; +taunt; wait; -taunt&amp;lt;/samp&amp;gt;”. Timing information will not be added; the server has information which allows it to calculate ‘close enough’ timing information, and there may be a knock-on effect on an immediately-following action.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===buy===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 18.)&amp;lt;/i&amp;gt; This command can take multiple parameters. It can also be used to sell items.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;+&amp;lt;i&amp;gt;item&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; || Sell all which conflicts, then buy &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;-&amp;lt;i&amp;gt;item or type&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; || Sell &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt;, or all items of the given type. (See sell.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;?&amp;lt;i&amp;gt;item&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; || Try to buy &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt;, failing quietly.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For example, if you want a sell-all bind, you would use “&amp;lt;samp&amp;gt;buy -all rifle&amp;lt;/samp&amp;gt;” – this will get rid of all equipment and re-equip you with a rifle (though if you're building something, you won't lose your construction kit and consequently will not acquire a rifle).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
===sell===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 15.)&amp;lt;/i&amp;gt; This command can take multiple parameters.&lt;br /&gt;
&lt;br /&gt;
===class===&lt;br /&gt;
&lt;br /&gt;
This command behaves differently depending on which team you are on.&lt;br /&gt;
&lt;br /&gt;
* As a human or alien, when dead, this command will cause you to spawn with the desired class or weapon, respectively.&lt;br /&gt;
* As an alien, this command will cause you to evolve to the class specified. You may not &amp;quot;evolve&amp;quot; into lower-level classes.&lt;br /&gt;
&lt;br /&gt;
Note that regardless of when you invoke this command, an argument '''must''' be supplied or no result will occur.&lt;br /&gt;
&lt;br /&gt;
The following arguments may be used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable progress&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Team&lt;br /&gt;
! Argument&lt;br /&gt;
! Spawnable?&lt;br /&gt;
! Availability&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;10&amp;quot; | Aliens&lt;br /&gt;
| &amp;lt;code&amp;gt;builder&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; class=&amp;quot;done&amp;quot; | Yes&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | Stage 1&lt;br /&gt;
| [[Granger]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level0&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Dretch]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level1&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; class=&amp;quot;none&amp;quot; | No&lt;br /&gt;
| [[Basilisk]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level2&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Marauder]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level3&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Dragoon]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;builderupg&amp;lt;/code&amp;gt;&lt;br /&gt;
| class=&amp;quot;done&amp;quot; | Yes&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Stage 2&lt;br /&gt;
| [[Advanced Granger]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level1upg&amp;lt;/code&amp;gt;&lt;br /&gt;
| class=&amp;quot;none&amp;quot; rowspan=&amp;quot;4&amp;quot; | No&lt;br /&gt;
| [[Advanced Basilisk]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level2upg&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Advanced Marauder]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level3upg&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Advanced Dragoon]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level4&amp;lt;/code&amp;gt;&lt;br /&gt;
| Stage 3&lt;br /&gt;
| [[Tyrant]]&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Humans&lt;br /&gt;
| &amp;lt;code&amp;gt;rifle&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; class=&amp;quot;done&amp;quot;  | Yes&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Stage 1&lt;br /&gt;
| [[Rifle]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ckit&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Construction Kit]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|content=&lt;br /&gt;
For the aliens, when at a higher stage, you may still spawn as a non-advanced variant of any particular class. For example, if you type&lt;br /&gt;
&lt;br /&gt;
 \class builder&lt;br /&gt;
&lt;br /&gt;
you will spawn as a normal Granger even when the Advanced Granger is available.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Condition handling==&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
For commands relevant to development and testing purposes, please see the [[Testing]] page.&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=2125</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=2125"/>
		<updated>2013-10-04T16:59:58Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Contents floated right&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float: right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
{{note|content=The game handles &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;commands specially, in a way which has implications concerning usage.&lt;br /&gt;
&lt;br /&gt;
There is one way to use them in bindings which works properly, and that's to use the command on its own.&lt;br /&gt;
&lt;br /&gt;
It is possible to have other commands following one of these ''but'' this is not well handled – the game appends information about when the key was pressed but, at present, assumes that there's just one command present in the binding. It also causes problems on key-up when the &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;command is the first command since, while the it will (correctly) be converted to a &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;command, any following commands will be executed unmodifed, except for the last one (which gets the timing information).&lt;br /&gt;
&lt;br /&gt;
If you need to use a binding which contains one of these with other commands then use something like “&amp;lt;samp&amp;gt;wait; +taunt; wait; -taunt&amp;lt;/samp&amp;gt;”. Timing information will not be added; the server has information which allows it to calculate ‘close enough’ timing information, and there may be a knock-on effect on an immediately-following action.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===buy===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 15.)&amp;lt;/i&amp;gt; This command can take multiple parameters. It can also be used to sell items.&lt;br /&gt;
&lt;br /&gt;
For example, if you want a sell-all bind, you would use “&amp;lt;samp&amp;gt;buy -all rifle&amp;lt;/samp&amp;gt;” – this will get rid of all equipment and re-equip you with a rifle (though if you're building something, you won't lose your construction kit and consequently will not acquire a rifle).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
===sell===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 15.)&amp;lt;/i&amp;gt; This command can take multiple parameters.&lt;br /&gt;
&lt;br /&gt;
===class===&lt;br /&gt;
&lt;br /&gt;
This command behaves differently depending on which team you are on.&lt;br /&gt;
&lt;br /&gt;
* As a human or alien, when dead, this command will cause you to spawn with the desired class or weapon, respectively.&lt;br /&gt;
* As an alien, this command will cause you to evolve to the class specified. You may not &amp;quot;evolve&amp;quot; into lower-level classes.&lt;br /&gt;
&lt;br /&gt;
Note that regardless of when you invoke this command, an argument '''must''' be supplied or no result will occur.&lt;br /&gt;
&lt;br /&gt;
The following arguments may be used:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable progress&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Team&lt;br /&gt;
! Argument&lt;br /&gt;
! Spawnable?&lt;br /&gt;
! Availability&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;10&amp;quot; | Aliens&lt;br /&gt;
| &amp;lt;code&amp;gt;builder&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; class=&amp;quot;done&amp;quot; | Yes&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | Stage 1&lt;br /&gt;
| [[Granger]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level0&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Dretch]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level1&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; class=&amp;quot;none&amp;quot; | No&lt;br /&gt;
| [[Basilisk]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level2&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Marauder]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level3&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Dragoon]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;builderupg&amp;lt;/code&amp;gt;&lt;br /&gt;
| class=&amp;quot;done&amp;quot; | Yes&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; | Stage 2&lt;br /&gt;
| [[Advanced Granger]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level1upg&amp;lt;/code&amp;gt;&lt;br /&gt;
| class=&amp;quot;none&amp;quot; rowspan=&amp;quot;4&amp;quot; | No&lt;br /&gt;
| [[Advanced Basilisk]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level2upg&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Advanced Marauder]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level3upg&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Advanced Dragoon]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;level4&amp;lt;/code&amp;gt;&lt;br /&gt;
| Stage 3&lt;br /&gt;
| [[Tyrant]]&lt;br /&gt;
|-&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Humans&lt;br /&gt;
| &amp;lt;code&amp;gt;rifle&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; class=&amp;quot;done&amp;quot;  | Yes&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Stage 1&lt;br /&gt;
| [[Rifle]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ckit&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Construction Kit]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|content=&lt;br /&gt;
For the aliens, when at a higher stage, you may still spawn as a non-advanced variant of any particular class. For example, if you type&lt;br /&gt;
&lt;br /&gt;
 \class builder&lt;br /&gt;
&lt;br /&gt;
you will spawn as a normal Granger even when the Advanced Granger is available.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Condition handling==&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
For commands relevant to development and testing purposes, please see the [[Testing]] page.&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Exporting_models&amp;diff=2107</id>
		<title>Tutorials/Exporting models</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Exporting_models&amp;diff=2107"/>
		<updated>2013-07-30T14:50:05Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Fix the animations table (somebody sorted it alphabetically) and bring it up to date for 0.18.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Modeling]]&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
''Notice: This guide was written for the 2.6 series of Blender. Most of this guide should apply for other versions of Blender, but this is not guaranteed.''&lt;br /&gt;
&lt;br /&gt;
Getting a finished model out of Blender and into the game is a relatively involved process with a number of possible pitfalls. This guide aims to describe the process in as much detail as possible to assist users who have not done it before, or those who have exported models for other games and would like to know what (if anything) is different.&lt;br /&gt;
&lt;br /&gt;
If you would like to export from Maya, you may find the official [http://www.iddevnet.com/quake4/Animations id Software documentation] useful.&lt;br /&gt;
&lt;br /&gt;
At present, this guide primarily describes the process for exporting models to the MD5 format. While the engine supports both MD3 and MD5, the latter is preferred. The reasons for this are discussed [[#What_is_MD5?|below]].&lt;br /&gt;
&lt;br /&gt;
Before a model may be exported and used in-game, it must be adequately prepared: &amp;lt;!-- TODO: determine which of these are only applicable to the old exporter. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[#Limitations_of_the_engine|Engine limitations]] must be adhered to.&lt;br /&gt;
* The model must have a texture applied to it. This texture is not automagically applied to the model after it is exported and loaded in-game, this is only necessary to satisfy the MD5 exporter; that is, the game cannot read from the exported model the filename of the texture to use.&lt;br /&gt;
* The model must be a mesh and must have an armature modifier applied to it.&lt;br /&gt;
* The armature's bones all must have at least one keyframe.&lt;br /&gt;
&lt;br /&gt;
The actual process of exporting a model is straightforward:&lt;br /&gt;
&lt;br /&gt;
# After ensuring that the above requirements are met, the mesh itself is exported.&lt;br /&gt;
# If using the old exporter, each animation is exported separately. The new exporter adds support for [[#Batch_export_with_the_new_exporter|batch export]] of animations.&lt;br /&gt;
# A [[#Configuring_the_model|configuration file]] specifying data such as the bounding box size and vertical offset is written. This may include information that is specific to the particular type of model (i.e., buildable or player model).&lt;br /&gt;
# A [[#Writing_shaders|shader]] is written that determines how the model is textured in-game.&lt;br /&gt;
# Finally, after everything is properly named and configured, the files are [[Packaging_game_data|packaged]] and placed in the correct game data folder to allow it to be loaded in-game.&lt;br /&gt;
&lt;br /&gt;
==What is MD5?==&lt;br /&gt;
&lt;br /&gt;
MD5 is the model format created by id Software for Doom 3 which is also used by Unvanquished. It is an improvement over its predecessor, MD3, in that it uses bones to pose the model.&lt;br /&gt;
&lt;br /&gt;
{{Note|header=What about MD3? IQM? PSK? ASE? Obj?|content=&lt;br /&gt;
{{SupportedModelFormats}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Advantages over MD3===&lt;br /&gt;
&lt;br /&gt;
* Unlike MD3, MD5 is bone-based, meaning that instead of storing an entire mesh for each frame of animation, there is only one mesh file. This single mesh file is deformed using a vertex shader.&lt;br /&gt;
* Because there is only one mesh, only one VBO (vertex buffer object) needs to be created for each MD5 model. The deformation is performed entirely on the GPU, so it is (theoretically) faster than MD3, and uses less memory.&lt;br /&gt;
* Because the format is in plain-text, it can be easily verified for sanity (i.e., to ensure that it was exported correctly and not corrupted in some way).&lt;br /&gt;
&lt;br /&gt;
===Disadvantages over MD3===&lt;br /&gt;
&lt;br /&gt;
* Some forms of motion are more difficult to achieve; certain animation techniques (such as lattices) are not usable.&lt;br /&gt;
* Because the format is in plain-text, it takes up more space than it needs to, though this is negligible and a MD5 model will typically be smaller than the same model in MD3 format as less data is used per each frame of animation with MD5 as compared to MD3.&lt;br /&gt;
&lt;br /&gt;
===Limitations of the engine===&lt;br /&gt;
&lt;br /&gt;
The engine places certain limitations on the fidelity of your models when using the MD5 format. These are:&lt;br /&gt;
&lt;br /&gt;
* There may not be more than 128 bones. (Note: this was increased from 64.)&lt;br /&gt;
* There may not be more than 100,000 vertices.&lt;br /&gt;
* There may not be more than 10,000 triangles.&lt;br /&gt;
* No vertex may belong to more than four vertex groups (i.e., one vertex may not be controlled by more than four bones). An error message will be displayed in-game if this requirement is not met. A [[#.22R_LoadMD5:_vertex_.25i_requires_more_than_.25i_weights_on_surface_.28.25i.29_in_model_.27.25s.27.22|script]] may be used before exporting to check that this limitation is not exceeded.&lt;br /&gt;
&lt;br /&gt;
{{Note|header=Developer Note|content=The limitation on vertex groups is a hard-coded limitation of the vertex shader ({{SourceFile|main/glsl/vertexSkinning_vp.glsl}}) that deforms the base mesh.}}&lt;br /&gt;
&lt;br /&gt;
===Limitations of the format===&lt;br /&gt;
&lt;br /&gt;
The MD5 format only supports bones. You may not&lt;br /&gt;
&lt;br /&gt;
* Use lattices or any other means of deformation.&lt;br /&gt;
* Scale bones.&lt;br /&gt;
* Use keyframes on anything other than bone poses. You may, however, set keyframes on bone constraint influences or anything else that would affect a bone's position or rotation.&lt;br /&gt;
&lt;br /&gt;
Note that you do not have to have a parent/child relationship between bones. In fact, in some instances, avoiding a parent/child relationship is necessary to achieve certain effects, such as moving bones around.&lt;br /&gt;
&lt;br /&gt;
==Acquiring and installing the exporter==&lt;br /&gt;
&lt;br /&gt;
===MD3===&lt;br /&gt;
&lt;br /&gt;
If for some reason you are interested in the MD3 exporter, it is available from [http://sourceforge.net/projects/md3exporter/ SourceForge].&lt;br /&gt;
&lt;br /&gt;
===MD5===&lt;br /&gt;
&lt;br /&gt;
====Old exporter====&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
You can download the exporter from [http://www.katsbits.com/smforum/index.php?topic=178.0 this thread on katsbits.com]. Installation instructions are in the thread.&lt;br /&gt;
&lt;br /&gt;
====New exporter====&lt;br /&gt;
&lt;br /&gt;
As of 15 May 2012, there is another MD5 exporter available for Blender 2.63+, available on [http://www.katsbits.com/smforum/index.php?topic=404.0 katsbits]. This has been found to be superior to the old exporter. Note that portions of this guide have not yet been updated to reflect the differences in the new exporter.&lt;br /&gt;
&lt;br /&gt;
==Exporting the mesh==&lt;br /&gt;
&lt;br /&gt;
===MD5===&lt;br /&gt;
&lt;br /&gt;
Note that for buildables and weapons, the filename of the exported mesh is dictated by the corresponding [[#Configuring_the_model|configuration file]]. All player models, however, are hardcoded to look for &amp;lt;code&amp;gt;body.md5mesh&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Old exporter====&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
# Select the armature and the mesh. The order in which you select the two does not matter.&lt;br /&gt;
# Click File &amp;amp;rarr; Export &amp;amp;rarr; Quake&amp;amp;nbsp;Model&amp;amp;nbsp;5&amp;amp;nbsp;(.md5)&lt;br /&gt;
# On the left shelf that appears in the file prompt, change the Exports combo box to &amp;quot;Mesh only.&amp;quot; Don't worry about the scale or name fields.&lt;br /&gt;
# Click &amp;quot;Export MD5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once this has been completed, you must manually edit the mesh file (the one with a &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt; extension) to specify the correct shader to use.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- snip ---&lt;br /&gt;
mesh {&lt;br /&gt;
	shader &amp;quot;models/buildables/medistat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	numverts 4&lt;br /&gt;
	vert 0 ( 1.000000 0.000000 ) 0 1&lt;br /&gt;
	vert 1 ( 0.000000 0.000000 ) 1 1&lt;br /&gt;
--- snip ---&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;models/buildables/medistat&amp;lt;/code&amp;gt; is '''not''' a file path to a shader; it is the name (again, not filename) of the shader to use. That is, a shader with the matching name will be used for this model.&lt;br /&gt;
&lt;br /&gt;
To avoid having to do this every time you export the mesh, set the name of the material applied to the object in Blender to the same as you edited the md5mesh.&lt;br /&gt;
&lt;br /&gt;
====New exporter====&lt;br /&gt;
&lt;br /&gt;
* Select the mesh to export.&lt;br /&gt;
* Click File &amp;amp;rarr; Export &amp;amp;rarr; MD5 Mesh (.md5mesh).&lt;br /&gt;
* Specify the output filename in the dialog, and click &amp;quot;Export MD5MESH&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The exported model is not ready to be used in-game just yet; it must be manually edited. Open the exported &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt; file in a text editor, and manually delete the top three lines of the file (highlighted in red below):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#f00;&amp;quot;&amp;gt;// Parameters used during export:&lt;br /&gt;
 //   Reorient: True&lt;br /&gt;
 //   Scale: 1.0&amp;lt;/span&amp;gt;&lt;br /&gt;
 MD5Version 10&lt;br /&gt;
 commandline &amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 numJoints 4&lt;br /&gt;
 numMeshes 1&lt;br /&gt;
 &lt;br /&gt;
 joints {&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;i&amp;gt;remainder of file omitted for brevity&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to save the file when you are done. You will also have to do this for each animation file that you export.&lt;br /&gt;
&lt;br /&gt;
If you do not want to have to do this each time, you can edit the exporter script. Open the &amp;lt;code&amp;gt;export_md5.py&amp;lt;/code&amp;gt; script in the &amp;lt;code&amp;gt;io_scene_md5&amp;lt;/code&amp;gt; folder where you installed the script, at around line 30, edit this code:&lt;br /&gt;
&lt;br /&gt;
 def record_parameters(correctionMatrix):&lt;br /&gt;
     return [&lt;br /&gt;
     &amp;quot;// Parameters used during export:\n&amp;quot;,&lt;br /&gt;
     &amp;quot;//   Reorient: {}\n&amp;quot;.format(bool(correctionMatrix.to_euler()[2])),&lt;br /&gt;
     &amp;quot;//   Scale: {}\n&amp;quot;.format(correctionMatrix.decompose()[2][0])]&lt;br /&gt;
&lt;br /&gt;
to look like this:&lt;br /&gt;
&lt;br /&gt;
 def record_parameters(correctionMatrix):&lt;br /&gt;
     return []&lt;br /&gt;
&lt;br /&gt;
If you are comfortable with applying patches, you may use this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@@ -27,10 +27,7 @@&lt;br /&gt;
     return pairs&lt;br /&gt;
 &lt;br /&gt;
 def record_parameters(correctionMatrix):&lt;br /&gt;
-    return [&lt;br /&gt;
-    &amp;quot;// Parameters used during export:\n&amp;quot;,&lt;br /&gt;
-    &amp;quot;//   Reorient: {}\n&amp;quot;.format(bool(correctionMatrix.to_euler()[2])),&lt;br /&gt;
-    &amp;quot;//   Scale: {}\n&amp;quot;.format(correctionMatrix.decompose()[2][0])]&lt;br /&gt;
+    return []&lt;br /&gt;
 &lt;br /&gt;
 def define_components(obj, bm, bones, correctionMatrix):&lt;br /&gt;
     scaleFactor = correctionMatrix.to_scale()[0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you will also have to manually set the shader as with the [[#Old_exporter_2|old exporter]].&lt;br /&gt;
&lt;br /&gt;
==Exporting the animations==&lt;br /&gt;
&lt;br /&gt;
===MD3===&lt;br /&gt;
&lt;br /&gt;
Exported MD3 animations require a configuration file that specifies which frames of the animation correspond to which actions the game will display.&lt;br /&gt;
&lt;br /&gt;
This varies slightly by the type (i.e., weapon or buildable) of model.&lt;br /&gt;
&lt;br /&gt;
===MD5===&lt;br /&gt;
&lt;br /&gt;
====Old exporter====&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
The procedure for exporting animations is the same as for exporting the mesh with regard to selecting the mesh and the armature. Before using the exporter, however, you must be certain to set the start and end frames to encompass only the particular animation that you wish to export; each animation must be exported separately, unless the [[#New_exporter|new exporter]] is used, which adds a [[#Batch_export_with_the_new_exporter|batch export]] feature.&lt;br /&gt;
&lt;br /&gt;
[[Image:Md5_export_timeline.png|frame|center|The timeline view in Blender, which is used to set which frames of animation to export. Here, only one frame of animation (frame 180) is being exported.]]&lt;br /&gt;
&lt;br /&gt;
At the export file prompt, choose &amp;quot;Anim only.&amp;quot; from the &amp;quot;Exports&amp;quot; combo box. Enter as the filename the name of the particular animation that you are exporting; the correct names to use are given below.&lt;br /&gt;
&lt;br /&gt;
====Batch export with the new exporter====&lt;br /&gt;
&lt;br /&gt;
The [[Exporting Models#Batch export|new exporter]] now supports batch export of models.&lt;br /&gt;
&lt;br /&gt;
To make use of this feature, you must set [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Markers frame markers] denoting the start and end of each animation. The name of frame markers denoting the start of an animation must end in &amp;quot;_start&amp;quot; and markers denoting the end of an animation must end in &amp;quot;_end&amp;quot;; for example, frame markers denoting the start and end of a buildable's construct animation would be &amp;quot;construct_start&amp;quot; and &amp;quot;construct_end&amp;quot;. Avoid using frame markers with duplicate names, as which one will be used by the exporter is not predictable. Note that frame markers may overlap however you please; this is useful when two animations share a frame or you would like to automate the process of exporting the same few frames of animation as several different animation files (e.g., for testing purposes).&lt;br /&gt;
&lt;br /&gt;
All operations in modifying frame markers are performed in the [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Timeline timeline]:&lt;br /&gt;
* To create a frame marker, move the timeline to the desired frame and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;M&amp;lt;/span&amp;gt;.&lt;br /&gt;
* To select a frame marker, click with the right mouse button.&lt;br /&gt;
* To move a frame marker, select it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;G&amp;lt;/span&amp;gt;.&lt;br /&gt;
* To delete a frame marker, select it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;X&amp;lt;/span&amp;gt;.&lt;br /&gt;
* To rename a frame marker, select it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;Ctrl&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;M&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The actual exportation process becomes much simpler:&lt;br /&gt;
&lt;br /&gt;
# Click File &amp;amp;rarr; Export &amp;amp;rarr; MD5 (batch export).&lt;br /&gt;
# Specify the filename of the &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt; to export.&lt;br /&gt;
&lt;br /&gt;
==Animation names==&lt;br /&gt;
&lt;br /&gt;
The filenames for each exported animation must be what the engine expects for it to be able to load them, and vary depending on the format (MD3 or MD5) and type (e.g., buildable, weapon, or player) of model being exported.&lt;br /&gt;
&lt;br /&gt;
===Weapons===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
See the &amp;lt;code&amp;gt;CG_ParseWeaponFile()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Weapon state constants are enumerated in the &amp;lt;code&amp;gt;weaponstate_t&amp;lt;/code&amp;gt; enum in {{SourceFile|src/gamelogic/game/bg_public.h}}&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{{!}} class{{=}}&amp;quot;wikitable&amp;quot;&lt;br /&gt;
{{!}}-&lt;br /&gt;
! Constant&lt;br /&gt;
! Description&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_READY&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon at its idle state, ready to fire.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_RAISING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being raised. It may not be fired in this state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_DROPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being put away. It may not be fired in this state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_FIRING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being fired.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_RELOADING&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The weapon as it is being reloaded.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;code&amp;gt;WEAPON_NEEDS_RESET&amp;lt;/code&amp;gt;&lt;br /&gt;
{{!}} The Lucifer Cannon in its overcharged state.&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
Control of weapon states is done by &amp;lt;code&amp;gt;PM_Weapon()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PM_BeginWeaponChange()&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;PM_FinishWeaponChange()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/game/bg_pmove.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Note that for both MD3 and MD5 models, there may be separate models for first- and third-person views. Please see &amp;quot;[[#Weapons|Configuring the model]]&amp;quot; for more information regarding how to specify separate models.&lt;br /&gt;
&lt;br /&gt;
====MD3====&lt;br /&gt;
&lt;br /&gt;
MD3 does not use separate files for separate animations. Instead, a configuration file specifies what frames of a single MD3 animation are used for each in-game animation.&lt;br /&gt;
&lt;br /&gt;
''TODO: Find out how barrel spin is handled by the engine. Is it animated into the barrel model or is it done procedurally?''&lt;br /&gt;
&lt;br /&gt;
In addition to the base weapon mesh, there may be as many as three additional MD3 meshes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Search string&lt;br /&gt;
! Tag&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_flash.md3&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;tag_flash&amp;lt;/code&amp;gt;&lt;br /&gt;
| The weapon's muzzle flash.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_barrel.md3&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;tag_barrel&amp;lt;/code&amp;gt;&lt;br /&gt;
| The weapon's barrel.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_hand.md3&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| Hands holding the weapon model. Note: this is not used for third person models.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For non-programmers, the &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt; string is replaced by the parameter given to the &amp;lt;code&amp;gt;weaponModel&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;weaponModel3rdPerson&amp;lt;/code&amp;gt; keyword.&lt;br /&gt;
&lt;br /&gt;
The tag &amp;lt;code&amp;gt;tag_weapon&amp;lt;/code&amp;gt; is used on the main weapon model to align the third person weapon model to the third person player model.&lt;br /&gt;
&lt;br /&gt;
====MD5====&lt;br /&gt;
&lt;br /&gt;
Note that each animation filename must have the &amp;lt;code&amp;gt;.md5anim&amp;lt;/code&amp;gt; extension.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Animation name&lt;br /&gt;
! Engine constant&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_IDLE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Animation played when a weapon is not being fired&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_lower&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_DROP&amp;lt;/code&amp;gt;&lt;br /&gt;
| Animation played when a weapon is being put away&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_reload&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_RELOAD&amp;lt;/code&amp;gt;&lt;br /&gt;
| Weapon reload animation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_raise&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_RAISE&amp;lt;/code&amp;gt;&lt;br /&gt;
| Animation played when a weapon is switched to&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%s_view_fire&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Default attack animation&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| rowspan=&amp;quot;7&amp;quot; | Usage of these is highly dependent on the player class. The marauder, for example, may randomly use one of these instead of &amp;lt;code&amp;gt;WANIM_ATTACK1&amp;lt;/code&amp;gt;.&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK3&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK4&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK7&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;WANIM_ATTACK8&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
# See &amp;lt;code&amp;gt;PM_Weapon()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Buildables===&lt;br /&gt;
&lt;br /&gt;
====MD3====&lt;br /&gt;
&lt;br /&gt;
As always, MD3 buildable models require a separate configuration file that specifies which frames of the animation correspond to actions displayed by the game.&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
This file is parsed by &amp;lt;code&amp;gt;CG_ParseBuildableAnimationFile()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/cgame/cg_buildable.c}}.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Each line in the configuration file corresponds to a single animation. Those animations are in the same order as in the table for MD5 animation names below.&lt;br /&gt;
&lt;br /&gt;
The order that animations appear in the configuration file must match this order exactly. Animations may not be omitted.&lt;br /&gt;
&lt;br /&gt;
The syntax is as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;var&amp;gt;firstFrame&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;numFrames&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;loopFrames&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;fps&amp;lt;/var&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;var&amp;gt;firstFrame&amp;lt;/var&amp;gt; &amp;amp;mdash; Specifies the initial frame of the animation.&lt;br /&gt;
* &amp;lt;var&amp;gt;numFrames&amp;lt;/var&amp;gt; &amp;amp;mdash; Specifies the number of frames following the initial frame that comprise that animation.&lt;br /&gt;
* &amp;lt;var&amp;gt;loopFrames&amp;lt;/var&amp;gt; &amp;amp;mdash; (''Optional'')&lt;br /&gt;
* &amp;lt;var&amp;gt;fps&amp;lt;/var&amp;gt; &amp;amp;mdash; (''Optional, may only be used if loopFrames is specified'') Specifies the framerate of the animation. If not specified, defaults to 1.&lt;br /&gt;
&lt;br /&gt;
C and C++ style comments (i.e., &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/* */&amp;lt;/code&amp;gt;) are permitted past the last argument.&lt;br /&gt;
&lt;br /&gt;
====MD5====&lt;br /&gt;
&lt;br /&gt;
As with weapon animations, each animation filename must have the &amp;lt;code&amp;gt;.md5anim&amp;lt;/code&amp;gt; extension.&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
These animation constants are in the &amp;lt;code&amp;gt;buildableAnimNumber_t&amp;lt;/code&amp;gt; enumeration in {{SourceFile|src/gamelogic/game/bg_public.c}}. Animations are set using the &amp;lt;code&amp;gt;G_SetIdleBuildableAnim()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;G_SetBuildableAnim()&amp;lt;/code&amp;gt; functions. All animations are in entity behavior functions in {{SourceFile|src/gamelogic/game/g_buildable.c}}.&lt;br /&gt;
&lt;br /&gt;
Sounds for animations are enumerated in the &amp;lt;code&amp;gt;cg_buildableSoundNames&amp;lt;/code&amp;gt; array in {{SourceFile|src/gamelogic/game/bg_public.h}}. Which animations are loaded is defined in &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Items in this table are in the same order as in enum buildableAnimNumber_t --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Animation name&lt;br /&gt;
! Engine constant&lt;br /&gt;
! Used by&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_IDLE1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Idle animation, shown when the buildable is not doing anything (and in the case of human buildables, when they are also powered). Used in place of other animations if they are missing unless otherwise noted.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_IDLE2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Medistation, telenode, barricade, egg&lt;br /&gt;
| ‘Active’ idle state, e.g. while the medistation is currently healing (and not transitioning into or out of the healing state).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;powerdown&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_POWERDOWN&amp;lt;/code&amp;gt;&lt;br /&gt;
| Human buildables, (barricade)&lt;br /&gt;
| Animation played when a buildable has just lost power.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle_unpowered&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_IDLE_UNPOWERED&amp;lt;/code&amp;gt;&lt;br /&gt;
| Human buildables, (barricade)&lt;br /&gt;
| Idle animation played when a buildable has no power. ''(Formerly &amp;lt;code&amp;gt;idle3&amp;lt;/code&amp;gt;.)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;construct&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_CONSTRUCT1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Construction animation, shown when the buildable is being built.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;construct2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_CONSTRUCT2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Medistation, (telenode), (egg)&lt;br /&gt;
| Animation played when returning to the primary idle state, e.g. medistation transitioning from healing.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_ATTACK1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All (except tesla)&lt;br /&gt;
| Animation played when a buidlable is attacking or transitioning to its ‘active’ idle state. For the barricade, the animation when it is shrinking.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| (Medistation), (telenode), barricade, (egg)&lt;br /&gt;
| Unshrink animation for the barricade. (Falls back on &amp;lt;code&amp;gt;BANIM_ATTACK1&amp;lt;/code&amp;gt;.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;spawn&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_SPAWN1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Telenode, Egg&lt;br /&gt;
| Animation for when when someone is spawning from a telenode or egg.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;spawn2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_SPAWN2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Currently unused.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_PAIN1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Default pain animation, used when a buildable is damaged.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_PAIN2&amp;lt;/code&amp;gt;&lt;br /&gt;
| (Medistation), barricade, (egg)&lt;br /&gt;
| Pain animation used for the barricade when it is damaged and shrunk. (Falls back on &amp;lt;code&amp;gt;BANIM_PAIN1&amp;lt;/code&amp;gt;.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destroy&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_DESTROY1&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| Played when a buildable is killed or destroyed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destroy_unpowered&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_DESTROY_UNPOWERED&amp;lt;/code&amp;gt;&lt;br /&gt;
| Human buildings, barricade&lt;br /&gt;
| Played when an unpowered buildable is killed or destroyed. (Falls back on &amp;lt;code&amp;gt;BANIM_DESTROY1&amp;lt;/code&amp;gt;.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destroyed&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BANIM_DESTROYED&amp;lt;/code&amp;gt;&lt;br /&gt;
| All&lt;br /&gt;
| The animation played after the buildable's destroy animation finishes playing but before it blows up; essentially, the buildable in a dead state. For the barricade, this is the same animation as for its shrunk state.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Note: buildables whose names are in (parentheses) may not actually use the animation, but it is possible that at some point they will. However, the animations are loaded.''&lt;br /&gt;
&lt;br /&gt;
===Player models===&lt;br /&gt;
&lt;br /&gt;
====MD5====&lt;br /&gt;
&lt;br /&gt;
As with weapon animations, each animation filename must have the &amp;lt;code&amp;gt;.md5anim&amp;lt;/code&amp;gt; extension.&lt;br /&gt;
&lt;br /&gt;
Items in italics need to be double-checked.&lt;br /&gt;
&lt;br /&gt;
Note that at present, some of these strings do not match the constants.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Animation name&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Engine constant&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Humans?&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Aliens?&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
! Assumed Correct&lt;br /&gt;
! Actual (Humans)&lt;br /&gt;
! Actual (Aliens)&lt;br /&gt;
! Humans&lt;br /&gt;
! Aliens&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_ATTACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_ATTACK1&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack2&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_ATTACK2&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;attack3&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack3&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;attack3&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_ATTACK3&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;charge&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;charge&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_CHARGE&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Tyrant charge animation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_IDLECR&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_backward&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_forward&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_BACKCR&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_forward&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;crouch_forward&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_WALKCR&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;die&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;die&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;die&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BOTH_DEATH1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_DEATH1&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;gesture&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;gesture&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;gesture&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_GESTURE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_GESTURE&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_IDLE&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| Human idle animation. It seems as though NSPA_STAND (&amp;quot;stand&amp;quot;) is used as the idle animation for aliens.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_JUMP&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_JUMP&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;jump_back&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;jump_back&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_JUMPB&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_JUMPBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Evidently although humans have a separate constant for jumping backwards, they use the same animation file as for jumping forwards.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_LAND&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_LAND&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;land_back&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;land_back&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_LANDB&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_LANDBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Like with jumping, humans evidently use the same animation for both LEGS_LAND and LEGS_LANDB.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain1&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;pain1&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_PAIN1&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Humans evidently do not have a pain animation?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pain2&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;pain2&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_PAIN2&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUN&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run_backwards&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; (?)&lt;br /&gt;
| &amp;lt;code&amp;gt;run_backwards&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_BACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUNBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| Note: Not sure if this is correct for the humans&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run_left&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;run_left&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUNLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;run_right&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;run_right&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_RUNLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;stand&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;stand&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_STAND&amp;lt;/code&amp;gt;&lt;br /&gt;
| ''No''&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| TORSO_STAND is in the code, but I didn't see an animation loaded for the humans&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;stand2&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;idle&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TORSO_STAND2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| ''No''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;step&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;step&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_TURN&amp;lt;/code&amp;gt;?&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| ''No''&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;swim&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;swim&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;swim&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_SWIM&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_SWIM&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;turn&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;step&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_TURN&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_WALK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_backwards&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_backwards&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;LEGS_BACKWALK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALKBACK&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_left&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_left&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALKLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_right&amp;lt;/code&amp;gt; &amp;lt;!-- checked --&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;walk_right&amp;lt;/code&amp;gt;&lt;br /&gt;
| N/A&lt;br /&gt;
| &amp;lt;code&amp;gt;NSPA_WALKLEFT&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:#ff1a1d;color:#fff;&amp;quot; | No&lt;br /&gt;
| style=&amp;quot;background:#3c9e2d;color:#fff;&amp;quot; | Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- other animation constants seen that aren't in the table:&lt;br /&gt;
LEGS_WALKCR_BACK&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Writing shaders==&lt;br /&gt;
&lt;br /&gt;
As was implied before, the texture(s) used by a model are not stored in the md5mesh or md5anim files; they are specified by a separate shader file that is placed in the &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
Shaders are a very large topic and are outside the scope of this guide. The [http://tremap.xtr3m.net/__Games/Xreal/Manual_Shader_1/ShaderManual.htm XReal shader guide] explains shaders in detail. However, the following shader should do for most purposes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
models/buildables/trapper&lt;br /&gt;
{&lt;br /&gt;
	diffuseMap models/buildables/trapper/trapper.tga&lt;br /&gt;
	bumpMap models/buildables/trapper/trapper_n.tga&lt;br /&gt;
	specularMap models/buildables/trapper/trapper_s.tga&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do take note that&lt;br /&gt;
* &amp;lt;code&amp;gt;models/buildables/trapper&amp;lt;/code&amp;gt; is NOT a path, it is merely a string that matches the shader specified by the &amp;lt;code&amp;gt;.md5mesh&amp;lt;/code&amp;gt;, and&lt;br /&gt;
* &amp;lt;code&amp;gt;bumpMap&amp;lt;/code&amp;gt; actually refers to a normal map.&lt;br /&gt;
&lt;br /&gt;
==Configuring the model==&lt;br /&gt;
&lt;br /&gt;
Aside from the textures used by a model, the scale, vertical position, and bounding box size of the model must be specified. This is done with a configuration file. These were formerly placed in &amp;lt;code&amp;gt;overrides/buildables/&amp;lt;/code&amp;gt; (for buildables) or &amp;lt;code&amp;gt;overrides/classes/&amp;lt;/code&amp;gt; (for player models), but are now placed in &amp;lt;code&amp;gt;configs/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Player models===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
Reading the configuration file for player models is handled by the &amp;lt;code&amp;gt;CG_ParseCharacterFile()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/cgame/cg_players.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The configuration file may use the following keywords:&lt;br /&gt;
&lt;br /&gt;
''Note: this list is incomplete''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;headoffset &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;z&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;sex &amp;lt;var&amp;gt;gender&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sets the gender of the model. Options are &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; for female or &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; for neuter. Any other character is interpreted as male.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;fixedlegs&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;fixedtorso&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;firstTorsoBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;footsteps&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;flesh&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;metal&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;splash&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;lastTorsoBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;torsoControlBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;neckControlBoneName&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;modelScale&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
name        &amp;quot;Basilisk&amp;quot;&lt;br /&gt;
model       level1&lt;br /&gt;
modelScale  1.0&lt;br /&gt;
skin        default&lt;br /&gt;
shadowScale 1.0&lt;br /&gt;
hud         alien_general_hud&lt;br /&gt;
mins        -18 -18 -18&lt;br /&gt;
maxs        18 18 18&lt;br /&gt;
crouchMaxs  18 18 18&lt;br /&gt;
deadMins    -18 -18 -4&lt;br /&gt;
deadMaxs    18 18 4&lt;br /&gt;
zOffset     0.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Weapons===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
Weapon configuration files are parsed with &amp;lt;code&amp;gt;CG_ParseWeaponConfig()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The configuration file may use the following keywords:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;weaponModel &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;weaponModel3rdPerson &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;idleSound &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;icon &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;mdash; The relative path to the icon that is displayed in the HUD for that weapon.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;crosshair &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;disableIn3rdPerson&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After those keywords, one of the following keywords must be used, followed by an opening curly brace (&amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt;), more commands, and a final closing curly brace (&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;primary&amp;lt;/code&amp;gt; (engine constant: &amp;lt;code&amp;gt;WPM_PRIMARY&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;secondary&amp;lt;/code&amp;gt; (engine constant: &amp;lt;code&amp;gt;WPM_SECONDARY&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;tertiary&amp;lt;/code&amp;gt; (engine constant: &amp;lt;code&amp;gt;WPM_TERTIARY&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
The configuration between the curly braces is handled by &amp;lt;code&amp;gt;CG_ParseWeaponModeSection&amp;lt;/code&amp;gt;, in the same file. It accepts the following keywords:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileModel &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileSprite &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;shader&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;amp;mdash; The size of the missile sprite. If this value is negative, it is made zero.&lt;br /&gt;
* &amp;lt;var&amp;gt;shader&amp;lt;/var&amp;gt; &amp;amp;mdash; The shader describing the missile sprite.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileRotates&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileAnimates &amp;lt;var&amp;gt;startFrame&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;numFrames&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;frameRate&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;looping&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileParticleSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileTrailSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;muzzleParticleSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactParticleSystem &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactMark &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;shader&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactSound &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;amp;mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; &amp;amp;mdash; The file path of the sound file to use.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;impactFleshSound &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;amp;mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; &amp;amp;mdash; The file path of the sound file to use.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;alwaysImpact&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;flashDLightColor &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Specifies the color of the muzzle flash &amp;lt;!-- didn't actually double check this --&amp;gt; dynamic lighting.&amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;amp;mdash; The red color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;amp;mdash; The green color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt; &amp;amp;mdash; The blue color component as a floating point number in the range [0,1].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;continuousFlash&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileDlightColor &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;red&amp;lt;/var&amp;gt; &amp;amp;mdash; The red color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;green&amp;lt;/var&amp;gt; &amp;amp;mdash; The green color component as a floating point number in the range [0,1].&lt;br /&gt;
* &amp;lt;var&amp;gt;blue&amp;lt;/var&amp;gt; &amp;amp;mdash; The blue color component as a floating point number in the range [0,1].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileDlight &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;size&amp;lt;/var&amp;gt; &amp;amp;mdash; If this value is negative, it is made zero.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;firingSound &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;missileSound &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;flashSound &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;amp;mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; &amp;amp;mdash; The file path of the sound file to use.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example, this is the configuration for the chaingun (&amp;lt;code&amp;gt;models/weapons/chaingun/weapon.cfg&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
weaponModel       models/weapons/chaingun/chaingun.md3&lt;br /&gt;
&lt;br /&gt;
icon              icons/iconw_chaingun&lt;br /&gt;
crosshair         48 gfx/2d/crosshair-chaingun_s&lt;br /&gt;
&lt;br /&gt;
primary&lt;br /&gt;
{&lt;br /&gt;
  flashDlightColor      1.0 1.0 0.0&lt;br /&gt;
  flashSound            0 models/weapons/chaingun/flash0.wav&lt;br /&gt;
  flashSound            1 models/weapons/chaingun/flash1.wav&lt;br /&gt;
  flashSound            2 models/weapons/chaingun/flash2.wav&lt;br /&gt;
  flashSound            3 models/weapons/chaingun/flash3.wav&lt;br /&gt;
&lt;br /&gt;
  impactMark            8 gfx/marks/bullet_mrk&lt;br /&gt;
&lt;br /&gt;
  impactSound           0 models/weapons/chaingun/impact0.wav&lt;br /&gt;
&lt;br /&gt;
  impactParticleSystem  models/weapons/rifle/impactPS&lt;br /&gt;
  muzzleParticleSystem  models/weapons/chaingun/muzzlePS&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Buildables===&lt;br /&gt;
&lt;br /&gt;
{{Note|header = Developer Note|disregardby = artists|content =&lt;br /&gt;
Reading the configuration file for buildables is handled by the &amp;lt;code&amp;gt;BG_ParseBuildableFile()&amp;lt;/code&amp;gt; function in {{SourceFile|src/gamelogic/game/bg_misc.c}}&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The configuration file may use the following keywords:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;model &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; Some models may actually have several different model files (not sure why); this argument specifies which. Clamped to the range [0,3] (which should actually be [0, MAX_BUILDABLE_MODELS]), which means that you may use as many as four models per buildable. This is only used by the machine gun turret, which is composed of different parts.&lt;br /&gt;
* &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; The file path where the model file is located. Note that for MD5 models, an extension of &amp;lt;code&amp;gt;.md3&amp;lt;/code&amp;gt; is still to be used; it will automatically be changed by the engine.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;modelScale &amp;lt;var&amp;gt;scale&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Scales the model linearly.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;mins &amp;lt;var&amp;gt;minX&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minY&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minZ&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The coordinates passed to this and &amp;lt;code&amp;gt;maxs&amp;lt;/code&amp;gt; define the bounding box for the model that is used for collision. The bounding box is always aligned to the global coordinate axes regardless of the orientation of the model, which is something to keep in mind when defining these values. You will likely have to debug these values by enabling drawing the bounding boxes. Load a map in developer mode with &amp;lt;code&amp;gt;\devmap&amp;lt;/code&amp;gt; and set &amp;lt;code&amp;gt;\cg_drawBBOX&amp;lt;/code&amp;gt; to 1. The three arguments combined form the coordinate of one corner of the bounding box, and &amp;lt;code&amp;gt;maxs&amp;lt;/code&amp;gt; the opposite corner.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;maxs &amp;lt;var&amp;gt;minX&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minY&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minZ&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Defines the opposite corner of the AABB. (See above.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;zOffset &amp;lt;var&amp;gt;offset&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Sets the vertical offset of the model; in other words, how far off the ground it is.&amp;lt;/p&amp;gt;&lt;br /&gt;
* &amp;lt;var&amp;gt;offset&amp;lt;/var&amp;gt; The offset as a floating point (decimal) value.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
model       0 models/buildables/trapper/trapper.md3&lt;br /&gt;
modelScale  0.8&lt;br /&gt;
mins        -15 -15 -15&lt;br /&gt;
maxs        15 15 15&lt;br /&gt;
zOffset     -15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that at present, you do not have to change the filename extension of the model to match what it actually is; that is, if the model is actually an md5, you may leave the extension as &amp;quot;.md3&amp;quot; and not &amp;quot;.md5mesh&amp;quot; or whatever.&lt;br /&gt;
&lt;br /&gt;
==Directory overview==&lt;br /&gt;
&lt;br /&gt;
This section provides an overview of the subset of the directory structure used by models; directories used for other purposes have been omitted.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;armor/&amp;lt;/code&amp;gt; Location of configurations for the three armor types (i.e., light, helmet, and battlesuit). You should not have to edit these.&lt;br /&gt;
* &amp;lt;code&amp;gt;configs/&amp;lt;/code&amp;gt; Location of configuration files for various models.&lt;br /&gt;
** &amp;lt;code&amp;gt;buildables/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;gfx/&amp;lt;/code&amp;gt; Location of various 2d effect textures, such as those used for weapons.&lt;br /&gt;
** ''Subdirectories omitted for brevity''&lt;br /&gt;
* &amp;lt;code&amp;gt;models/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ammo/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;tesla/&amp;lt;/code&amp;gt; Contains a single image used for the tesla sparks. Not sure why it's located here.&lt;br /&gt;
** &amp;lt;code&amp;gt;buildables/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;acid_tube/&amp;lt;/code&amp;gt; Acid tube&lt;br /&gt;
*** &amp;lt;code&amp;gt;arm/&amp;lt;/code&amp;gt; Armory&lt;br /&gt;
*** &amp;lt;code&amp;gt;barricade/&amp;lt;/code&amp;gt; Barricade&lt;br /&gt;
*** &amp;lt;code&amp;gt;booster/&amp;lt;/code&amp;gt; Booster&lt;br /&gt;
*** &amp;lt;code&amp;gt;dcc/&amp;lt;/code&amp;gt; Defense Computer&lt;br /&gt;
*** &amp;lt;code&amp;gt;eggpod/&amp;lt;/code&amp;gt; Egg&lt;br /&gt;
*** &amp;lt;code&amp;gt;hive/&amp;lt;/code&amp;gt; Hive&lt;br /&gt;
*** &amp;lt;code&amp;gt;hovel/&amp;lt;/code&amp;gt; Hovel&lt;br /&gt;
*** &amp;lt;code&amp;gt;medistat/&amp;lt;/code&amp;gt; Medistation&lt;br /&gt;
*** &amp;lt;code&amp;gt;mgturret/&amp;lt;/code&amp;gt; Machinegun Turret&lt;br /&gt;
*** &amp;lt;code&amp;gt;overmind/&amp;lt;/code&amp;gt; Overmind&lt;br /&gt;
*** &amp;lt;code&amp;gt;reactor/&amp;lt;/code&amp;gt; Reactor&lt;br /&gt;
*** &amp;lt;code&amp;gt;repeater/&amp;lt;/code&amp;gt; Repeater&lt;br /&gt;
*** &amp;lt;code&amp;gt;telenode/&amp;lt;/code&amp;gt; Telenode&lt;br /&gt;
*** &amp;lt;code&amp;gt;tesla/&amp;lt;/code&amp;gt; Tesla generator&lt;br /&gt;
*** &amp;lt;code&amp;gt;trapper/&amp;lt;/code&amp;gt; Trapper&lt;br /&gt;
** &amp;lt;code&amp;gt;players/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;builder/&amp;lt;/code&amp;gt; Human builder model.&lt;br /&gt;
*** &amp;lt;code&amp;gt;human_base/&amp;lt;/code&amp;gt; Unarmored human model. Also includes the jetpack and battery pack.&lt;br /&gt;
*** &amp;lt;code&amp;gt;human_bsuit/&amp;lt;/code&amp;gt; Battlesuit model.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level0/&amp;lt;/code&amp;gt; Dretch.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level1/&amp;lt;/code&amp;gt; Basilisk and advanced basilisk. (The advanced basilisk uses the same model as the regular dragoon, but a different texture.)&lt;br /&gt;
*** &amp;lt;code&amp;gt;level2/&amp;lt;/code&amp;gt; Marauder and advanced marauder. (Same as basilisk with regard to advanced model.)&lt;br /&gt;
*** &amp;lt;code&amp;gt;level3/&amp;lt;/code&amp;gt; Dragoon and advanced dragoon. (Same as basilisk with regard to advanced model.)&lt;br /&gt;
*** &amp;lt;code&amp;gt;level4/&amp;lt;/code&amp;gt; Tyrant.&lt;br /&gt;
** &amp;lt;code&amp;gt;weapons/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;abuild/&amp;lt;/code&amp;gt; As there is no weapon model for the granger, the only thing in this directory is a config to hide the (nonexistant) weapon model in third person (a hack, I guess).&lt;br /&gt;
*** &amp;lt;code&amp;gt;abuildupg/&amp;lt;/code&amp;gt; Advanced granger weapon. Same as above, except the config file specifies sounds for the attack sounds (which are also located in this directory).&lt;br /&gt;
*** &amp;lt;code&amp;gt;ackit/&amp;lt;/code&amp;gt; Advanced construction kit.&lt;br /&gt;
*** &amp;lt;code&amp;gt;blaster/&amp;lt;/code&amp;gt; Blaster.&lt;br /&gt;
*** &amp;lt;code&amp;gt;chaingun/&amp;lt;/code&amp;gt; Chaingun.&lt;br /&gt;
*** &amp;lt;code&amp;gt;ckit/&amp;lt;/code&amp;gt; Construction kit.&lt;br /&gt;
*** &amp;lt;code&amp;gt;flamer/&amp;lt;/code&amp;gt; Flamethrower.&lt;br /&gt;
*** &amp;lt;code&amp;gt;grenade/&amp;lt;/code&amp;gt; Grenade.&lt;br /&gt;
*** &amp;lt;code&amp;gt;hive/&amp;lt;/code&amp;gt; Sprites, configuration file, and sound file for the hive.&lt;br /&gt;
*** &amp;lt;code&amp;gt;lcannon/&amp;lt;/code&amp;gt; Lucifer cannon.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level0/&amp;lt;/code&amp;gt; Dretch configuration and attack sound file.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level1/&amp;lt;/code&amp;gt; Basilisk configuration and attack sound files (hit and miss).&lt;br /&gt;
*** &amp;lt;code&amp;gt;level1upg/&amp;lt;/code&amp;gt; Advanced Basilisk configuration and added gas attack sound file.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level2/&amp;lt;/code&amp;gt; Marauder configuration and attack sound files (hit and miss).&lt;br /&gt;
*** &amp;lt;code&amp;gt;level2upg/&amp;lt;/code&amp;gt; Advanced Marauder configuration and added electric attack sound file.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level3/&amp;lt;/code&amp;gt; Dragoon configuration and attack sound files (hit, miss, and pounce).&lt;br /&gt;
*** &amp;lt;code&amp;gt;level3upg/&amp;lt;/code&amp;gt; Advanced Dragoon configuration and added barb sound files and model.&lt;br /&gt;
*** &amp;lt;code&amp;gt;level4/&amp;lt;/code&amp;gt; Tyrant configuration and attack sound files (hit and miss).&lt;br /&gt;
*** &amp;lt;code&amp;gt;lgun/&amp;lt;/code&amp;gt; Lasgun&lt;br /&gt;
*** &amp;lt;code&amp;gt;lockblob/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;mdriver/&amp;lt;/code&amp;gt; Mass Driver&lt;br /&gt;
*** &amp;lt;code&amp;gt;mgturret/&amp;lt;/code&amp;gt; Machinegun turret '''''FIXME: why does this show up twice?'''''&lt;br /&gt;
*** &amp;lt;code&amp;gt;prifle/&amp;lt;/code&amp;gt; Plasma rifle&lt;br /&gt;
*** &amp;lt;code&amp;gt;psaw/&amp;lt;/code&amp;gt; Painsaw&lt;br /&gt;
*** &amp;lt;code&amp;gt;rifle/&amp;lt;/code&amp;gt; Rifle&lt;br /&gt;
*** &amp;lt;code&amp;gt;shells/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;shotgun/&amp;lt;/code&amp;gt; Shotgun&lt;br /&gt;
*** &amp;lt;code&amp;gt;teslagen/&amp;lt;/code&amp;gt; Tesla generator '''''FIXME: why does this show up twice?'''''&lt;br /&gt;
* &amp;lt;code&amp;gt;overrides/&amp;lt;/code&amp;gt; Depreciated directory for model configuration files. Use &amp;lt;code&amp;gt;configs/&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
** &amp;lt;code&amp;gt;buildables/&amp;lt;/code&amp;gt; Depreceated location for buildable model configs.&lt;br /&gt;
** &amp;lt;code&amp;gt;classes/&amp;lt;/code&amp;gt; Depreceated location for character model configs.&lt;br /&gt;
* &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt; Location for shaders.&lt;br /&gt;
&lt;br /&gt;
==Getting the model in game==&lt;br /&gt;
&lt;br /&gt;
There are two approaches to test your model in-game. The model and related files may be in actual folders, or the engine can load them from a &amp;lt;code&amp;gt;.pk3&amp;lt;/code&amp;gt; (package) file, which is really just a zip-compressed archive with the extension changed. The process for creating these archives is discussed on the [[packaging game data]] page.&lt;br /&gt;
&lt;br /&gt;
==Testing the model==&lt;br /&gt;
&lt;br /&gt;
Once you have the model exported, the shader and configuration written, and everything packaged into a .pk3 file and in place, you are ready to test.&lt;br /&gt;
&lt;br /&gt;
===Testing externally===&lt;br /&gt;
&lt;br /&gt;
Rather than testing the exported model in-game, you may also test the model with a stand-alone MD5 viewer. At present, there is a viewer for Windows available [http://www.katsbits.com/files/md5/modelviewer_0.93a.zip here].&lt;br /&gt;
&lt;br /&gt;
===Testing in game===&lt;br /&gt;
&lt;br /&gt;
See the [[testing]] page.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
===Old exporter===&lt;br /&gt;
&lt;br /&gt;
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''&lt;br /&gt;
&lt;br /&gt;
====Error while exporting from Blender====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Md5_export_error_no_armature.png]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; | This error displays when the selected object does not have an armature modifier. Any object exported as an md5 needs bones, even if it is static. If you are unsure of how to create a static object with md5, just add an armature, set the playback start and end frame to 1, and add a location or rotation keyframe at frame 1.&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Md5_export_error_no_animation.png]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; | This error displays when there are no keyframes. Follow the abov instructions for exporting a static object with md5.&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Md5_export_error_no_material.png]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top;&amp;quot; | This error displays when the object does not have a material applied to it. This is required by the script, even though it really does not affect the exported result.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Appearance problems in-game===&lt;br /&gt;
&lt;br /&gt;
====All or part of the mesh appears to be sucked to the center====&lt;br /&gt;
&lt;br /&gt;
''Please note that as of 2012-02-27, the MD5 exporter does not work properly in several more recent versions of Blender. Use Blender 2.59 until this is fixed. See [http://www.katsbits.com/smforum/index.php?topic=167.msg2135#msg2135 the MD5 exporter thread] for more information.''&lt;br /&gt;
&lt;br /&gt;
This can happen for a number of reasons:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There are vertices without weights.&lt;br /&gt;
&amp;lt;p&amp;gt;''Solution'': apply weights to vertices that do not have them. If those verts are not to be animated, weight them to a bone that does not move.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You are using Blender 2.61 and you have bones that have animated positions.&lt;br /&gt;
&amp;lt;p&amp;gt;''Solution'': Use an earlier version of blender until this is fixed in the exporter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You are using Blender 2.62 and you have bones that are not located at the origin and do not have a parent or have animated positions.&lt;br /&gt;
&amp;lt;p&amp;gt;''Solution'': Again, use an earlier version of blender until this is fixed in the exporter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;R_LoadMD5: vertex %i requires more than %i weights on surface (%i) in model '%s'&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
This error is displayed in the console in game when a vertex belongs to too many groups.&lt;br /&gt;
&lt;br /&gt;
You can use this script to check your model for this before exporting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Copyright 2012 Nicholas De Cicco. &amp;lt;velociostrich@gmail.com&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
# you may not use this file except in compliance with the License.&lt;br /&gt;
# You may obtain a copy of the License at&lt;br /&gt;
#&lt;br /&gt;
#	http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
#&lt;br /&gt;
# Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
# distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
# See the License for the specific language governing permissions and&lt;br /&gt;
# limitations under the License.&lt;br /&gt;
&lt;br /&gt;
import bpy, math&lt;br /&gt;
from bpy.props import *&lt;br /&gt;
&lt;br /&gt;
MAX_GROUPS_PER_VERT = 4&lt;br /&gt;
&lt;br /&gt;
# Switch to object mode for vertex selection to work&lt;br /&gt;
bpy.ops.object.mode_set(mode='OBJECT')&lt;br /&gt;
&lt;br /&gt;
for obj in bpy.context.selected_objects:&lt;br /&gt;
	# Check to see that the object is a mesh.&lt;br /&gt;
	if obj.type != 'MESH':&lt;br /&gt;
		continue&lt;br /&gt;
&lt;br /&gt;
	# Select verts that belong to too many groups&lt;br /&gt;
	for vertex in obj.data.vertices:&lt;br /&gt;
		if len(vertex.groups) &amp;gt; MAX_GROUPS_PER_VERT:&lt;br /&gt;
			vertex.select = True&lt;br /&gt;
		else:&lt;br /&gt;
			vertex.select = False&lt;br /&gt;
&lt;br /&gt;
# Switch back to edit mode so the user can see any selected verts&lt;br /&gt;
bpy.ops.object.mode_set(mode='EDIT')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Using the Script====&lt;br /&gt;
&lt;br /&gt;
# Select the mesh (or meshes) that you would like to check.&lt;br /&gt;
# Create a new text editor window and text data block.&lt;br /&gt;
# Copy and paste the script into the text editor.&lt;br /&gt;
# Click &amp;quot;Run Script&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once the script has ran, the 3d view will switch to edit mode and any offending vertices will be selected. A handy tip: clicking an individual vertex will reveal which groups it is a member of in the properties shelf.&lt;br /&gt;
&lt;br /&gt;
[[Image:Properties_shelf_vertex_groups.png|frame|center|The vertex group section of the properties shelf]]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
* [http://www.modwiki.net/wiki/MD5_%28file_format%29 MD5 file format documentation]&lt;br /&gt;
* [http://www.katsbits.com/tools/# Tools for MD5 and other file formats]&lt;br /&gt;
* [http://download.blender.org/release/ Older versions of Blender]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Machinegun_Turret&amp;diff=2098</id>
		<title>Machinegun Turret</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Machinegun_Turret&amp;diff=2098"/>
		<updated>2013-06-23T03:32:16Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MPBuildable&lt;br /&gt;
| name = Machinegun Turret&lt;br /&gt;
| image = mgturret_render_300x240.png&lt;br /&gt;
| caption = 3&amp;amp;times;7.62 millimeters of DEAAAAAAAAAATH&lt;br /&gt;
| health = 190&lt;br /&gt;
| cost = 8&lt;br /&gt;
| attack = Bullets&lt;br /&gt;
}}&lt;br /&gt;
The Machinegun Turret (a.k.a. Ret) is a sentry gun used to ward off alien hordes.&lt;br /&gt;
&lt;br /&gt;
It has a minor delay time and fires bullets at oncoming aliens dealing small damage.&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Defence_Computer&amp;diff=2097</id>
		<title>Defence Computer</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Defence_Computer&amp;diff=2097"/>
		<updated>2013-06-23T03:25:28Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Redirected page to Defense Computer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Defense Computer]]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2060</id>
		<title>Tutorials/Minimap</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2060"/>
		<updated>2013-05-30T17:29:27Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Transparent background for minimap images&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Minimap_atcshd_example.png|thumb|200px|A basic minimap for atcshd]]&lt;br /&gt;
&lt;br /&gt;
Minimaps have two purposes: help the player navigate some very large and confusing map and promote teamplay by showing the location of your teammates. They are created by the mapper and are part of the assets of a map. They follow more or less [[Feature_Proposals/Minimap|the old design document]]. Each minimap consists of a number of zones: in each region of the map a different image can be used, for example to represent the different floors of a facility.&lt;br /&gt;
&lt;br /&gt;
== How to create a minimap: the quick and simple method ==&lt;br /&gt;
&lt;br /&gt;
* Open the map using netradiant.&lt;br /&gt;
* Go in the Build menu and select Customize.&lt;br /&gt;
* Search for the minimap command line and set the number after -size to a large value (e.g. 512).&lt;br /&gt;
* Go in the Build menu and build the minimap.&lt;br /&gt;
* Note the numbers in the log window appearing after ''size_texcoords''.&lt;br /&gt;
* Put the resulting tga file in the minimaps/ folder.&lt;br /&gt;
* Create a file minimaps/&amp;lt;name of your map&amp;gt;.minimap and write it using the following template (by replacing 1, 2, 4 and 5 by the first, second, fourth and fifth number appearing after ''size_texcoords''):&lt;br /&gt;
 {&lt;br /&gt;
     zone {&lt;br /&gt;
         bounds -100000 -100000 -100000 100000 100000 100000&lt;br /&gt;
         image &amp;quot;minimaps/&amp;lt;mapname&amp;gt;&amp;quot; 1 2 4 5&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
* Load your map and enjoy that magnificient minimap.&lt;br /&gt;
&lt;br /&gt;
== How to create a minimap: tutorial using q3map2 ==&lt;br /&gt;
&lt;br /&gt;
q3map2 can create minimaps from the .map file. These minimaps basically show the solid walls by checking how much solid brush is under each pixel: a wall has a big intersection with the vertical line but a floor not so much.&lt;br /&gt;
&lt;br /&gt;
=== Configuring netRadiant ===&lt;br /&gt;
&lt;br /&gt;
Before you start generating images you probably want to change the options given to q3map2 and make sure the image size is at least 512. To do that go on the Build menu and select Customize. Below is a very simple sample configuration for a minimap build.&lt;br /&gt;
&lt;br /&gt;
[[File:Minimap_customize_options.png]]&lt;br /&gt;
&lt;br /&gt;
You can use the q3map2 minimap options list below to customize the output. A good default build line is&lt;br /&gt;
&lt;br /&gt;
 [q3map2] -minimap -samples 10 -size 512 -border 0.0 &amp;quot;[MapFile]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Creating the images ===&lt;br /&gt;
&lt;br /&gt;
[[File:Minimap_atcshd_cutted.png|thumb|200px|atcshd with the center missing and a filled door]]&lt;br /&gt;
&lt;br /&gt;
Running the minimap build at this point will create a single minimap image for the whole map. You might want to create several images either because the maps is too cluttered (many intricate levels) or because the map is too large.&lt;br /&gt;
&lt;br /&gt;
If you simply want to cut the minimap in several parts, first try to make a bigger image (image with a size of 2048 should work in the engine) with a bigger ''globalScale'' parameter in your minimap config file. If you aren't happy with the result, try using the ''minmax'' switch for the minimap build to render a smaller part; make sure the different images overlap so that there is a smooth transition ingame.&lt;br /&gt;
&lt;br /&gt;
When the map is too cluttered, the only solution is to cut parts of it and make differents zones for the different levels of your map. To do this remove all the parts you don't want to see and fill the &amp;quot;holes&amp;quot; left in you map with a solid brush (to avoid leaks).&lt;br /&gt;
&lt;br /&gt;
=== Processing the images ===&lt;br /&gt;
&lt;br /&gt;
Ideally, the images will be rendered on a transparent background, perhaps with some translucent areas (e.g. indicating floors). If you have a grey-scale image without an alpha channel, it's possible to turn this into a transparent background by using a graphics package such as GIMP.&lt;br /&gt;
&lt;br /&gt;
The procedure is as follows:&lt;br /&gt;
&lt;br /&gt;
* Load the image. There will be a single layer containing the map.&lt;br /&gt;
* Add a layer mask to the layer. You need to set the mask to a grey-scale representation of the layer (GIMP has an option for this when creating the mask).&lt;br /&gt;
* Set the background painting colour to white.&lt;br /&gt;
* Clear the layer (not its mask) to the background colour. This will leave only white showing through the layer mask.&lt;br /&gt;
* Save the image as .tga, .png or .webp.&lt;br /&gt;
&lt;br /&gt;
=== Creating the minimap file ===&lt;br /&gt;
&lt;br /&gt;
To create the minimap follow the manual, look at the example in the simple tutorial or look at an existing minimap file. You'll have to add parameters and potentially more zones. You can keep most parameters to their default value. The tricky part are the ''bounds'' and ''image'' parameters.&lt;br /&gt;
&lt;br /&gt;
For the ''bounds'' parameter you can either:&lt;br /&gt;
* picks the points coordinates by hand in netRadiant&lt;br /&gt;
* use the 6 ''size_texcoords'' numbers in the q3map2 output&lt;br /&gt;
* use the parameter you gave to the ''minmax'' q3map2 switch is you used it.&lt;br /&gt;
These numbers will make a somewhat good default value for the zone bounds then you can tweak it so that it to your taste. Note that the numbers must always by &amp;lt;xmin&amp;gt; then &amp;lt;xmax&amp;gt; as in the doc, otherwise the zone will never be used. You can use multiple zones with the same image to define a more complex shape.&lt;br /&gt;
&lt;br /&gt;
For the ''image'' parameter, first use the image filename without the extension then big the four numbers highlighted in the q3map2 log below and paste them in the same order (do not confuse ''size'' and ''size_texcoords'').&lt;br /&gt;
&lt;br /&gt;
[[File:Minimap_q3map2_texcoords.png]]&lt;br /&gt;
&lt;br /&gt;
== Minimap file manual ==&lt;br /&gt;
&lt;br /&gt;
A minimap file has the following structure (with at least one zone block)&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     &amp;lt;zone blocks or global parameters&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
With each zone block with the following structure&lt;br /&gt;
&lt;br /&gt;
 zone {&lt;br /&gt;
     &amp;lt;zone-specific parameters&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The zone are used to show different images in different regions of the map. When a player gets outside the bounds of the zone he is currently on, zones will be searched in the order defined in the file to choose the new image. If no zone fits then the last one defined will be used. This way you can define a default zone by putting at the end of the minimap file the following zone block:&lt;br /&gt;
&lt;br /&gt;
 zone {&lt;br /&gt;
     bounds 0.0 0.0 0.0 0.0 0.0 0.0&lt;br /&gt;
     &amp;lt;other parameters&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Global parameters ===&lt;br /&gt;
&lt;br /&gt;
==== backgroundColor ====&lt;br /&gt;
&lt;br /&gt;
 backgroundColor &amp;lt;float r&amp;gt; &amp;lt;float g&amp;gt; &amp;lt;float b&amp;gt; &amp;lt;float a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Chooses the color of the background of the map. Defaults to opaque black. If the map has been generated by q3map2 you most probably to leave it to opaque black. You can use a transparent background but it won't play well with semi-transparent maps; you'd better use a binary transparency and a semi-transparent background color.&lt;br /&gt;
&lt;br /&gt;
==== globalScale ====&lt;br /&gt;
&lt;br /&gt;
 globalScale &amp;lt;float ratio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Multiplies the size of the minimap and all the minimap objects by the given ratio: it is a sort of global zoom of the map. Defaults to 1.0.&lt;br /&gt;
&lt;br /&gt;
=== Zone-specific parameters ===&lt;br /&gt;
&lt;br /&gt;
Each zone block must have a bounds and image parameter or an error will be generated.&lt;br /&gt;
&lt;br /&gt;
==== bounds ====&lt;br /&gt;
&lt;br /&gt;
 bounds &amp;lt;float xmin&amp;gt; &amp;lt;float ymin&amp;gt; &amp;lt;float zmin&amp;gt; &amp;lt;float xmax&amp;gt; &amp;lt;float ymax&amp;gt; &amp;lt;float zmax&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines in which &amp;quot;box volume&amp;quot; this zone is in effect. The arguments are world units and must be in that order (xmin &amp;lt; xmax, ...)&lt;br /&gt;
&lt;br /&gt;
==== image ====&lt;br /&gt;
&lt;br /&gt;
 image &amp;lt;filename&amp;gt; &amp;lt;float xmin&amp;gt; &amp;lt;float ymin&amp;gt; &amp;lt;float xmax&amp;gt; &amp;lt;float ymax&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Defines which image to use and what rectangular area that image represents in the world. The four position arguments are in world units; they are the X and Y bounds of a brush that would cover the whole minimap. The filename should ideally be without the file extension (you could theoretically use a shader name too).&lt;br /&gt;
&lt;br /&gt;
==== scale ====&lt;br /&gt;
&lt;br /&gt;
 scale &amp;lt;float ratio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the player is inside the zone, multiplies the size of the minimap and all the minimap objects by the given ratio. Defaults to 1.0.&lt;br /&gt;
&lt;br /&gt;
== q3map2 minimap options ==&lt;br /&gt;
&lt;br /&gt;
The q3map2 commandline looks like this in netRadiant:&lt;br /&gt;
&lt;br /&gt;
 [q3map2] -minimap &amp;lt;switches&amp;gt; &amp;quot;[MapFile]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Color&amp;quot; switches ===&lt;br /&gt;
&lt;br /&gt;
==== autolevel ====&lt;br /&gt;
&lt;br /&gt;
 -autolevel&lt;br /&gt;
&lt;br /&gt;
Tries to find automatically the right contrast and brightness values to use. Defaults to off.&lt;br /&gt;
&lt;br /&gt;
==== boost ====&lt;br /&gt;
&lt;br /&gt;
 -boost &amp;lt;float b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the gamma of the resulting image using the following formula color' = color / ((b - 1) * color + 1). Defaults to 1.0. (the pass is made before the contrast/sharpen pass)&lt;br /&gt;
&lt;br /&gt;
==== contrast ====&lt;br /&gt;
&lt;br /&gt;
 -contrast &amp;lt;float c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the contrast of the resulting image using the following formula color' = color * c + sharpen. Defaults to 1.0. (the pass is made after the boost pass)&lt;br /&gt;
&lt;br /&gt;
==== noautolevel ====&lt;br /&gt;
&lt;br /&gt;
 -noautolevel&lt;br /&gt;
&lt;br /&gt;
Will not try to find automatically the right contrast and brightness values to use. Defaults to on.&lt;br /&gt;
&lt;br /&gt;
==== sharpen ====&lt;br /&gt;
&lt;br /&gt;
 -sharpen &amp;lt;float s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the brightness of the resulting image using the following formula color' = color * contrast + s. Defaults to 1.0. (the pass is made after the boost pass)&lt;br /&gt;
&lt;br /&gt;
=== Output control switches ===&lt;br /&gt;
&lt;br /&gt;
==== black ====&lt;br /&gt;
&lt;br /&gt;
 -black&lt;br /&gt;
&lt;br /&gt;
Writes the resulting minimap as a black TGA file with levels of transparency. (It was not tested yet, maybe the engine will treat it as a completely black image)&lt;br /&gt;
&lt;br /&gt;
==== gray ====&lt;br /&gt;
&lt;br /&gt;
 -gray&lt;br /&gt;
&lt;br /&gt;
Writes the image as a GRAY8 TGA file.&lt;br /&gt;
&lt;br /&gt;
==== o ====&lt;br /&gt;
&lt;br /&gt;
 -o &amp;lt;filename.tga&amp;gt;&lt;br /&gt;
&lt;br /&gt;
THIS IS SET AUTOMATICALLY BY NETRADIANT. Sets the filename of the output file.&lt;br /&gt;
&lt;br /&gt;
==== white ====&lt;br /&gt;
&lt;br /&gt;
 -white&lt;br /&gt;
&lt;br /&gt;
Writes the resulting minimap as a white TGA file with levels of transparency. (It seems our engine converts it in levels of gray)&lt;br /&gt;
&lt;br /&gt;
=== Region switches ===&lt;br /&gt;
&lt;br /&gt;
==== border ====&lt;br /&gt;
&lt;br /&gt;
 -border &amp;lt;float ratio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adds borders to the image with size (image_size * ratio). Defaults to 0.0 (at least for Tremulous).&lt;br /&gt;
&lt;br /&gt;
==== keepaspect ====&lt;br /&gt;
&lt;br /&gt;
 -keepaspect&lt;br /&gt;
&lt;br /&gt;
Makes it so that the resulting image will keep the aspect ratio (a square will stay a square) by adding empty space. Defaults to on.&lt;br /&gt;
&lt;br /&gt;
==== minmax ====&lt;br /&gt;
&lt;br /&gt;
 -minmax &amp;lt;float xmin&amp;gt; &amp;lt;float ymin&amp;gt; &amp;lt;float zmin&amp;gt; &amp;lt;float xmax&amp;gt; &amp;lt;float ymax&amp;gt; &amp;lt;float zmax&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restricts the minimap to the part of the map contained in the box defined by the parameters. By default this box is the bounding box of the whole map.&lt;br /&gt;
&lt;br /&gt;
==== nokeepaspect ====&lt;br /&gt;
&lt;br /&gt;
 -nokeepaspect&lt;br /&gt;
&lt;br /&gt;
THIS IS NOT SUPPORTED BY THE UNVANQUISHED MINIMAPS and included for completeness only. Allows q3map2 to not preserve the aspect ratio (in some way). Defaults to off.&lt;br /&gt;
&lt;br /&gt;
==== size ====&lt;br /&gt;
&lt;br /&gt;
 -size &amp;lt;int N&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the sizes of the resulting image to NxN. defaults to 512 for Tremulous.&lt;br /&gt;
&lt;br /&gt;
=== Sampling switches ===&lt;br /&gt;
&lt;br /&gt;
==== random ====&lt;br /&gt;
&lt;br /&gt;
 -random &amp;lt;int n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Makes the minimap generation use random samples and sets the number of samples to take for each pixel of the minimap. Defaults to on and 1.&lt;br /&gt;
&lt;br /&gt;
==== samples ====&lt;br /&gt;
&lt;br /&gt;
 -samples &amp;lt;int n&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Makes the minimap generation use ordered samples and sets the number of samples to take for each pixel of the minimap. Defaults to off and 1.&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Getting_the_source&amp;diff=1997</id>
		<title>Getting the source</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Getting_the_source&amp;diff=1997"/>
		<updated>2013-05-06T02:01:12Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Fetching source tarballs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [https://github.com/Unvanquished/Unvanquished Unvanquished source code] is hosted on GitHub. You can either download a snapshot of the source code in [https://github.com/Unvanquished/Unvanquished/zipball/master ZIP archive form], or you can use Git to clone the repository.&lt;br /&gt;
&lt;br /&gt;
==Installing Git==&lt;br /&gt;
&lt;br /&gt;
If you already have Git installed, you can skip this step.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
Windows users can acquire Git from the [http://code.google.com/p/msysgit/ MSysGit project]. If you would prefer a graphical front-end, there is [http://code.google.com/p/tortoisegit/ TortoiseGit], but MSysGit must be installed regardless.&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
&lt;br /&gt;
Apple has included Git with Xcode since version 4. You may download [https://developer.apple.com/xcode/ Xcode] from  Apple's developer website. Please note that while XCode 4 was available for a very brief time for 32-bit and Snow Leopard users for a small price ($5 from the Mac App Store), this is no longer the case; it is now free, but available only to 64-bit Lion users. Snow Leopard (10.6) users and prior may now only use XCode 3, which does not include Git. If you are one of these users, you may [http://git-scm.com/download/mac acquire a copy of Git] from its site. A [http://git-scm.com/download/gui/mac selection of GUIs for Git] is also available.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Debian &amp;amp; Ubuntu====&lt;br /&gt;
&lt;br /&gt;
Install Git using the package manager:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
====Gentoo====&lt;br /&gt;
&lt;br /&gt;
The ebuilds for Unvanquished (games-fps/unvanquished) and the assets (games-fps/unvanquished-data) are available from the [https://github.com/hasufell/hasufell-overlay ''hasufell''] overlay.&lt;br /&gt;
If you don't have layman installed, you can install it with&lt;br /&gt;
&lt;br /&gt;
 $ emerge layman&lt;br /&gt;
&lt;br /&gt;
Then, adding the overlay and installing should be trivial.&lt;br /&gt;
&lt;br /&gt;
 $ layman -a hasufell&lt;br /&gt;
 $ emerge unvanquished&lt;br /&gt;
&lt;br /&gt;
See [https://bugs.gentoo.org/show_bug.cgi?id=419421 the entry on bugs.gentoo.org] for additional comments about the ebuilds.&lt;br /&gt;
&lt;br /&gt;
==Downloading the source==&lt;br /&gt;
&lt;br /&gt;
===Command line===&lt;br /&gt;
&lt;br /&gt;
====Releases====&lt;br /&gt;
&lt;br /&gt;
[http://unvanquished.net/downloads/sources/ Release tarballs can be found here.] The tarballs can be unpacked using some GUI-based tools or via a shell:&lt;br /&gt;
&lt;br /&gt;
 $ tar xf unvanquished-0.15.0.tar.xz&lt;br /&gt;
&lt;br /&gt;
Either way, the source will be unpacked into a directory whose name reflects the tarball's name; in the example, it will be named ''unvanquised-0.15.0''.&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
The following commands will work on any platform.&lt;br /&gt;
&lt;br /&gt;
 $ git clone https://github.com/Unvanquished/Unvanquished.git&lt;br /&gt;
&lt;br /&gt;
This will create a directory called ''Unvanquished''.&lt;br /&gt;
&lt;br /&gt;
If you would like to get the source for a particular version, [http://git-scm.com/docs/git-checkout check out] the associated [http://git-scm.com/book/en/Git-Basics-Tagging tag]:&lt;br /&gt;
&lt;br /&gt;
 $ git checkout {{CurrentVersion|Tag}}&lt;br /&gt;
&lt;br /&gt;
To see the list of tags available to check out,&lt;br /&gt;
&lt;br /&gt;
 $ git tag&lt;br /&gt;
&lt;br /&gt;
will produce a list.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Please see the [[#Command_line|command line]] instructions.&lt;br /&gt;
&lt;br /&gt;
===Mac OS X===&lt;br /&gt;
&lt;br /&gt;
====Command Line====&lt;br /&gt;
&lt;br /&gt;
Open a Terminal (&amp;lt;code&amp;gt;/Applications/Utilities/Terminal&amp;lt;/code&amp;gt;) and follow the [[#Command_line|command line]] instructions.&lt;br /&gt;
&lt;br /&gt;
====Xcode 4====&lt;br /&gt;
&lt;br /&gt;
# Start Xcode.&lt;br /&gt;
# Open the Organizer window (Window &amp;amp;rarr; Organizer or {{Hotkey|Shift}}{{Hotkey|MacCommand}}{{Hotkey|2}})&lt;br /&gt;
# Hit the &amp;quot;Repositories&amp;quot; button on the top bar.&lt;br /&gt;
# Hit the &amp;quot;+&amp;quot; button in the lower-left corner, and choose &amp;quot;Checkout or Clone Repository&amp;amp;hellip;&amp;quot;.&lt;br /&gt;
# In the rollout sheet that appears, enter &amp;lt;code&amp;gt;https://github.com/Unvanquished/Unvanquished.git&amp;lt;/code&amp;gt; into the &amp;quot;Location&amp;quot; field, and hit &amp;quot;Next&amp;quot;.&lt;br /&gt;
# Enter &amp;quot;Unvanquished&amp;quot; into the &amp;quot;Name&amp;quot; field, ensure that the &amp;quot;Type&amp;quot; combo box is set to &amp;quot;Git&amp;quot;, and hit &amp;quot;Clone&amp;quot;.&lt;br /&gt;
# You will be prompted where to save the repository. Choose a location and hit &amp;quot;Clone&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
====TortoiseGIT====&lt;br /&gt;
&lt;br /&gt;
# Make and enter a new folder to store the source code in&lt;br /&gt;
# Right click the inside of the folder &amp;amp;rarr; Git Clone...&lt;br /&gt;
# In the Url textbox enter: &amp;lt;code&amp;gt;https://github.com/Unvanquished/Unvanquished.git&amp;lt;/code&amp;gt;&lt;br /&gt;
# Hit OK.&lt;br /&gt;
&lt;br /&gt;
====Command Line====&lt;br /&gt;
&lt;br /&gt;
Open the MsysGit terminal and and follow the [[#Command_line|command line]] instructions.&lt;br /&gt;
&lt;br /&gt;
==Keeping your copy of the source up-to-date==&lt;br /&gt;
&lt;br /&gt;
For more information on using git, an excellent resource is the official [http://git-scm.com/book git book], available to read online for free.&lt;br /&gt;
&lt;br /&gt;
===TortoiseGit===&lt;br /&gt;
&lt;br /&gt;
# Right-click somewhere in the source directory, and choose &amp;quot;Git Sync&amp;quot;. &amp;lt;!-- TODO: finish instructions --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Command-line (All platforms)===&lt;br /&gt;
&lt;br /&gt;
{{Note|content=&lt;br /&gt;
If you have checked out a particular commit or tag (e.g., &amp;lt;code&amp;gt;{{CurrentVersion|Tag}}&amp;lt;/code&amp;gt;), git will inform you afterwards that you are in what it refers to as a &amp;quot;detached head&amp;quot; state. Before you update your copy of the source, you should check out the master branch first:&lt;br /&gt;
&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
To pull (i.e., fetch and merge) changes made since you checked out the source&amp;amp;mdash;that is, to update your working copy to match the current state of the official repository&amp;amp;mdash;you (typically) need only run one command:&lt;br /&gt;
&lt;br /&gt;
 $ git pull origin master&lt;br /&gt;
&lt;br /&gt;
==Compiling==&lt;br /&gt;
&lt;br /&gt;
After getting the source code, you can [[Compiling the source|compile]] it.&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1983</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1983"/>
		<updated>2013-04-22T01:46:43Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Example for /buy (sell-all binding)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
{{note|content=The game handles &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;commands specially, in a way which has implications concerning usage.&lt;br /&gt;
&lt;br /&gt;
There is one way to use them in bindings which works properly, and that's to use the command on its own.&lt;br /&gt;
&lt;br /&gt;
It is possible to have other commands following one of these ''but'' this is not well handled – the game appends information about when the key was pressed but, at present, assumes that there's just one command present in the binding. It also causes problems on key-up when the &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;command is the first command since, while the it will (correctly) be converted to a &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;command, any following commands will be executed unmodifed, except for the last one (which gets the timing information).&lt;br /&gt;
&lt;br /&gt;
If you need to use a binding which contains one of these with other commands then use something like “&amp;lt;samp&amp;gt;wait; +taunt; wait; -taunt&amp;lt;/samp&amp;gt;”. Timing information will not be added; the server has information which allows it to calculate ‘close enough’ timing information, and there may be a knock-on effect on an immediately-following action.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===buy===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 15.)&amp;lt;/i&amp;gt; This command can take multiple parameters. It can also be used to sell items.&lt;br /&gt;
&lt;br /&gt;
For example, if you want a sell-all bind, you would use “&amp;lt;samp&amp;gt;buy -all rifle&amp;lt;/samp&amp;gt;” – this will get rid of all equipment and re-equip you with a rifle (though if you're building something, you won't lose your construction kit and consequently will not acquire a rifle).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
===sell===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 15.)&amp;lt;/i&amp;gt; This command can take multiple parameters.&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Condition handling==&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1982</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1982"/>
		<updated>2013-04-22T01:41:51Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Changes to /buy and /sell&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
{{note|content=The game handles &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;commands specially, in a way which has implications concerning usage.&lt;br /&gt;
&lt;br /&gt;
There is one way to use them in bindings which works properly, and that's to use the command on its own.&lt;br /&gt;
&lt;br /&gt;
It is possible to have other commands following one of these ''but'' this is not well handled – the game appends information about when the key was pressed but, at present, assumes that there's just one command present in the binding. It also causes problems on key-up when the &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;command is the first command since, while the it will (correctly) be converted to a &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;command, any following commands will be executed unmodifed, except for the last one (which gets the timing information).&lt;br /&gt;
&lt;br /&gt;
If you need to use a binding which contains one of these with other commands then use something like “&amp;lt;samp&amp;gt;wait; +taunt; wait; -taunt&amp;lt;/samp&amp;gt;”. Timing information will not be added; the server has information which allows it to calculate ‘close enough’ timing information, and there may be a knock-on effect on an immediately-following action.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===buy===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 15.)&amp;lt;/i&amp;gt; This command can take multiple parameters. It can also be used to sell items. For example, if you want a sell-all bind, you would use “&amp;lt;samp&amp;gt;buy -all rifle&amp;lt;/samp&amp;gt;”.&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
===sell===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;(Changed in Alpha 15.)&amp;lt;/i&amp;gt; This command can take multiple parameters.&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Condition handling==&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1981</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1981"/>
		<updated>2013-04-22T01:37:23Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Gameplay commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
{{note|content=The game handles &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;commands specially, in a way which has implications concerning usage.&lt;br /&gt;
&lt;br /&gt;
There is one way to use them in bindings which works properly, and that's to use the command on its own.&lt;br /&gt;
&lt;br /&gt;
It is possible to have other commands following one of these ''but'' this is not well handled – the game appends information about when the key was pressed but, at present, assumes that there's just one command present in the binding. It also causes problems on key-up when the &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;command is the first command since, while the it will (correctly) be converted to a &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;command, any following commands will be executed unmodifed, except for the last one (which gets the timing information).&lt;br /&gt;
&lt;br /&gt;
If you need to use a binding which contains one of these with other commands then use something like “&amp;lt;samp&amp;gt;wait; +taunt; wait; -taunt&amp;lt;/samp&amp;gt;”. Timing information will not be added; the server has information which allows it to calculate ‘close enough’ timing information, and there may be a knock-on effect on an immediately-following action.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Condition handling==&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1980</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1980"/>
		<updated>2013-04-22T01:36:26Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Split out if, modcase and strcmp into their own section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
{{note|content=The game handles these commands specially, in a way which has implications concerning usage.&lt;br /&gt;
&lt;br /&gt;
There is one way to use them in bindings which works properly, and that's to use the command on its own.&lt;br /&gt;
&lt;br /&gt;
It is possible to have other commands following one of these ''but'' this is not well handled – the game appends information about when the key was pressed but, at present, assumes that there's just one command present in the binding. It also causes problems on key-up when the &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;command is the first command since, while the it will (correctly) be converted to a &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;command, any following commands will be executed unmodifed, except for the last one (which gets the timing information).&lt;br /&gt;
&lt;br /&gt;
If you need to use a binding which contains one of these with other commands then use something like “&amp;lt;samp&amp;gt;wait; +taunt; wait; -taunt&amp;lt;/samp&amp;gt;”. Timing information will not be added; the server has information which allows it to calculate ‘close enough’ timing information, and there may be a knock-on effect on an immediately-following action.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Condition handling==&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1979</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1979"/>
		<updated>2013-04-22T01:33:10Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Possible pitfalls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
{{note|content=The game handles these commands specially, in a way which has implications concerning usage.&lt;br /&gt;
&lt;br /&gt;
There is one way to use them in bindings which works properly, and that's to use the command on its own.&lt;br /&gt;
&lt;br /&gt;
It is possible to have other commands following one of these ''but'' this is not well handled – the game appends information about when the key was pressed but, at present, assumes that there's just one command present in the binding. It also causes problems on key-up when the &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;command is the first command since, while the it will (correctly) be converted to a &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;command, any following commands will be executed unmodifed, except for the last one (which gets the timing information).&lt;br /&gt;
&lt;br /&gt;
If you need to use a binding which contains one of these with other commands then use something like “&amp;lt;samp&amp;gt;wait; +taunt; wait; -taunt&amp;lt;/samp&amp;gt;”. Timing information will not be added; the server has information which allows it to calculate ‘close enough’ timing information, and there may be a knock-on effect on an immediately-following action.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1978</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1978"/>
		<updated>2013-04-22T01:32:16Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Use of ±commands in bindings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
====Possible pitfalls====&lt;br /&gt;
The game handles these commands specially, in a way which has implications concerning usage.&lt;br /&gt;
&lt;br /&gt;
There is one way to use them in bindings which works properly, and that's to use the command on its own.&lt;br /&gt;
&lt;br /&gt;
It is possible to have other commands following one of these ''but'' this is not well handled – the game appends information about when the key was pressed but, at present, assumes that there's just one command present in the binding. It also causes problems on key-up when the &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;command is the first command since, while the it will (correctly) be converted to a &amp;lt;tt&amp;gt;-&amp;lt;/tt&amp;gt;command, any following commands will be executed unmodifed, except for the last one (which gets the timing information).&lt;br /&gt;
&lt;br /&gt;
If you need to use a binding which contains one of these with other commands then use something like “&amp;lt;samp&amp;gt;wait; +taunt; wait; -taunt&amp;lt;/samp&amp;gt;”. Timing information will not be added; the server has information which allows it to calculate ‘close enough’ timing information, and there may be a knock-on effect on an immediately-following action.&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=UI/Implementation&amp;diff=1901</id>
		<title>UI/Implementation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=UI/Implementation&amp;diff=1901"/>
		<updated>2013-03-30T10:41:50Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Ownerdraws */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;User interface code runs in its own [[Virtual_machines|virtual machine]]. Source code for handling user interface controls and loading UI files may be found in &amp;lt;code&amp;gt;[https://github.com/Unvanquished/Unvanquished/tree/master/src/gamelogic/ui src/gamelogic/ui/]&amp;lt;/code&amp;gt;; the actual UI content is controlled by configuration files found in &amp;lt;code&amp;gt;[https://github.com/Unvanquished/Unvanquished/tree/master/main/ui main/ui/]&amp;lt;/code&amp;gt;. The list of menu files is found in &amp;lt;code&amp;gt;[https://github.com/Unvanquished/Unvanquished/tree/master/main/ui/menus.txt main/ui/menus.txt]&amp;lt;/code&amp;gt;. The game will not run without this file present.&lt;br /&gt;
&lt;br /&gt;
==Weapon icons==&lt;br /&gt;
&lt;br /&gt;
Weapon icons are controlled by the &amp;lt;code&amp;gt;icon&amp;lt;/code&amp;gt; entry in the weapon's [[Exporting_Models#Weapons_2|configuration file]].&lt;br /&gt;
&lt;br /&gt;
==Editing tools==&lt;br /&gt;
&lt;br /&gt;
There is a Quake 3 HUD editor called [http://plrf.org/q3cpmahudeditor/ q3cmpa hud editor] (which is no longer maintained), and a newer version called [http://plrf.org/superhudeditor/ SuperHud Editor], which appears to be built using wxWidgets.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
===Game crashes for an unknown reason===&lt;br /&gt;
&lt;br /&gt;
Your &amp;lt;code&amp;gt;[https://github.com/Unvanquished/Unvanquished/tree/master/main/ui/menudef.h main/ui/menudef.h]&amp;lt;/code&amp;gt; file may be out of date. &amp;lt;!-- TODO: add bt to where this usually happens --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Transition to libRocket==&lt;br /&gt;
&lt;br /&gt;
A move to use [http://librocket.com/ libRocket] has been planned with support underway. This middleware will allow creating the user interface using HTML and CSS. If you are interested in assisting with the transition, please [[Main_Page#Contributing|contact a member of the team]] to find out how to help.&lt;br /&gt;
&lt;br /&gt;
===libRocket Progress===&lt;br /&gt;
====Data Sources (aka feeders)====&lt;br /&gt;
*Resolutions - list of resolutions&lt;br /&gt;
*VoIP Input - Input devices for OpenAL&lt;br /&gt;
*AL Output - Output devices for OpenAL&lt;br /&gt;
*HUDS - List of HUDs to choose from&lt;br /&gt;
*Languages - List of languages&lt;br /&gt;
*Mods - List of mods&lt;br /&gt;
*Demos - List of demos&lt;br /&gt;
*Maps - List of maps&lt;br /&gt;
*Players on team - List of players on each team&lt;br /&gt;
*Players - List of players. This and above can probably be combined.&lt;br /&gt;
*Server status - Detailed information on a server // Probably can implement without a feeder.&lt;br /&gt;
*Find player - Results for a multiserver player search.&lt;br /&gt;
*Team list - List of available teams&lt;br /&gt;
*Classes - List of classes per team&lt;br /&gt;
*Items - List of available items per team&lt;br /&gt;
*Armory items - List of items. Can probably be merged with above.&lt;br /&gt;
*Alien evo classes - List of classes that can be evo'd to.&lt;br /&gt;
*Buildable menu - List of buildables that can be built&lt;br /&gt;
*Ignore - List of players/patterns player has ignored&lt;br /&gt;
*Help - List of help topics&lt;br /&gt;
&lt;br /&gt;
====Missing Elements====&lt;br /&gt;
*Chat field - Field for chat.&lt;br /&gt;
*Selectable datagrid - Selectable table, essentially. Warsow has this. Can probably port.&lt;br /&gt;
*Model view - Display a model. Low priority imo. Won't do unless there is demand.&lt;br /&gt;
*Keyselect - Detect which key is pressed. For binds.&lt;br /&gt;
&lt;br /&gt;
====Ownerdraws====&lt;br /&gt;
*&amp;lt;health /&amp;gt; - Player health&lt;br /&gt;
*&amp;lt;bar item=(current value) maxValue=(max value) img=(image to draw) direction=(left|right|up|down) /&amp;gt; - Draw a bar for this item. Both $item and $maxvalue are cvars that say the value and maxvalue. img determines which image to draw, if a rectangular bar is not desired. direction is direction it decreases.&lt;br /&gt;
*&amp;lt;ammo type=(all|clip) /&amp;gt; - Current ammo value. Type determines whetehr to show current clip's ammo or total ammo.&lt;br /&gt;
*&amp;lt;clips /&amp;gt; - Current number of clips&lt;br /&gt;
*&amp;lt;btimer /&amp;gt; - Build timer display&lt;br /&gt;
*&amp;lt;credits precision=(decimal places) /&amp;gt; - Credits/evos available.&lt;br /&gt;
*&amp;lt;stamina /&amp;gt; - Available stamina&lt;br /&gt;
*&amp;lt;boost /&amp;gt; - Boosted status and time remaining&lt;br /&gt;
*&amp;lt;selected /&amp;gt; - Item selected&lt;br /&gt;
*&amp;lt;weapon /&amp;gt;  - selected weapon icon&lt;br /&gt;
*&amp;lt;wallclimb /&amp;gt; - Wall climbing status indicator&lt;br /&gt;
*&amp;lt;alien_sense /&amp;gt; - Alien radar&lt;br /&gt;
*&amp;lt;scanner /&amp;gt; - Human radar&lt;br /&gt;
*&amp;lt;useable_buildable /&amp;gt; - Indicator that you are near a usable buildable&lt;br /&gt;
*&amp;lt;location /&amp;gt; - Player location text&lt;br /&gt;
*&amp;lt;team_overlay /&amp;gt; - Team overlay which shows useful team info&lt;br /&gt;
*&amp;lt;fps /&amp;gt; - Frames per second&lt;br /&gt;
*&amp;lt;timer /&amp;gt; - Time since game began&lt;br /&gt;
*&amp;lt;lagometer /&amp;gt; - Lagometer. Quality of connection&lt;br /&gt;
*&amp;lt;speedometer /&amp;gt; - Wheeee. Current speed.&lt;br /&gt;
*&amp;lt;crosshair_name /&amp;gt; - Name of player in crosshair&lt;br /&gt;
*&amp;lt;stage_report /&amp;gt; - Stage report. % of mapcontrol needed for next stage&lt;br /&gt;
*&amp;lt;demo /&amp;gt; - State of demo. eg, recording/playing&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=UI/Implementation&amp;diff=1900</id>
		<title>UI/Implementation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=UI/Implementation&amp;diff=1900"/>
		<updated>2013-03-30T10:41:28Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Format string is a bad idea for credits/evos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;User interface code runs in its own [[Virtual_machines|virtual machine]]. Source code for handling user interface controls and loading UI files may be found in &amp;lt;code&amp;gt;[https://github.com/Unvanquished/Unvanquished/tree/master/src/gamelogic/ui src/gamelogic/ui/]&amp;lt;/code&amp;gt;; the actual UI content is controlled by configuration files found in &amp;lt;code&amp;gt;[https://github.com/Unvanquished/Unvanquished/tree/master/main/ui main/ui/]&amp;lt;/code&amp;gt;. The list of menu files is found in &amp;lt;code&amp;gt;[https://github.com/Unvanquished/Unvanquished/tree/master/main/ui/menus.txt main/ui/menus.txt]&amp;lt;/code&amp;gt;. The game will not run without this file present.&lt;br /&gt;
&lt;br /&gt;
==Weapon icons==&lt;br /&gt;
&lt;br /&gt;
Weapon icons are controlled by the &amp;lt;code&amp;gt;icon&amp;lt;/code&amp;gt; entry in the weapon's [[Exporting_Models#Weapons_2|configuration file]].&lt;br /&gt;
&lt;br /&gt;
==Editing tools==&lt;br /&gt;
&lt;br /&gt;
There is a Quake 3 HUD editor called [http://plrf.org/q3cpmahudeditor/ q3cmpa hud editor] (which is no longer maintained), and a newer version called [http://plrf.org/superhudeditor/ SuperHud Editor], which appears to be built using wxWidgets.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
===Game crashes for an unknown reason===&lt;br /&gt;
&lt;br /&gt;
Your &amp;lt;code&amp;gt;[https://github.com/Unvanquished/Unvanquished/tree/master/main/ui/menudef.h main/ui/menudef.h]&amp;lt;/code&amp;gt; file may be out of date. &amp;lt;!-- TODO: add bt to where this usually happens --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Transition to libRocket==&lt;br /&gt;
&lt;br /&gt;
A move to use [http://librocket.com/ libRocket] has been planned with support underway. This middleware will allow creating the user interface using HTML and CSS. If you are interested in assisting with the transition, please [[Main_Page#Contributing|contact a member of the team]] to find out how to help.&lt;br /&gt;
&lt;br /&gt;
===libRocket Progress===&lt;br /&gt;
====Data Sources (aka feeders)====&lt;br /&gt;
*Resolutions - list of resolutions&lt;br /&gt;
*VoIP Input - Input devices for OpenAL&lt;br /&gt;
*AL Output - Output devices for OpenAL&lt;br /&gt;
*HUDS - List of HUDs to choose from&lt;br /&gt;
*Languages - List of languages&lt;br /&gt;
*Mods - List of mods&lt;br /&gt;
*Demos - List of demos&lt;br /&gt;
*Maps - List of maps&lt;br /&gt;
*Players on team - List of players on each team&lt;br /&gt;
*Players - List of players. This and above can probably be combined.&lt;br /&gt;
*Server status - Detailed information on a server // Probably can implement without a feeder.&lt;br /&gt;
*Find player - Results for a multiserver player search.&lt;br /&gt;
*Team list - List of available teams&lt;br /&gt;
*Classes - List of classes per team&lt;br /&gt;
*Items - List of available items per team&lt;br /&gt;
*Armory items - List of items. Can probably be merged with above.&lt;br /&gt;
*Alien evo classes - List of classes that can be evo'd to.&lt;br /&gt;
*Buildable menu - List of buildables that can be built&lt;br /&gt;
*Ignore - List of players/patterns player has ignored&lt;br /&gt;
*Help - List of help topics&lt;br /&gt;
&lt;br /&gt;
====Missing Elements====&lt;br /&gt;
*Chat field - Field for chat.&lt;br /&gt;
*Selectable datagrid - Selectable table, essentially. Warsow has this. Can probably port.&lt;br /&gt;
*Model view - Display a model. Low priority imo. Won't do unless there is demand.&lt;br /&gt;
*Keyselect - Detect which key is pressed. For binds.&lt;br /&gt;
&lt;br /&gt;
====Ownerdraws====&lt;br /&gt;
*&amp;lt;health /&amp;gt; - Player health&lt;br /&gt;
*&amp;lt;bar item=(current value) maxValue=(max value) img=(image to draw) direction=(left|right|up|down) /&amp;gt; - Draw a bar for this item. Both $item and $maxvalue are cvars that say the value and maxvalue. img determines which image to draw, if a rectangular bar is not desired. direction is direction it decreases.&lt;br /&gt;
*&amp;lt;ammo type=(all|clip) /&amp;gt; - Current ammo value. Type determines whetehr to show current clip's ammo or total ammo.&lt;br /&gt;
*&amp;lt;clips /&amp;gt; - Current number of clips&lt;br /&gt;
*&amp;lt;btimer /&amp;gt; - Build timer display&lt;br /&gt;
*&amp;lt;credits precision=(decimal places)&amp;gt; - Credits/evos available.&lt;br /&gt;
*&amp;lt;stamina /&amp;gt; - Available stamina&lt;br /&gt;
*&amp;lt;boost /&amp;gt; - Boosted status and time remaining&lt;br /&gt;
*&amp;lt;selected /&amp;gt; - Item selected&lt;br /&gt;
*&amp;lt;weapon /&amp;gt;  - selected weapon icon&lt;br /&gt;
*&amp;lt;wallclimb /&amp;gt; - Wall climbing status indicator&lt;br /&gt;
*&amp;lt;alien_sense /&amp;gt; - Alien radar&lt;br /&gt;
*&amp;lt;scanner /&amp;gt; - Human radar&lt;br /&gt;
*&amp;lt;useable_buildable /&amp;gt; - Indicator that you are near a usable buildable&lt;br /&gt;
*&amp;lt;location /&amp;gt; - Player location text&lt;br /&gt;
*&amp;lt;team_overlay /&amp;gt; - Team overlay which shows useful team info&lt;br /&gt;
*&amp;lt;fps /&amp;gt; - Frames per second&lt;br /&gt;
*&amp;lt;timer /&amp;gt; - Time since game began&lt;br /&gt;
*&amp;lt;lagometer /&amp;gt; - Lagometer. Quality of connection&lt;br /&gt;
*&amp;lt;speedometer /&amp;gt; - Wheeee. Current speed.&lt;br /&gt;
*&amp;lt;crosshair_name /&amp;gt; - Name of player in crosshair&lt;br /&gt;
*&amp;lt;stage_report /&amp;gt; - Stage report. % of mapcontrol needed for next stage&lt;br /&gt;
*&amp;lt;demo /&amp;gt; - State of demo. eg, recording/playing&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Armoury&amp;diff=1893</id>
		<title>Armoury</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Armoury&amp;diff=1893"/>
		<updated>2013-03-24T20:52:50Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Redirected page to Armory&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Armory]]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1262</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1262"/>
		<updated>2013-02-03T23:00:08Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{StatusWIP|The information on this page is incomplete.}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Compiling_the_source&amp;diff=1261</id>
		<title>Compiling the source</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Compiling_the_source&amp;diff=1261"/>
		<updated>2013-02-03T22:56:07Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Debian/Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
First, you need to [[Getting_the_source|acquire the source code]].&lt;br /&gt;
&lt;br /&gt;
Regardless of what interface you may use to compile the source, you will need [http://www.cmake.org/cmake/resources/software.html CMake] to generate makefiles. You will also need to install [https://developer.apple.com/xcode/ XCode] (making sure to choose to install the command-line utilities when prompted by the installer).&lt;br /&gt;
&lt;br /&gt;
Then, you will need to acquire (and in some cases, manually compile) at a minimum the [[#Dependencies|necessary libraries]].&lt;br /&gt;
&lt;br /&gt;
Once you have the source code and the libraries installed, you may actually proceed to compile the source. You have several options:&lt;br /&gt;
* '''Compile the source at the command line'''. This is the easiest if you would just like to compile the game to use yourself and you do not intend to work on the code.&lt;br /&gt;
* '''Compile the source using an IDE'''. This is preferred if you intend on developing the source.&lt;br /&gt;
** XCode is Apple's flagship IDE and you should have installed to compile the source regardless of which method you use.&lt;br /&gt;
** [http://qt-project.org/downloads QtCreator] is cross-platform and provides real-time feedback of syntax errors, a Vim mode, as well as other features.&lt;br /&gt;
** [http://www.codeblocks.org/ Code::Blcoks] is also cross-platform but lacks some of the features of XCode and QtCreator.&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
&lt;br /&gt;
You only need to use one of the following methods (HomeBrew or compiling by hand). Please try and avoid mixing methods as this may produce unexpected results.&lt;br /&gt;
&lt;br /&gt;
Unvanquished requires the following libraries:&lt;br /&gt;
* [[#JPEG|JPEG]], version 8 or higher. (Version 6 was known to have problems)&lt;br /&gt;
* [[#Simple_DirectMedia_Layer_.28SDL.29|Simple DirectMedia Layer]] (The binary provided by libsdl.org causes graphical corruptions. Compile from source or use homebrew/macports)&lt;br /&gt;
* [[#The_OpenGL_Extension_Wrangler_Library_.28GLEW.29|The OpenGL Extension Wrangler Library]]&lt;br /&gt;
* CuRL&lt;br /&gt;
* [[#The_GNU_MP_Bignum_Library_.28libgmp.29|GMP]]&lt;br /&gt;
* [[#WebP|WebP]] (v0.2.0 or newer)&lt;br /&gt;
&lt;br /&gt;
The following libraries are optional:&lt;br /&gt;
* Theora&lt;br /&gt;
* Speex&lt;br /&gt;
* [[#Ogg|Ogg]]&lt;br /&gt;
* [[#Vorbis|Vorbis]]&lt;br /&gt;
&lt;br /&gt;
====HomeBrew====&lt;br /&gt;
Install [http://mxcl.github.com/homebrew/ HomeBrew] and then run the following command&lt;br /&gt;
&lt;br /&gt;
 $ brew install nettle libjpeg curl sdl webp xvid gmp glew speex libvorbis theora&lt;br /&gt;
&lt;br /&gt;
All the necessary libraries should now have been installed.&lt;br /&gt;
&lt;br /&gt;
====Compiling by hand====&lt;br /&gt;
The following are shell scripts that download, compile, and install various libraries. This is more time consuming then other methods but might be useful if you need more control over your libraries&lt;br /&gt;
&lt;br /&gt;
=====JPEG=====&lt;br /&gt;
&lt;br /&gt;
 $ curl http://www.ijg.org/files/jpegsrc.v8d.tar.gz &amp;gt; jpegsrc.v8d.tar.gz&lt;br /&gt;
 $ tar xvzf jpegsrc.v8d.tar.gz&lt;br /&gt;
 $ cd jpeg-8d&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====The OpenGL Extension Wrangler Library (GLEW)=====&lt;br /&gt;
&lt;br /&gt;
 $ curl -L https://sourceforge.net/projects/glew/files/glew/1.7.0/glew-1.7.0.tgz/download &amp;gt; glew-1.7.0.tgz&lt;br /&gt;
 $ tar xvzf glew-1.7.0.tgz&lt;br /&gt;
 $ cd glew-1.7.0&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====Simple DirectMedia Layer (SDL)=====&lt;br /&gt;
&lt;br /&gt;
Do not use the binaries provided by libsdl.org, as these are known to cause issues with gamma and color display. Instead, compile your own:&lt;br /&gt;
&lt;br /&gt;
 $ curl http://www.libsdl.org/release/SDL-1.2.15.tar.gz &amp;gt; SDL-1.2.15.tar.gz&lt;br /&gt;
 $ tar xvzf SDL-1.2.15.tar.gz&lt;br /&gt;
 $ cd SDL-1.2.15&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====The GNU MP Bignum Library (libgmp)=====&lt;br /&gt;
&lt;br /&gt;
 $ curl ftp://ftp.gmplib.org/pub/gmp-5.0.5/gmp-5.0.5.tar.bz2 &amp;gt; gmp-5.0.5.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-5.0.5.tar.bz2&lt;br /&gt;
 $ cd gmp-5.0.5&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====Ogg=====&lt;br /&gt;
&lt;br /&gt;
 $ curl http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz &amp;gt; libogg-1.3.0.tar.gz&lt;br /&gt;
 $ tar xvzf libogg-1.3.0.tar.gz&lt;br /&gt;
 $ cd libogg-1.3.0&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====Vorbis=====&lt;br /&gt;
&lt;br /&gt;
 $ curl http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz &amp;gt; libvorbis-1.3.3.tar.gz&lt;br /&gt;
 $ tar xvzf libvorbis-1.3.3.tar.gz&lt;br /&gt;
 $ cd libvorbis-1.3.3&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
=====WebP=====&lt;br /&gt;
&lt;br /&gt;
You do not need to compile WebP by hand; Google provides binaries for Mac OS X available from their [https://code.google.com/p/webp/downloads/detail?name=libwebp-0.2.0-mac-10.5.tar.gz project page]. You will need version 0.2.0 or newer.&lt;br /&gt;
&lt;br /&gt;
Once downloaded, you must still install the header files and the binary:&lt;br /&gt;
&lt;br /&gt;
 $ curl https://webp.googlecode.com/files/libwebp-0.2.0-mac-10.5.tar.gz &amp;gt; libwebp-0.2.0-mac-10.5.tar.gz&lt;br /&gt;
 $ tar xvzf libwebp-0.2.0-mac-10.5.tar.gz&lt;br /&gt;
 $ cd libwebp-0.2.0-mac-10.5&lt;br /&gt;
 $ sudo cp include/webp /usr/local/include&lt;br /&gt;
 $ sudo cp lib/libwebp.a /usr/local/lib&lt;br /&gt;
&lt;br /&gt;
===Configuring with CMake===&lt;br /&gt;
&lt;br /&gt;
# Run CMake.&lt;br /&gt;
# Enter the location of the source code.&lt;br /&gt;
# Enter the location in which you would like to build the source code. This should be a different directory.&lt;br /&gt;
# Hit &amp;quot;Configure&amp;quot;. You will be prompted as to which generator you would like to use. If you have Xcode installed, choose that. Wait while the configuration process runs. You may have to set the following:&lt;br /&gt;
## If CMake did not find your jpeg headers for some reason, set &amp;lt;code&amp;gt;JPEG_INCLUDE_DIR&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/path/to/Unvanquished/src/libs/jpeg&amp;lt;/code&amp;gt;.&lt;br /&gt;
## Check &amp;lt;code&amp;gt;USE_INTERNAL_CRYPTO&amp;lt;/code&amp;gt; to avoid having to compile nettle and hogweed.&lt;br /&gt;
## Check &amp;lt;code&amp;gt;USE_INTERNAL_SPEEX&amp;lt;/code&amp;gt; to avoid having to compile Speex.&lt;br /&gt;
## Uncheck &amp;lt;code&amp;gt;USE_CIN_THEORA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;USE_CIN_XVID&amp;lt;/code&amp;gt; to avoid having to compile Theora or Xvid. (At present, there are not cutscenes or any such that require it.)&lt;br /&gt;
## '''You will probably not be able to compile with the GLSL optimizer enabled; uncheck &amp;lt;code&amp;gt;USE_GLSL_OPTIMIZER&amp;lt;/code&amp;gt;'''&lt;br /&gt;
## If you have selected to generate XCode project files, make the &amp;lt;code&amp;gt;SDLMAIN_LIBRARY&amp;lt;/code&amp;gt; field blank. This option is not available if you have the generator set to Unix makefiles.&lt;br /&gt;
# Hit &amp;quot;Generate&amp;quot;.&lt;br /&gt;
# You may now close XCode.&lt;br /&gt;
&lt;br /&gt;
===Compiling===&lt;br /&gt;
&lt;br /&gt;
====With XCode====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compilation will fail unless you manually create certain directories needed by the build scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/build/dir/CMakeFiles&lt;br /&gt;
$ mkdir gpp{game,trem,ui}-qvm.dir&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a workaround to {{Issue|101}}.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Either start XCode and open the project file (in the build directory you specified) or double-click the project file in Finder.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open the project file created by CMake, which should be in the build directory you specified.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Change the active target to &amp;quot;ALL_BUILD&amp;quot; and click Product&amp;amp;rarr;Build.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====With Unix Makefiles====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start Terminal (Applications &amp;amp;rarr; Utilities &amp;amp;rarr; Terminal).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Input the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/Unvanquished-build&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are on a multi-core or multi-processor machine, you may speed up the process by passing the &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; argument followed by the number of available cores to &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;; e.g., &amp;lt;code&amp;gt;make -j4&amp;lt;/code&amp;gt;. Note that doing so makes reading error messages more difficult, as multiple instances of the compiler will print to the screen at once, causing information to appear out of order.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testing the build===&lt;br /&gt;
&lt;br /&gt;
====With XCode 4====&lt;br /&gt;
&lt;br /&gt;
To test the game, select the &amp;quot;client&amp;quot; scheme from the combo box on the toolbar, and click the run button or press {{Hotkey|MacCommand}}{{Hotkey|R}}.&lt;br /&gt;
&lt;br /&gt;
====With Unix Makefiles====&lt;br /&gt;
&lt;br /&gt;
After compiling, you'll have to place the data files in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; directory in your build directory. [[#Acquiring the Game Files|For download instructions, see below.]]&lt;br /&gt;
&lt;br /&gt;
Your file structure should look as follows:&lt;br /&gt;
&lt;br /&gt;
[[File:Build_dir_Mac_OS_X.png]]&lt;br /&gt;
&lt;br /&gt;
You may now start the application as such:&lt;br /&gt;
&lt;br /&gt;
 $ ./daemon.i386&lt;br /&gt;
&lt;br /&gt;
Note that older machines will not support the new OpenGL 3 renderer, and must be started specifying the &amp;quot;vanilla&amp;quot; (aka &amp;quot;GL&amp;quot;) renderer:&lt;br /&gt;
&lt;br /&gt;
 $ ./daemon.i386 +set cl_renderer GL&lt;br /&gt;
&lt;br /&gt;
===Bundling the Application===&lt;br /&gt;
&lt;br /&gt;
====With CPack====&lt;br /&gt;
&lt;br /&gt;
CPack is able to create standalone bundles (as well as many other types of installers). However you must generate the files using Unix Makefiles instead of XCode.&lt;br /&gt;
&lt;br /&gt;
 $ cd /path/to/Unvanquished-build&lt;br /&gt;
 $ cpack -G Bundle&lt;br /&gt;
&lt;br /&gt;
Some warnings will be printed however these can be safely ignored. There should be a file called Unvanquished.dmg in the Unvanquished-build folder.&lt;br /&gt;
&lt;br /&gt;
====Manually====&lt;br /&gt;
&lt;br /&gt;
You'll find the Mac [http://macdylibbundler.sourceforge.net/ dynamic library bundler] to be quite useful (you must generate the files using Unix Makefiles instead of XCode):&lt;br /&gt;
&lt;br /&gt;
 $ curl -L http://sourceforge.net/projects/macdylibbundler/files/macdylibbundler/0.4.1/dylibbundler0.4.1.zip/download &amp;gt; \&lt;br /&gt;
    dylibbundler0.4.1.zip&lt;br /&gt;
 $ unzip dylibbundler0.4.1.zip&lt;br /&gt;
 $ cd dylibbundler&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Once you've done that, you can proceed to create the application bundle. Note that these steps assume that you have downloaded the data files to &amp;lt;code&amp;gt;main/&amp;lt;/code&amp;gt; as shown above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git=/path/to/Unvanquished-git-repo&lt;br /&gt;
$ build=/path/to/Unvanquished-build-dir&lt;br /&gt;
$ mkdir -pv Unvanquished.app/Contents/{libs,MacOS,Resources,Frameworks}&lt;br /&gt;
$ cp -r $build/main Unvanquished.app/Contents/MacOS&lt;br /&gt;
$ sips -s format tiff $git/debian/unvanquished.png --out temp.tiff&lt;br /&gt;
$ tiff2icns temp.tiff Unvanquished.app/Contents/Resources/Unvanquished.icns&lt;br /&gt;
$ rm temp.tiff&lt;br /&gt;
$ cp $build/daemon{,ded}.i386 $build/*.dylib Unvanquished.app/Contents/MacOS&lt;br /&gt;
$ cp -r /Library/Frameworks/SDL.framework Unvanquished.app/Contents/Frameworks&lt;br /&gt;
$ install_name_tool -id \&lt;br /&gt;
    @executable_path/../Frameworks/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    Unvanquished.app/Contents/Frameworks/SDL.framework/Versions/A/SDL&lt;br /&gt;
$ install_name_tool -change @rpath/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    @executable_path/../Frameworks/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    Unvanquished.app/Contents/MacOS/daemon.i386&lt;br /&gt;
$ install_name_tool -change @rpath/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    @executable_path/../Frameworks/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    Unvanquished.app/Contents/MacOS/librendererGLi386.dylib&lt;br /&gt;
$ install_name_tool -change @rpath/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    @executable_path/../Frameworks/SDL.framework/Versions/A/SDL \&lt;br /&gt;
    Unvanquished.app/Contents/MacOS/librendererGL3i386.dylib&lt;br /&gt;
$ for binary in Unvanquished.app/Contents/MacOS/*.{i386,dylib}; do&lt;br /&gt;
    dylibbundler -b -x $binary -d $dest/Unvanquished.app/Contents/libs/; done&lt;br /&gt;
$ cp /usr/lib/libGLEW.1.7.0.dylib ./Unvanquished.app/Contents/libs/libGLEW.1.7.0.dylib&lt;br /&gt;
$ chmod +w ./Unvanquished.app/Contents/libs/libGLEW.1.7.0.dylib&lt;br /&gt;
$ install_name_tool -id @executable_path/../libs/libGLEW.1.7.0.dylib \&lt;br /&gt;
    ./Unvanquished.app/Contents/libs/libGLEW.1.7.0.dylib&lt;br /&gt;
$ install_name_tool -change /usr/lib/libGLEW.1.7.0.dylib \&lt;br /&gt;
    @executable_path/../libs/libGLEW.1.7.0.dylib \&lt;br /&gt;
    ./Unvanquished.app/Contents/MacOS/daemon.i386&lt;br /&gt;
$ cat &amp;gt; Unvanquished.app/Contents/Info.plist&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot;&lt;br /&gt;
          &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleName&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;Unvanquished&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleDisplayName&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;Unvanquished&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleExecutable&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;daemon.i386&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleIconFile&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;Unvanquished.icns&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleIdentifier&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;net.Unvanquished&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleInfoDictionaryVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;6.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundlePackageType&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;APPL&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleShortVersionString&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;0.4.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;0.4.0&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
^d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: &amp;lt;code&amp;gt;^d&amp;lt;/code&amp;gt; indicates pressing {{Hotkey|Ctrl}}{{Hotkey|D}} on the keyboard.&lt;br /&gt;
&lt;br /&gt;
The contents of the completed application bundle should look like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Bundle_dir_Mac_OS_X.png]]&lt;br /&gt;
&lt;br /&gt;
'''Note''': If you compiled SDL from source, you will not see a directory titled &amp;lt;code&amp;gt;SDL.framework&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&lt;br /&gt;
===Visual Studio===&lt;br /&gt;
&lt;br /&gt;
CMake can generate Visual Studio projects for unvanquished however this feature is relatively new and may have some bugs.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
# Double click on Visual_Studio32.bat&lt;br /&gt;
# Open build-32/Daemon.sln in Visual Studio 2010.&lt;br /&gt;
# In the two text boxes in the toolbar, select &amp;quot;Release&amp;quot; or &amp;quot;Debug&amp;quot; in the first one and Win32 in the second one&lt;br /&gt;
# Press F5 to build solution and run application, or just use Build &amp;amp;rarr; Build Solution to compile the code.&lt;br /&gt;
&lt;br /&gt;
====Important Notes====&lt;br /&gt;
&lt;br /&gt;
* LLVM is disabled and does not work correctly with CMake generated Visual Studio projects.&lt;br /&gt;
* ncurses is not supported under Visual Studio.&lt;br /&gt;
* The path to the build folder must not have any spaces otherwise generation of QVMs will fail. See [https://github.com/Unvanquished/Unvanquished/issues/102 issue 102]&lt;br /&gt;
* Due to limitations with cmake neither the startup project nor the working directory can be specified. These must be manually set to the following values for debugging the client under Visual Studio&lt;br /&gt;
** Right click on client and select &amp;quot;Set as StartUp project&amp;quot;.&lt;br /&gt;
** Right click on client, select properties, select Debugging and set &amp;quot;Working Directory&amp;quot; to $(TargetPath)\..&lt;br /&gt;
&lt;br /&gt;
===MinGW===&lt;br /&gt;
&lt;br /&gt;
Unvanquished is supported under MinGW. The build process should be fairly similar to the Linux instructions.&lt;br /&gt;
&lt;br /&gt;
The easiest way to acquire and install MinGW is with the graphical [http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/ mingw-get-inst installer]. &amp;lt;!-- TODO: maybe walk the user through the installer? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When configuring the build with CMake, you will find that you will have to set a number of libraries manually. You can find precompiled DLLs for most of the dependencies; those that are not pre-compiled can be built with the corresponding &amp;lt;code&amp;gt;USE_INTERNAL_&amp;lt;/code&amp;gt; setting.&lt;br /&gt;
&lt;br /&gt;
The easiest way to get a build up (at the time of writing) is as follows: &amp;lt;!-- FIXME: incomplete --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|content=Be aware that some of these paths are for the 64 bit versions of libraries; if you are on a 32-bit system, you will need to change some of these paths. The easiest way to locate libraries is to navigate in Windows Explorer to the &amp;lt;code&amp;gt;src/libs&amp;lt;/code&amp;gt; directory and search for files matching &amp;lt;code&amp;gt;dll&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;!-- might not be necessary&lt;br /&gt;
&amp;lt;li&amp;gt;Download and extract the latest version of the [http://gmplib.org/ GNU MP Bignum Library (GMP)]. (You will need either cygwin with tar and bz2 installed or 7-zip to extract the archive.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Theoretically, you can compile GMP with either the MSYS shell (from MinGW) or Cygwin, but you may experience issues with the former. Regardless of which you use, the steps to compile are the same:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./configure --disable-static --enable-shared&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;--disable-static&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--enable-shared&amp;lt;/code&amp;gt; flags configure GMP to build a DLL instead of a static library. You may optionally perform &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;. Additional compilation instructions [http://www.cs.nyu.edu/exact/core/gmp/ are available].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the following CMake flags:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Setting&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_CRYPTO&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copies of crypto libraries. &amp;lt;!-- FIXME: I think these are nettle and something else --&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_GLEW&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of GLEW.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_JPEG&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of JPEG.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_SDL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of SDL.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_SPEEX&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of Speex.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_INTERNAL_WEBP&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the provided copy of WebP.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_CURSES&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables curses.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PNG_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the PNG library DLL.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/libpng/libs/win64/libpng14-14.dll&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PNG_PNG_INCLUDE_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the PNG library header files.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/libpng&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FREETYPE_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the compiled FreeType library.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/freetype/lib/x64/freetype.dll&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FREETYPE_INCLUDE_DIR_freetype2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the FreeType library header files.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/freetype/include/freetype2&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FREETYPE_INCLUDE_DIR_ft2build&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the FreeType library file &amp;quot;ftbuild.h&amp;quot;.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/freetype/include/ftbuild.h&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GMP_INCLUDE_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the GMP library header files.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/gmp/include&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GMP_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the GMP library.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ZLIB_INCLUDE_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the zlib library header files.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/zlibwapi/include&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ZLIB_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the zlib library.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/zlibwapi/lib/x64/zlib1.dll&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CURL_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the CURL library.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/curl-7.21.6/lib/win64/release/libcurl.dll&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CURL_INCLUDE_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
| Path to the zlib library.&lt;br /&gt;
| &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/curl-7.21.6/include/curl&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_OPENAL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables OpenAL support.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_CIN_THEORA&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables Theora support.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_CIN_XVID&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables Xvid support.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USE_CODEC_THEORA&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables Ogg support.&lt;br /&gt;
| &amp;lt;code&amp;gt;BOOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDLMAIN_LIBRARY&amp;lt;/code&amp;gt;&lt;br /&gt;
| Enables/disables Ogg support.&lt;br /&gt;
| &amp;lt;code&amp;gt;FILEPATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;SourcePath&amp;lt;/var&amp;gt;/src/libs/libsdl/src/main/win32/SDL_win32_main.c&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Do note that CMake is slash-direction&amp;amp;ndash;agnostic; it can handle both forward- and backslashes on Windows.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a more fully-featured build:&lt;br /&gt;
* If you would like to use curses, try using [http://sourceforge.net/projects/pdcurses/files/pdcurses PDCurses].&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: this may be incomplete --&amp;gt;&lt;br /&gt;
====Debian/Ubuntu====&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libcurl4-gnutls-dev libfreetype6-dev libglew1.5-dev \&lt;br /&gt;
   libgmp3-dev libjpeg8-dev libncurses5-dev libogg-dev libopenal-dev \&lt;br /&gt;
   libpng12-dev libsdl1.2-dev libvorbis-dev zlib1g-dev nettle-dev \&lt;br /&gt;
   libwebp-dev libspeexdsp-dev libtheora-dev&lt;br /&gt;
&lt;br /&gt;
If the version of WebP supplied by your version of Debian or Ubuntu is older than v0.2.0, you will need to [https://code.google.com/p/webp/downloads/detail?name=libwebp-0.2.0.tar.gz download] and [https://developers.google.com/speed/webp/docs/compiling#unix compile it from source]. After compiling and installing with &amp;lt;code&amp;gt;sudo make install&amp;lt;/code&amp;gt;, in CMake, you'll need to set &amp;lt;code&amp;gt;WEBP_INCLUDE_DIR&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/usr/local/include/webp&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;WEBP_LIBRARY&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/usr/local/lib/libwebp.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''We currently provide a ready-to-use libwebp-dev in our [http://{{SERVERNAME}}/index.php/Download#ubuntu Debian and Ubuntu repositories], alongside .debs of the game and server.'''&lt;br /&gt;
&lt;br /&gt;
Actual dev package names may vary, e.g. libgmp-dev instead of libgmp3-dev and libglew-dev or libglew1.7-dev instead of libglew1.5-dev.&lt;br /&gt;
&lt;br /&gt;
Since we have a debian directory in the source, you can also to check what's needed then install the listed packages (choosing from alternatives as needed):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ dpkg-checkbuilddeps&lt;br /&gt;
 …&lt;br /&gt;
 $ sudo apt-get install &amp;lt;var&amp;gt;package(s)&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If dpkg-checkbuilddeps produces no output, you have all necessary build dependencies. Also, debhelper's only needed if you're building .debs.&lt;br /&gt;
&lt;br /&gt;
====Gentoo====&lt;br /&gt;
&lt;br /&gt;
 $ emerge curl freetype glew gmp jpeg ncurses libogg openal libpng libsdl libvorbis zlib&lt;br /&gt;
&lt;br /&gt;
====openSUSE====&lt;br /&gt;
&lt;br /&gt;
 $ sudo install zypper gcc gcc-c++ Mesa-libGL-devel SDL-devel libjpeg8-devel \&lt;br /&gt;
   libpng12-devel glew-devel webp-devel ncurses-devel gmp-devel libcurl-devel \&lt;br /&gt;
   libnettle-devel openal-soft-devel speex-devel libvorbis-devel \&lt;br /&gt;
   libtheora-devel&lt;br /&gt;
&lt;br /&gt;
The latest version of WebP must be installed manually:&lt;br /&gt;
&lt;br /&gt;
 $ wget https://webp.googlecode.com/files/libwebp-0.2.1.tar.gz&lt;br /&gt;
 $ tar xvzf libwebp-0.2.1.tar.gz&lt;br /&gt;
 $ cd libwebp-0.2.1&lt;br /&gt;
 $ ./configure &amp;amp;&amp;amp; make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
You must disable curses (set &amp;lt;code&amp;gt;USE_CURSES&amp;lt;/code&amp;gt; appropriately in CMake) as failing to do so will cause Unvanquished to crash on startup.&lt;br /&gt;
&lt;br /&gt;
===Configuring the code with CMake===&lt;br /&gt;
&lt;br /&gt;
After you have [[Getting the source|acquired the source code]], you can proceed to compile. Unvanquished uses CMake, so you must have that installed. &lt;br /&gt;
&lt;br /&gt;
====Using ccmake (curses-based front-end)====&lt;br /&gt;
&lt;br /&gt;
On Debian or Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install cmake-curses-gui&lt;br /&gt;
&lt;br /&gt;
On Gentoo you should set the '''ncurses''' USE flag either globally or individually, just for cmake.&lt;br /&gt;
To add the USE flag globally, edit the USE array in /etc/make.conf for it to include '''ncurses'''.&lt;br /&gt;
To only install cmake with ncurses functionality, you could do the following:&lt;br /&gt;
&lt;br /&gt;
 $ echo 'dev-util/cmake ncurses' &amp;gt;&amp;gt; /etc/portage/package.use &amp;amp;&amp;amp; emerge cmake&lt;br /&gt;
&lt;br /&gt;
Note that in Ubuntu, &amp;lt;code&amp;gt;cmake-curses-gui&amp;lt;/code&amp;gt; is in Universe, which you may have to enable with &amp;lt;code&amp;gt;software-properties-gtk&amp;lt;/code&amp;gt;. Make sure to reload the software sources with &amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt; afterwards.&lt;br /&gt;
&lt;br /&gt;
Next, configure the codebase.&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ mkdir build&lt;br /&gt;
 $ cd build&lt;br /&gt;
 $ ccmake ..&lt;br /&gt;
&lt;br /&gt;
Or, in Debian or Ubuntu, you can build a package (but you'll need to have devscripts and fakeroot installed):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ fakeroot dpkg-buildpackage -b -uc&lt;br /&gt;
 $ sudo dpkg -i &amp;lt;var&amp;gt;../unvanquished_*.deb&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once in &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt;, use the following keys:&lt;br /&gt;
&lt;br /&gt;
* Press {{Hotkey|c}} to configure. If an error occurs during this phase, make note of it and press {{Hotkey|e}} to dismiss it.&lt;br /&gt;
* Use the up and down arrow keys to navigate the compilation options.&lt;br /&gt;
* Press {{Hotkey|Enter}} to enable or disable boolean options (i.e., on/off) or to edit textual options.&lt;br /&gt;
** Press {{Hotkey|Esc}} when editing a textual option to cancel the change.&lt;br /&gt;
&lt;br /&gt;
Once you have finished the configuration process, press {{Hotkey|C}} again, then {{Hotkey|G}} to generate the makefile.&lt;br /&gt;
&lt;br /&gt;
====Using cmake-qt-gui (graphical front-end)====&lt;br /&gt;
&lt;br /&gt;
This graphical front end for cmake has its own package you must install:&lt;br /&gt;
&lt;br /&gt;
=====Debian/Ubuntu=====&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install cmake-qt-gui&lt;br /&gt;
&lt;br /&gt;
=====Gentoo=====&lt;br /&gt;
&lt;br /&gt;
With the '''qt4''' USE flag enabled:&lt;br /&gt;
&lt;br /&gt;
 $ emerge cmake&lt;br /&gt;
&lt;br /&gt;
Once installed, run with &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cmake-qt-gui.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
# Set the path where you have the source code downloaded.&lt;br /&gt;
# Set the path where you would like to build the engine. This may be the same directory if you wish.&lt;br /&gt;
# Click 'Configure'.&lt;br /&gt;
# Click 'Generate'.&lt;br /&gt;
&lt;br /&gt;
====Unnecessary libraries====&lt;br /&gt;
&lt;br /&gt;
Regardless of which front-end to cmake you use, you may want to disable some libraries that are not strictly necessary:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_OPENAL&amp;lt;/code&amp;gt; &amp;amp;mdash; If this is disabled, SDL is used instead for sound.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CODEC_VORBIS&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this will cause certain sound effects (those using the &amp;lt;code&amp;gt;.ogg&amp;lt;/code&amp;gt; format) not to play. At present, this has only a minor impact on gameplay, but more and more sounds will likely use the format in the future.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CURSES&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this will cause the external (not in-game) console to not use curses; it will not be scrollable and will be similar to the console in the original Tremulous. This does in no way affect gameplay.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CIN_THEORA&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this prevents videos from being recorded in Theora.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CIN_XVID&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this prevents videos from being recorded in Xvid.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_VOIP&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this removes VOIP support. Alternatively enabling &amp;lt;code&amp;gt;USE_INTERNAL_SPEEX&amp;lt;/code&amp;gt; will use the libraries distributed with Unvanquished for VoIP&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_INTERNAL_CRYPTO&amp;lt;/code&amp;gt; &amp;amp;mdash; Enable this to use the crypto libraries provided by Unvanquished.&lt;br /&gt;
&lt;br /&gt;
===Compiling===&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;path/to/unvanquished/build&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ make -j4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; switch to make allows you to speed up the compilation process by running it in multiple threads; set the number following this to the number of cores your processor(s) have.&lt;br /&gt;
&lt;br /&gt;
==Acquiring the Game Files==&lt;br /&gt;
&lt;br /&gt;
===Acquiring mandatory game files===&lt;br /&gt;
&lt;br /&gt;
The game files are not in the Git repository, and must be downloaded separately. This may be done on the command line or from your web browser. The downloads may be found on [http://sourceforge.net/projects/unvanquished/files/Assets SourceForge.net]. If you download the files from your browser, just download the files named &amp;quot;pak*.pk3&amp;quot;, and save them to the [[Running_the_game#Data_locations|data location]] for your system.&lt;br /&gt;
&lt;br /&gt;
On Linux, this may be done as follows:&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;[path to Unvanquished installation or build]&amp;lt;/var&amp;gt;/main&lt;br /&gt;
 $ for file in {{CurrentVersion|PakFiles}}; do&lt;br /&gt;
 wget -O $file &amp;quot;http://sourceforge.net/projects/unvanquished/files/Assets/$file/download&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
On FreeBSD, using the &amp;lt;code&amp;gt;sh&amp;lt;/code&amp;gt; shell:&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;[path to Unvanquished installation or build]&amp;lt;/var&amp;gt;/main&lt;br /&gt;
 $ for file in {{CurrentVersion|PakFiles}}; do&lt;br /&gt;
 fetch -r -o $file &amp;quot;http://sourceforge.net/projects/unvanquished/files/Assets/$file/download&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
On Mac OS X:&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/Library/Application\ Support/Unvanquished/main&lt;br /&gt;
 $ for file in {{CurrentVersion|PakFiles}}; do&lt;br /&gt;
 curl -L &amp;quot;http://sourceforge.net/projects/unvanquished/files/Assets/$file/download&amp;quot; &amp;gt; $file&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Linux users may also use the &amp;lt;code&amp;gt;download-pk3.sh&amp;lt;/code&amp;gt; script that is distributed with the source code, which requires that curl be installed:&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;[path to Unvanquished source code]&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ mkdir -p ~/.Unvanquished/main&lt;br /&gt;
 $ ./download-pk3.sh ~/.Unvanquished/main&lt;br /&gt;
&lt;br /&gt;
===Downloading the map pack===&lt;br /&gt;
&lt;br /&gt;
The map pack exists only for convenience; if you do not download the map pack, Unvanquished will automatically download maps as needed when you attempt to play online.&lt;br /&gt;
&lt;br /&gt;
To download the map pack on Linux:&lt;br /&gt;
&lt;br /&gt;
 $ wget -O maps.7z &amp;quot;http://sourceforge.net/projects/unvanquished/files/Map%20Pack/maps.7z&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
To download the map pack on Mac OS X:&lt;br /&gt;
&lt;br /&gt;
 $ curl -L &amp;quot;http://sourceforge.net/projects/unvanquished/files/Map%20Pack/maps.7z&amp;quot; &amp;gt; maps.7z; done&lt;br /&gt;
&lt;br /&gt;
Note that you will need to unzip the map pack on either system as it is compressed with LZMA. Mac users can use the [http://wakaba.c3.cx/s/apps/unarchiver.html Unarchiver]. Uncompressing the archive on Linux is highly dependent on your distribution.&lt;br /&gt;
&lt;br /&gt;
===Verifying the Files===&lt;br /&gt;
&lt;br /&gt;
Download the latest [http://sourceforge.net/projects/unvanquished/files/Assets/{{CurrentVersion|MD5HashFile}} MD5 hash file] and save it to your system's [[Running_the_game#Data_directory|data location]].&lt;br /&gt;
&lt;br /&gt;
On systems with the &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; command (Mac OS X):&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/Library/Application\ Support/Unvanquished/main&lt;br /&gt;
 $ cat {{CurrentVersion|MD5HashFile}} | while read line; do&lt;br /&gt;
 file=&amp;quot;`echo &amp;quot;$line&amp;quot; | cut -d\  -f3-`&amp;quot;&lt;br /&gt;
 if [ -e &amp;quot;$file&amp;quot; ]; then&lt;br /&gt;
 if [ `md5 -r &amp;quot;$file&amp;quot; | cut -d\  -f1` = &amp;quot;`echo &amp;quot;$line&amp;quot; | cut -d\  -f1`&amp;quot; ]&lt;br /&gt;
 then echo &amp;quot;File \&amp;quot;$file\&amp;quot; appears okay.&amp;quot;&lt;br /&gt;
 else echo &amp;quot;File \&amp;quot;$file\&amp;quot; is corrupt&amp;quot;'!' &amp;gt;&amp;amp;2&lt;br /&gt;
 fi; fi; done&lt;br /&gt;
&lt;br /&gt;
On systems with the &amp;lt;code&amp;gt;md5sum&amp;lt;/code&amp;gt; command (most Linux distributions):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;[[Running_the_game#Data_directory|/path/to/data/files]]&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ md5sum -c {{CurrentVersion|MD5HashFile}} 2&amp;gt;&amp;amp;1 | grep -v &amp;quot;open or read\|file or directory&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; invocation is used to strip output complaining about missing files.&lt;br /&gt;
&lt;br /&gt;
Any files that are found to be corrupt should be replaced; just download a [http://sourceforge.net/projects/unvanquished/files/Assets new copy] of the affected file(s).&lt;br /&gt;
&lt;br /&gt;
==Errors==&lt;br /&gt;
&lt;br /&gt;
===CMake cannot locate Newton===&lt;br /&gt;
&lt;br /&gt;
If CMake cannot find Newton, you'll need to set it up yourself.&lt;br /&gt;
&lt;br /&gt;
It should be in &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;/path/to/Unvanquished&amp;lt;/var&amp;gt;/src/libs/libnewton/libs/&amp;lt;var&amp;gt;your_os&amp;lt;/var&amp;gt;/libNewton.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
Be sure to replace &amp;lt;var&amp;gt;your_os&amp;lt;/var&amp;gt; with the proper directory name.&lt;br /&gt;
&lt;br /&gt;
Use CMake as before to change the &amp;lt;code&amp;gt;NEWTON_LIBRARY&amp;lt;/code&amp;gt; build setting to the said path:&lt;br /&gt;
&lt;br /&gt;
# Start the CMake configurator:&amp;lt;pre&amp;gt;$ ccmake ..&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Scroll down and highlight &amp;lt;code&amp;gt;NEWTON_LIBRARY&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Press {{Hotkey|Enter}} to begin editing and input in the path.&lt;br /&gt;
# Press {{Hotkey|C}} to configure and {{Hotkey|G}} to generate the new makefiles.&lt;br /&gt;
# Press {{Hotkey|Q}} to quit.&lt;br /&gt;
# Recompile the source:&amp;lt;pre&amp;gt;$ make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The C Compiler is not able to compile a simple test program===&lt;br /&gt;
&lt;br /&gt;
When attempting to generate a solution for Xcode CMake fails with the following error&lt;br /&gt;
  -- Check for working C compiler using: Xcode -- broken&lt;br /&gt;
  CMake Error at /Applications/CMake 2.8-8.app/Contents/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):&lt;br /&gt;
   The C compiler &amp;quot;/usr/bin/gcc&amp;quot; is not able to compile a simple test program.&lt;br /&gt;
  &lt;br /&gt;
    It fails with the following output:&lt;br /&gt;
  &lt;br /&gt;
     Change Dir: /Users/danielmaloney/Documents/Unvanquished/build-xcode/CMakeFiles/CMakeTmp&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
  &lt;br /&gt;
    Run Build Command:/Applications/CMake\ 2.8-8.app/Contents/bin/cmakexbuild&lt;br /&gt;
    -project CMAKE_TRY_COMPILE.xcodeproj build -target&lt;br /&gt;
    cmTryCompileExec1400153232 -configuration Debug&lt;br /&gt;
  &lt;br /&gt;
    Error: No developer directory found at /Developer.  Run&lt;br /&gt;
    /usr/bin/xcode-select to update the developer directory path.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
    CMake will not be able to correctly generate this project.&lt;br /&gt;
  Call Stack (most recent call first):&lt;br /&gt;
    CMakeLists.txt:19 (project)&lt;br /&gt;
&lt;br /&gt;
This is due to Xcode 4.3 having a different directory structure to previous versions. Simply running the following command will correct this error:&lt;br /&gt;
 sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer/&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1260</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1260"/>
		<updated>2013-02-03T21:39:20Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Admin command section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''''The information on this page is incomplete.'''''&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode1===&lt;br /&gt;
This command opens a general chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode2===&lt;br /&gt;
This command opens a team-chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode3===&lt;br /&gt;
This command opens an admin chat prompt.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===messagemodec===&lt;br /&gt;
This command opens a command prompt.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Admin commands==&lt;br /&gt;
&lt;br /&gt;
===allready===&lt;br /&gt;
Quickly move to the next map. Used only during the intermission.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1259</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1259"/>
		<updated>2013-02-03T21:32:59Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''''The information on this page is incomplete.'''''&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1258</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1258"/>
		<updated>2013-02-03T21:32:31Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: A few example bindings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''''The information on this page is incomplete.'''''&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Some simple bindings can be made via the configuration menus.&lt;br /&gt;
&lt;br /&gt;
For more complicated bindings and for team bindings, you need to use the console. For example, you could bind commands to set a team and to spawn:&lt;br /&gt;
&lt;br /&gt;
 bind F9 &amp;quot;team a&amp;quot;&lt;br /&gt;
 bind F10 &amp;quot;team h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 // attacking players&lt;br /&gt;
 teambind aliens F5 &amp;quot;class level0&amp;quot;&lt;br /&gt;
 teambind humans F5 &amp;quot;class rifle&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 // builders&lt;br /&gt;
 teambind aliens F6 &amp;quot;class builderupg builder&amp;quot;&lt;br /&gt;
 teambind humans F6 &amp;quot;class ckit&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Differences from Tremulous==&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1257</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1257"/>
		<updated>2013-02-03T21:27:33Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Sort commands into groups; add some docs for bind, editbind, teambind, unbind &amp;amp; +rally.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''''The information on this page is incomplete.'''''&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==Gameplay commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+rally===&lt;br /&gt;
“Come on!” etc., as in ‘follow me’.&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc., as in ‘bring it on!’.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
==Configuration commands==&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===bind===&lt;br /&gt;
&amp;lt;tt&amp;gt;bind KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key, or lists the bindings for that key.&lt;br /&gt;
&lt;br /&gt;
All existing bindings on that key are lost.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/teambind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
Prevents a player from joining a team for a given time or until the end of the current game.&lt;br /&gt;
If necessary, the player is moved to spectators.&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
Allows a player, previously locked, to join a team.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars. ''Obsolete.''&lt;br /&gt;
&lt;br /&gt;
===teambind===&lt;br /&gt;
&amp;lt;tt&amp;gt;teambind TEAM KEY [COMMAND…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
Binds a command (or sequence of commands) to the given key for use when on the given team, or lists the binding for that key/team.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===unbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;unbind [TEAM] KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
Removes either all bindings for the given key, or the binding for the given team on that key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;TEAM&amp;lt;/tt&amp;gt; is default, spectators, humans, or aliens. (Initial substrings are accepted.)&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
==Utility commands==&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;br /&gt;
&lt;br /&gt;
==Special uses==&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1179</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=1179"/>
		<updated>2013-01-08T04:33:20Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* if */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''''The information on this page is incomplete.'''''&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Unvanquished.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Unvanquished                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==New commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
Do math calculations on cvars. Store the value to a cvar Useful in making scripts.&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
Concatenate 2 cvars into a third.&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Recognised numeric comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   = != &amp;lt; &amp;lt;= &amp;gt; &amp;gt;= !=&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recognised string comparison operators:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;   eq ne in !in&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&lt;br /&gt;
/bind j &amp;quot;if \$team\$ eq aliens \&amp;quot;/class level1upg level1\&amp;quot;&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note the escaping of the cvar &amp;lt;tt&amp;gt;team&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
Start the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
Stop the ingame IRC client&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
Say something in the desired IRC channel if connected to a server&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
Do math on cvars. Useful for scripts.&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
Open a URL inside the OS's default browser.&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
Internal use.&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
Generate a random number&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
Reload the HUD without a vid_restart&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
Talk to all teammates within a server-set range.&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot in the PNG format.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
Reload sounds (includes a vid_restart&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
Compare the string values of two cvars.&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Formats/Navigation_mesh&amp;diff=1150</id>
		<title>Formats/Navigation mesh</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Formats/Navigation_mesh&amp;diff=1150"/>
		<updated>2012-12-31T17:23:12Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Optional Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Daemon engine supports automatic navigation mesh generation from bsp map files. This navigation mesh (or &amp;quot;navmesh&amp;quot; for short) is used by the bots to navigate throughout the world.&lt;br /&gt;
&lt;br /&gt;
==Generating a Navigation Mesh==&lt;br /&gt;
&lt;br /&gt;
The -nav parameter to OWMap will generate a navigation mesh from a bsp file.&lt;br /&gt;
Use it like so:&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
 daemonmap.exe -game unv -nav mapname.bsp&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
 ./daemonmap -game unv -nav mapname.bsp&lt;br /&gt;
&lt;br /&gt;
===Optional Parameters===&lt;br /&gt;
&lt;br /&gt;
The navigation mesh generation process is conservative by default. This means some areas (particularly, small ledges) that should be walkable may instead create a break in the navmesh which bots interpret as &amp;quot;I am unable to go past there.&amp;quot; The following optional parameters give the map maker some control over navmesh generation to help with this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;del&amp;gt;&amp;lt;code&amp;gt;-cellsize&amp;lt;/code&amp;gt;&amp;lt;!-- Not implemented --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;''Default'': 8&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This value (along with &amp;lt;code&amp;gt;cellheight&amp;lt;/code&amp;gt;) determines the accuracy of navigation mesh generation. A lower value will increase mesh generation accuracy at the cost of generation time and mesh size; conversely, a higher value will decrease generation time and mesh size at the cost of accuracy.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you see gaps in the navigation mesh on &amp;quot;grating&amp;quot; floors where the grating parts, try using a higher value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/del&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-cellheight&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A lower cellheight will increase mesh generation accuracy at the cost of generation time and mesh size.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If there are gaps in the navigation mesh even though a player can easily just walk to get through, you can decrease the value to help.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-median&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Applies a median filter to the walkable areas of the mesh to help contain any &amp;quot;noise.&amp;quot;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;See [http://digestingduck.blogspot.com/2010/07/recast-area-types-per-triangle.html this article] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-optimistic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Attempts to compensate for cellsize inaccuracy by increasing the stepheight navigation mesh generation parameter based on the current samplesize. It is recommended to be used with a lower than default cellsize to help avoid over optimistic assumptions (i.e., saying some areas are walkable that really aren't). Useful for fixing breaks in the mesh caused by some small ledges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This produces bad results depending on how big your &amp;lt;code&amp;gt;cellsize&amp;lt;/code&amp;gt; parameter is, but generating the mesh in this way will be faster than simply decreasing the &amp;lt;code&amp;gt;cellheight&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using a Navigation Mesh==&lt;br /&gt;
&lt;br /&gt;
Navigation mesh files go in the &amp;lt;code&amp;gt;maps/&amp;lt;/code&amp;gt; directory either in the folder specified by the &amp;lt;code&amp;gt;fs_game&amp;lt;/code&amp;gt; cvar, or in the maps folder inside a map's &amp;lt;code&amp;gt;.pk3&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
==Testing the Mesh==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start a local server by starting Unvanquished and typing &lt;br /&gt;
&lt;br /&gt;
 \devmap testmap&lt;br /&gt;
&lt;br /&gt;
into the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Not implemented --&amp;gt;&lt;br /&gt;
&amp;lt;del&amp;gt;You may then enable drawing the navigation mesh by setting the &amp;lt;code&amp;gt;cg_bot_nav&amp;lt;/code&amp;gt; cvar to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: show a screenshot demonstrating this --&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add bots with the &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt; command and spectate the game.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Editing the Navigation Mesh==&lt;br /&gt;
Unfortunately, automatic navigation mesh generation that fully supports all of the map features and player abilities in Unvanquished is increadibly difficult.&lt;br /&gt;
Automatic generation will usually produce a very satisfactory base mesh, but some areas may need further tweaking&lt;br /&gt;
&lt;br /&gt;
===Adding Jump Links===&lt;br /&gt;
===Adding Ladder Links===&lt;br /&gt;
===Adding Pounce Links===&lt;br /&gt;
===Adding Drop off Links===&lt;br /&gt;
===Adding Walk Links===&lt;br /&gt;
[[Category:Bots]]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Formats/Navigation_mesh&amp;diff=1149</id>
		<title>Formats/Navigation mesh</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Formats/Navigation_mesh&amp;diff=1149"/>
		<updated>2012-12-31T17:18:56Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Generating a Navigation Mesh */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Daemon engine supports automatic navigation mesh generation from bsp map files. This navigation mesh (or &amp;quot;navmesh&amp;quot; for short) is used by the bots to navigate throughout the world.&lt;br /&gt;
&lt;br /&gt;
==Generating a Navigation Mesh==&lt;br /&gt;
&lt;br /&gt;
The -nav parameter to OWMap will generate a navigation mesh from a bsp file.&lt;br /&gt;
Use it like so:&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
 daemonmap.exe -game unv -nav mapname.bsp&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
 ./daemonmap -game unv -nav mapname.bsp&lt;br /&gt;
&lt;br /&gt;
===Optional Parameters===&lt;br /&gt;
&lt;br /&gt;
The navigation mesh generation process is conservative by default. This means some areas (particularly, small ledges) that should be walkable may instead create a break in the navmesh which bots interpret as &amp;quot;I am unable to go past there.&amp;quot; The following optional parameters give the map maker some control over navmesh generation to help with this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-cellsize&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;''Default'': 8&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This value (along with &amp;lt;code&amp;gt;cellheight&amp;lt;/code&amp;gt;) determines the accuracy of navigation mesh generation. A lower value will increase mesh generation accuracy at the cost of generation time and mesh size; conversely, a higher value will decrease generation time and mesh size at the cost of accuracy.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you see gaps in the navigation mesh on &amp;quot;grating&amp;quot; floors where the grating parts, try using a higher value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-cellheight&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A lower cellheight will increase mesh generation accuracy at the cost of generation time and mesh size.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If there are gaps in the navigation mesh even though a player can easily just walk to get through, you can decrease the value to help.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-median&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Applies a median filter to the walkable areas of the mesh to help contain any &amp;quot;noise.&amp;quot;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;See [http://digestingduck.blogspot.com/2010/07/recast-area-types-per-triangle.html this article] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-optimistic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Attempts to compensate for cellsize inaccuracy by increasing the stepheight navigation mesh generation parameter based on the current samplesize. It is recommended to be used with a lower than default cellsize to help avoid over optimistic assumptions (i.e., saying some areas are walkable that really aren't). Useful for fixing breaks in the mesh caused by some small ledges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This produces bad results depending on how big your &amp;lt;code&amp;gt;cellsize&amp;lt;/code&amp;gt; parameter is, but generating the mesh in this way will be faster than simply decreasing the &amp;lt;code&amp;gt;cellheight&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using a Navigation Mesh==&lt;br /&gt;
&lt;br /&gt;
Navigation mesh files go in the &amp;lt;code&amp;gt;maps/&amp;lt;/code&amp;gt; directory either in the folder specified by the &amp;lt;code&amp;gt;fs_game&amp;lt;/code&amp;gt; cvar, or in the maps folder inside a map's &amp;lt;code&amp;gt;.pk3&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
==Testing the Mesh==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start a local server by starting Unvanquished and typing &lt;br /&gt;
&lt;br /&gt;
 \devmap testmap&lt;br /&gt;
&lt;br /&gt;
into the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Not implemented --&amp;gt;&lt;br /&gt;
&amp;lt;del&amp;gt;You may then enable drawing the navigation mesh by setting the &amp;lt;code&amp;gt;cg_bot_nav&amp;lt;/code&amp;gt; cvar to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: show a screenshot demonstrating this --&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add bots with the &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt; command and spectate the game.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Editing the Navigation Mesh==&lt;br /&gt;
Unfortunately, automatic navigation mesh generation that fully supports all of the map features and player abilities in Unvanquished is increadibly difficult.&lt;br /&gt;
Automatic generation will usually produce a very satisfactory base mesh, but some areas may need further tweaking&lt;br /&gt;
&lt;br /&gt;
===Adding Jump Links===&lt;br /&gt;
===Adding Ladder Links===&lt;br /&gt;
===Adding Pounce Links===&lt;br /&gt;
===Adding Drop off Links===&lt;br /&gt;
===Adding Walk Links===&lt;br /&gt;
[[Category:Bots]]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Formats/Navigation_mesh&amp;diff=1148</id>
		<title>Formats/Navigation mesh</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Formats/Navigation_mesh&amp;diff=1148"/>
		<updated>2012-12-31T17:13:09Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Testing the Mesh */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Daemon engine supports automatic navigation mesh generation from bsp map files. This navigation mesh (or &amp;quot;navmesh&amp;quot; for short) is used by the bots to navigate throughout the world.&lt;br /&gt;
&lt;br /&gt;
==Generating a Navigation Mesh==&lt;br /&gt;
&lt;br /&gt;
The -nav parameter to OWMap will generate a navigation mesh from a bsp file.&lt;br /&gt;
Use it like so:&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
 OWMap.exe -game tremulous -nav mapname.bsp&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
 ./daemonmap.x86(_64) -game tremulous -nav mapname.bsp&lt;br /&gt;
&lt;br /&gt;
===Optional Parameters===&lt;br /&gt;
&lt;br /&gt;
The navigation mesh generation process is conservative by default. This means some areas (particularly, small ledges) that should be walkable may instead create a break in the navmesh which bots interpret as &amp;quot;I am unable to go past there.&amp;quot; The following optional parameters give the map maker some control over navmesh generation to help with this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-cellsize&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;''Default'': 8&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This value (along with &amp;lt;code&amp;gt;cellheight&amp;lt;/code&amp;gt;) determines the accuracy of navigation mesh generation. A lower value will increase mesh generation accuracy at the cost of generation time and mesh size; conversely, a higher value will decrease generation time and mesh size at the cost of accuracy.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you see gaps in the navigation mesh on &amp;quot;grating&amp;quot; floors where the grating parts, try using a higher value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-cellheight&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A lower cellheight will increase mesh generation accuracy at the cost of generation time and mesh size.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If there are gaps in the navigation mesh even though a player can easily just walk to get through, you can decrease the value to help.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-median&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Applies a median filter to the walkable areas of the mesh to help contain any &amp;quot;noise.&amp;quot;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;See [http://digestingduck.blogspot.com/2010/07/recast-area-types-per-triangle.html this article] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;-optimistic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Attempts to compensate for cellsize inaccuracy by increasing the stepheight navigation mesh generation parameter based on the current samplesize. It is recommended to be used with a lower than default cellsize to help avoid over optimistic assumptions (i.e., saying some areas are walkable that really aren't). Useful for fixing breaks in the mesh caused by some small ledges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This produces bad results depending on how big your &amp;lt;code&amp;gt;cellsize&amp;lt;/code&amp;gt; parameter is, but generating the mesh in this way will be faster than simply decreasing the &amp;lt;code&amp;gt;cellheight&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using a Navigation Mesh==&lt;br /&gt;
&lt;br /&gt;
Navigation mesh files go in the &amp;lt;code&amp;gt;maps/&amp;lt;/code&amp;gt; directory either in the folder specified by the &amp;lt;code&amp;gt;fs_game&amp;lt;/code&amp;gt; cvar, or in the maps folder inside a map's &amp;lt;code&amp;gt;.pk3&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
==Testing the Mesh==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start a local server by starting Unvanquished and typing &lt;br /&gt;
&lt;br /&gt;
 \devmap testmap&lt;br /&gt;
&lt;br /&gt;
into the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Not implemented --&amp;gt;&lt;br /&gt;
&amp;lt;del&amp;gt;You may then enable drawing the navigation mesh by setting the &amp;lt;code&amp;gt;cg_bot_nav&amp;lt;/code&amp;gt; cvar to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: show a screenshot demonstrating this --&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add bots with the &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt; command and spectate the game.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Editing the Navigation Mesh==&lt;br /&gt;
Unfortunately, automatic navigation mesh generation that fully supports all of the map features and player abilities in Unvanquished is increadibly difficult.&lt;br /&gt;
Automatic generation will usually produce a very satisfactory base mesh, but some areas may need further tweaking&lt;br /&gt;
&lt;br /&gt;
===Adding Jump Links===&lt;br /&gt;
===Adding Ladder Links===&lt;br /&gt;
===Adding Pounce Links===&lt;br /&gt;
===Adding Drop off Links===&lt;br /&gt;
===Adding Walk Links===&lt;br /&gt;
[[Category:Bots]]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Server/Running&amp;diff=1100</id>
		<title>Server/Running</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Server/Running&amp;diff=1100"/>
		<updated>2012-11-22T00:36:18Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: More g_markDeconstruct tweaks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work in progress.&lt;br /&gt;
&lt;br /&gt;
==Customizing gameplay==&lt;br /&gt;
&lt;br /&gt;
===Game-related cvars===&lt;br /&gt;
&amp;lt;!-- TODO: I don't think all of these are mutable (perhaps only those listed in the gameCvarTable are?), so remove those that are not, aside from adding descriptions and so forth. Perhaps also remove those that cannot be set before the game begins (if there are such)? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Type&lt;br /&gt;
! Default value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_timelimit&amp;lt;/code&amp;gt;&lt;br /&gt;
| Integer&lt;br /&gt;
| 0&lt;br /&gt;
| Sets the time (in minutes) when the game ends. &amp;lt;!-- FIXME: What's the behavior when this is less than or equal to 0? --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_suddenDeathTime&amp;lt;/code&amp;gt;&lt;br /&gt;
| Integer&lt;br /&gt;
| 0&lt;br /&gt;
| Sets the time (in minutes) when [[Glossary#S|Sudden Death]] begins. &amp;lt;!-- FIXME: What's the behavior when this is less than or equal to 0? --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_friendlyFire&amp;lt;/code&amp;gt;&lt;br /&gt;
| Boolean&lt;br /&gt;
| 0&lt;br /&gt;
| Enables/disables friendly fire.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_friendlyBuildableFire&amp;lt;/code&amp;gt;&lt;br /&gt;
| Boolean&lt;br /&gt;
| 0&lt;br /&gt;
| Enables/disables friendly fire for buildables.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_dretchPunt&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_password&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_needpass&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_maxclients&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_maxGameClients&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_dedicated&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_speed&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_gravity&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_cheats&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_knockback&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_inactivity&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_debugMove&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_debugDamage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_motd&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| Sets the message displayed when players connect to the server (the &amp;quot;message of the day&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_synchronousClients&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_warmup&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_doWarmup&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_lockTeamsAtStart&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_logFile&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_logFileSync&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_allowVote&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_voteLimit&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_suddenDeathVotePercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_suddenDeathVoteDelay&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_extendVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_extendVotesTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_extendVotesCount&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_kickVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_denyVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapVotesBefore&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_drawVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_drawVotesAfter&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_drawVoteReasonRequired&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_admitDefeatVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_nextMapVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_pollVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_teamForceBalance&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_smoothClients&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pmove_fixed&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pmove_msec&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_minNameChangePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_maxNameChanges&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienBuildPoints&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienBuildQueueTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanBuildPoints&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanBuildQueueTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanRepeaterBuildPoints&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanRepeaterBuildQueueTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanRepeaterMaxZones&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanStage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanCredits&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanMaxStage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanStage2Threshold&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanStage3Threshold&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienStage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienCredits&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienMaxStage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienStage2Threshold&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienStage3Threshold&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_teamImbalanceWarnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_freeFundPeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_luciHalfLifeTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_luciFullPowerTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_pulseHalfLifeTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_pulseFullPowerTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_flameFadeout&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_unlagged&amp;lt;/code&amp;gt;&lt;br /&gt;
| Boolean&lt;br /&gt;
| 1&lt;br /&gt;
| Enables/disables [[Technical_documentation#Lag_compensation|lag compensation]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_disabledEquipment&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_disabledClasses&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_disabledBuildables&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_markDeconstruct&amp;lt;/code&amp;gt;&lt;br /&gt;
| Integer&lt;br /&gt;
| 3&lt;br /&gt;
| Controls deconstruction and replacement of buildings.&lt;br /&gt;
* 0 = instant deconstruction&lt;br /&gt;
* 1 = mark for deconstruction, don't allow replacement at the same location&lt;br /&gt;
* 2 = mark for deconstruction, allow replacement at the same location with the same type&lt;br /&gt;
* 3 = mark for deconstruction, don't restrict replacement&lt;br /&gt;
As of alpha 10:&lt;br /&gt;
* Add 16 to enable &amp;lt;code&amp;gt;/deconstruct marked&amp;lt;/code&amp;gt;&lt;br /&gt;
* Add 32 to protect some buildings from instant deconstruction (type 0 marking ⇒ type 2 marking)&lt;br /&gt;
* Reactor, overmind and spawn points are protected.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_debugMapRotation&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_currentMapRotation&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapRotationNodes&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapRotationStack&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_nextMap&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_initialMapRotation&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapLog&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_debugVoices&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_voiceChats&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_shove&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_antiSpawnBlock&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapConfigs&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_sayAreaRange&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_floodMaxDemerits&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_floodMinTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_layouts&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_layoutAuto&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_emoticonsAllowedInNames&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_unnamedNumbering&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_unnamedNamePrefix&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_adminTempBan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_adminMaxBan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_adminRetainExpiredBans&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_privateMessages&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_specChat&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_publicAdminMessages&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_allowTeamOverlay&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_censorship&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_tag&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_showKillerHP&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_combatCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Customizing game characteristics===&lt;br /&gt;
&lt;br /&gt;
Because the server's gameplay code runs in its own virtual machine, you may edit game logic code in &amp;lt;code&amp;gt;src/gamelogic/game&amp;lt;/code&amp;gt; at your leisure. Players who connect to your server will not have to download a modified vm to experience the altered gameplay.&lt;br /&gt;
&lt;br /&gt;
===Alternate starting positions for buildables===&lt;br /&gt;
&lt;br /&gt;
You may change the starting positions of buildables using custom [[map layouts]].&lt;br /&gt;
&lt;br /&gt;
==Map rotations==&lt;br /&gt;
&lt;br /&gt;
For information on creating map rotations, please see the [http://tremulous.net/wiki/Maprotation.cfg tremulous.net documentation].&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Server/Running&amp;diff=1099</id>
		<title>Server/Running</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Server/Running&amp;diff=1099"/>
		<updated>2012-11-22T00:32:18Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: g_markDeconstruct&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work in progress.&lt;br /&gt;
&lt;br /&gt;
==Customizing gameplay==&lt;br /&gt;
&lt;br /&gt;
===Game-related cvars===&lt;br /&gt;
&amp;lt;!-- TODO: I don't think all of these are mutable (perhaps only those listed in the gameCvarTable are?), so remove those that are not, aside from adding descriptions and so forth. Perhaps also remove those that cannot be set before the game begins (if there are such)? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Type&lt;br /&gt;
! Default value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_timelimit&amp;lt;/code&amp;gt;&lt;br /&gt;
| Integer&lt;br /&gt;
| 0&lt;br /&gt;
| Sets the time (in minutes) when the game ends. &amp;lt;!-- FIXME: What's the behavior when this is less than or equal to 0? --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_suddenDeathTime&amp;lt;/code&amp;gt;&lt;br /&gt;
| Integer&lt;br /&gt;
| 0&lt;br /&gt;
| Sets the time (in minutes) when [[Glossary#S|Sudden Death]] begins. &amp;lt;!-- FIXME: What's the behavior when this is less than or equal to 0? --&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_friendlyFire&amp;lt;/code&amp;gt;&lt;br /&gt;
| Boolean&lt;br /&gt;
| 0&lt;br /&gt;
| Enables/disables friendly fire.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_friendlyBuildableFire&amp;lt;/code&amp;gt;&lt;br /&gt;
| Boolean&lt;br /&gt;
| 0&lt;br /&gt;
| Enables/disables friendly fire for buildables.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_dretchPunt&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_password&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_needpass&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_maxclients&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_maxGameClients&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_dedicated&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_speed&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_gravity&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_cheats&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_knockback&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_inactivity&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_debugMove&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_debugDamage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_motd&amp;lt;/code&amp;gt;&lt;br /&gt;
| String&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| Sets the message displayed when players connect to the server (the &amp;quot;message of the day&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_synchronousClients&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_warmup&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_doWarmup&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_lockTeamsAtStart&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_logFile&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_logFileSync&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_allowVote&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_voteLimit&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_suddenDeathVotePercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_suddenDeathVoteDelay&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_extendVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_extendVotesTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_extendVotesCount&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_kickVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_denyVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapVotesBefore&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_drawVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_drawVotesAfter&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_drawVoteReasonRequired&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_admitDefeatVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_nextMapVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_pollVotesPercent&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_teamForceBalance&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_smoothClients&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pmove_fixed&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pmove_msec&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_minNameChangePeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_maxNameChanges&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienBuildPoints&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienBuildQueueTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanBuildPoints&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanBuildQueueTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanRepeaterBuildPoints&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanRepeaterBuildQueueTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanRepeaterMaxZones&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanStage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanCredits&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanMaxStage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanStage2Threshold&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_humanStage3Threshold&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienStage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienCredits&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienMaxStage&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienStage2Threshold&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_alienStage3Threshold&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_teamImbalanceWarnings&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_freeFundPeriod&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_luciHalfLifeTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_luciFullPowerTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_pulseHalfLifeTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_pulseFullPowerTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_flameFadeout&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_unlagged&amp;lt;/code&amp;gt;&lt;br /&gt;
| Boolean&lt;br /&gt;
| 1&lt;br /&gt;
| Enables/disables [[Technical_documentation#Lag_compensation|lag compensation]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_disabledEquipment&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_disabledClasses&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_disabledBuildables&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_markDeconstruct&amp;lt;/code&amp;gt;&lt;br /&gt;
| Integer&lt;br /&gt;
| 3&lt;br /&gt;
| Controls deconstruction and replacement of buildings.&lt;br /&gt;
* 0 = instant deconstruction&lt;br /&gt;
* 1 = mark for deconstruction, don't allow replacement&lt;br /&gt;
* 2 = mark for deconstruction, allow replacement with the same type&lt;br /&gt;
* 3 = mark for deconstruction, allow all replacement&lt;br /&gt;
As of alpha 10:&lt;br /&gt;
* Add 16 to enable &amp;lt;code&amp;gt;/deconstruct marked&amp;lt;/code&amp;gt;&lt;br /&gt;
* Add 32 to protect some buildings from instant deconstruction&lt;br /&gt;
* Reactor, overmind and spawn points are protected.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_debugMapRotation&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_currentMapRotation&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapRotationNodes&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapRotationStack&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_nextMap&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_initialMapRotation&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapLog&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_debugVoices&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_voiceChats&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_shove&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_antiSpawnBlock&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_mapConfigs&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_sayAreaRange&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_floodMaxDemerits&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_floodMinTime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_layouts&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_layoutAuto&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_emoticonsAllowedInNames&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_unnamedNumbering&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_unnamedNamePrefix&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_adminTempBan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_adminMaxBan&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_adminRetainExpiredBans&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_privateMessages&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_specChat&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_publicAdminMessages&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_allowTeamOverlay&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_censorship&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_tag&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_showKillerHP&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;g_combatCooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Customizing game characteristics===&lt;br /&gt;
&lt;br /&gt;
Because the server's gameplay code runs in its own virtual machine, you may edit game logic code in &amp;lt;code&amp;gt;src/gamelogic/game&amp;lt;/code&amp;gt; at your leisure. Players who connect to your server will not have to download a modified vm to experience the altered gameplay.&lt;br /&gt;
&lt;br /&gt;
===Alternate starting positions for buildables===&lt;br /&gt;
&lt;br /&gt;
You may change the starting positions of buildables using custom [[map layouts]].&lt;br /&gt;
&lt;br /&gt;
==Map rotations==&lt;br /&gt;
&lt;br /&gt;
For information on creating map rotations, please see the [http://tremulous.net/wiki/Maprotation.cfg tremulous.net documentation].&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Formats/Image&amp;diff=1009</id>
		<title>Formats/Image</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Formats/Image&amp;diff=1009"/>
		<updated>2012-10-29T23:10:09Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: A little more info on DDS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Software==&lt;br /&gt;
&lt;br /&gt;
A number of open-source photo editing applications follow:&lt;br /&gt;
&lt;br /&gt;
* [http://www.gimp.org/ The GIMP] &amp;amp;mdash; Fully-featured raster graphics image editor available for Mac OS X, Windows, and Linux. With version 2.8, the user interface may be used in single-window mode, hardware-acceleration is being added, and in future releases, higher bit-depth support will be added.&lt;br /&gt;
* [http://www.krita.org/ Krita] Available for Linux. Originally intended for photo-editing, Krita is now intended much more as a painting tool, although it is still suitable for both. Has support for high bit depths.&lt;br /&gt;
&lt;br /&gt;
==Supported formats==&lt;br /&gt;
&lt;br /&gt;
The engine supports the following formats:&lt;br /&gt;
* [http://www.libpng.org/pub/png/ PNG (Portable Network Graphics)] &amp;amp;mdash; Provides lossless compression of images, but with the penalty of high filesize.&lt;br /&gt;
* JPEG &amp;amp;mdash; Provides lossy compression and very small filesizes, but image quality can suffer at higher compression values.&lt;br /&gt;
* TGA &amp;amp;mdash; Provides raw or lossless compression, but is reported not to work well on photographic images.&lt;br /&gt;
* [http://www.modwiki.net/wiki/DDS_%28file_format%29 DDS (DirectDraw Surface)] &amp;amp;mdash; A Microsoft container format for [http://en.wikipedia.org/wiki/S3_Texture_Compression S3TC], which is supported natively by many video cards. This format does not need decompression before use, which helps with loading times. It is lossy.&lt;br /&gt;
* [https://developers.google.com/speed/webp/ WebP] &amp;amp;mdash; A relatively new format created by Google that provides excellent lossy compression (generally 39% smaller filesize than an equivalent JPEG).&lt;br /&gt;
&lt;br /&gt;
Note that WebP was formerly optional when compiling the source code but is now required to ensure that everyone with the game will have it installed.&lt;br /&gt;
&lt;br /&gt;
While most any graphics application that is worth using can export natively to PNG, JPEG, and TGA, most applications currently cannot export directly to DDS or WebP. Converters and plug-ins are available, however:&lt;br /&gt;
* [https://developers.google.com/speed/webp/docs/precompiled Google WebP converter]&lt;br /&gt;
* NVIDIA's [https://developer.nvidia.com/legacy-texture-tools DDS tools]&lt;br /&gt;
* ATI's [http://developer.amd.com/Resources/archive/ArchivedTools/gpu/compressonator/Pages/default.aspx Compressonator] for creating DDS images on Windows only.&lt;br /&gt;
* [http://code.google.com/p/gimp-dds/ The GIMP DDS Plug-in] for creating DDS images with GIMP version 2.8.&lt;br /&gt;
&lt;br /&gt;
Note that the terms &amp;lt;dfn&amp;gt;lossy&amp;lt;/dfn&amp;gt; and &amp;lt;dfn&amp;gt;lossless&amp;lt;/dfn&amp;gt; were used multiple times above. Lossy means that images compressed using that format will lose some of their image quality to save space. Lossless means that the compression will not sacrifice image quality, no matter how much you compress the image with that format.&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Maps/Parpax&amp;diff=625</id>
		<title>Maps/Parpax</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Maps/Parpax&amp;diff=625"/>
		<updated>2012-08-12T21:08:10Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Human Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float:right;margin:1em 0px 1em 1em;border:2px outset #777;&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:rgb(187,187,187);text-align:center&amp;quot; | '''Parpax'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;vertical-align:top&amp;quot; | '''Designated no. of players:'''&lt;br /&gt;
| style=&amp;quot;text-align:left;vertical-align:top&amp;quot; | 6-12&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;vertical-align:top&amp;quot; | '''No. of brushes:'''&lt;br /&gt;
| style=&amp;quot;text-align:left;vertical-align:top&amp;quot; | ~9.5k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A small, intense map by [[User:Viech|Viech]].&lt;br /&gt;
&lt;br /&gt;
It is currently in a late alpha status and has not yet been released to public.&lt;br /&gt;
&lt;br /&gt;
==Gameflow==&lt;br /&gt;
[[Image:Parpax_Gameflow.jpg|200px|thumb|right|Gameflow chart]]&lt;br /&gt;
&lt;br /&gt;
The map consists of two floors connected by stairs, an elevator and ventilation shafts.&lt;br /&gt;
&lt;br /&gt;
The [[Humans|human team]] has their default base on the lower floor in a spacious storage room containing huge pillars carrying a platform which can be reached via stairs and a ladder. The front entrance consists of huge shutter doors that open slowly and are prone to trap both attacking aliens and humans fleeing back to their base. It leads to another big storage room which connects to stairs, elevator and elevation shafts and thus is of great tactical importance to both teams. The side entrance of the human base leads to a narrow corridor which runs next to that room and ends at the stairs. The lower floor also contains a network of elevation and pipe shafts, giving small aliens and lightly armored humans additional movement options.&lt;br /&gt;
&lt;br /&gt;
The [[Aliens|aliens]] have their default base in a tight room containing a strange machine. Its front entrance leads to a room which is, being close to stairs, elevator and elevation shafts, the counterpart of the storage room laying right under it. The side entrance leads to a longer but maybe less contested path to the stairs that also connects to the upper ends of the ventilation shafts.&lt;br /&gt;
&lt;br /&gt;
Both default bases have a third entrance that can be opened temporarily by pushing a button located in the respective base. The button in the human base moves aside girders that block access to the ventilation shafts. The aliens' button opens an emergency exit that is a short path to the stairs and connects to the elevation shaft.&lt;br /&gt;
&lt;br /&gt;
The elevator is supposed to be the shortest but most dangerous path from one default base to the other. The car is open at the top and allows small aliens or grenades to slip inside and deliver their devasting effect in a small space. Even if one survives the ride, there may be a heavily armed greeting committee waiting at the other end of the shaft. While big aliens or battlesuits have only the stairs as a less dangerous alternative, lighter forces can also use the ventilation shafts or even the elevator shaft itself for movement between the floors.&lt;br /&gt;
&lt;br /&gt;
==General Strategy==&lt;br /&gt;
'''Do''' try to control the big room in front of your default base's front entrance in order to defeat enemies before they get too close to your base. However, don't forget to have a look at the base itself as they are still able to sneak in.&lt;br /&gt;
&lt;br /&gt;
'''Don't''' open the third entrance to your base carelessly as it might not have as good protection as the other two entrances.&lt;br /&gt;
&lt;br /&gt;
==Human Strategy==&lt;br /&gt;
'''Do''' use [[Repeater|repeaters]] to protect all entrances to your default base as the [[Reactor|reactor's]] reach isn't big enough to power the whole room.&lt;br /&gt;
&lt;br /&gt;
==Alien Strategy==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
[[Category:Maps]]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Maps/Parpax&amp;diff=624</id>
		<title>Maps/Parpax</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Maps/Parpax&amp;diff=624"/>
		<updated>2012-08-12T20:56:13Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: A few tweaks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float:right;margin:1em 0px 1em 1em;border:2px outset #777;&amp;quot; border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:rgb(187,187,187);text-align:center&amp;quot; | '''Parpax'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;vertical-align:top&amp;quot; | '''Designated no. of players:'''&lt;br /&gt;
| style=&amp;quot;text-align:left;vertical-align:top&amp;quot; | 6-12&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;vertical-align:top&amp;quot; | '''No. of brushes:'''&lt;br /&gt;
| style=&amp;quot;text-align:left;vertical-align:top&amp;quot; | ~9.5k&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A small, intense map by [[User:Viech|Viech]].&lt;br /&gt;
&lt;br /&gt;
It is currently in a late alpha status and has not yet been released to public.&lt;br /&gt;
&lt;br /&gt;
==Gameflow==&lt;br /&gt;
[[Image:Parpax_Gameflow.jpg|200px|thumb|right|Gameflow chart]]&lt;br /&gt;
&lt;br /&gt;
The map consists of two floors connected by stairs, an elevator and ventilation shafts.&lt;br /&gt;
&lt;br /&gt;
The [[Humans|human team]] has their default base on the lower floor in a spacious storage room containing huge pillars carrying a platform which can be reached via stairs and a ladder. The front entrance consists of huge shutter doors that open slowly and are prone to trap both attacking aliens and humans fleeing back to their base. It leads to another big storage room which connects to stairs, elevator and elevation shafts and thus is of great tactical importance to both teams. The side entrance of the human base leads to a narrow corridor which runs next to that room and ends at the stairs. The lower floor also contains a network of elevation and pipe shafts, giving small aliens and lightly armored humans additional movement options.&lt;br /&gt;
&lt;br /&gt;
The [[Aliens|aliens]] have their default base in a tight room containing a strange machine. Its front entrance leads to a room which is, being close to stairs, elevator and elevation shafts, the counterpart of the storage room laying right under it. The side entrance leads to a longer but maybe less contested path to the stairs that also connects to the upper ends of the ventilation shafts.&lt;br /&gt;
&lt;br /&gt;
Both default bases have a third entrance that can be opened temporarily by pushing a button located in the respective base. The button in the human base moves aside girders that block access to the ventilation shafts. The aliens' button opens an emergency exit that is a short path to the stairs and connects to the elevation shaft.&lt;br /&gt;
&lt;br /&gt;
The elevator is supposed to be the shortest but most dangerous path from one default base to the other. The car is open at the top and allows small aliens or grenades to slip inside and deliver their devasting effect in a small space. Even if one survives the ride, there may be a heavily armed greeting committee waiting at the other end of the shaft. While big aliens or battlesuits have only the stairs as a less dangerous alternative, lighter forces can also use the ventilation shafts or even the elevator shaft itself for movement between the floors.&lt;br /&gt;
&lt;br /&gt;
==General Strategy==&lt;br /&gt;
'''Do''' try to control the big room in front of your default base's front entrance in order to defeat enemies before they get too close to your base. However, don't forget to have a look at the base itself as they are still able to sneak in.&lt;br /&gt;
&lt;br /&gt;
'''Don't''' open the third entrance to your base carelessly as it might not have as good protection as the other two entrances.&lt;br /&gt;
&lt;br /&gt;
==Human Strategy==&lt;br /&gt;
'''Do''' use [[Repeater|repeaters]] to protect all entrances to your default base as the [[Reactor|reactors]] reach isn't big enough to power the whole room.&lt;br /&gt;
&lt;br /&gt;
==Alien Strategy==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
[[Category:Maps]]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Old/Mapping&amp;diff=568</id>
		<title>Old/Mapping</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Old/Mapping&amp;diff=568"/>
		<updated>2012-07-29T14:27:43Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: ×&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Guides &amp;amp; Tutorials==&lt;br /&gt;
&lt;br /&gt;
[http://tremulous.net/forum/index.php?topic=14411.0 Useful mapping links thread on Tremulous forums]&lt;br /&gt;
&lt;br /&gt;
[http://tremmapping.pbworks.com/w/page/22453200/Starting%20Tremulous%20Mapping Starting Tremulous Mapping]&lt;br /&gt;
&lt;br /&gt;
[http://tremmapping.pbworks.com/w/page/22453205/Understanding%20Vis%20and%20Hint%20Brushes Understanding Vis and Hint Brushes]&lt;br /&gt;
&lt;br /&gt;
[http://q3map2.everyonelookbusy.net/shader_manual/ Shader Manual]&lt;br /&gt;
&lt;br /&gt;
==Basic Guidelines==&lt;br /&gt;
&lt;br /&gt;
Player sizes, in quake units (qu)&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Dretch		||30^3&lt;br /&gt;
|-&lt;br /&gt;
|Granger	||40^3&lt;br /&gt;
|-&lt;br /&gt;
|Adv Granger	||40^3&lt;br /&gt;
|-&lt;br /&gt;
|Basilisk	||36^3&lt;br /&gt;
|-&lt;br /&gt;
|Adv Basilisk	||42^3&lt;br /&gt;
|-&lt;br /&gt;
|Marauder	||46×46×36&lt;br /&gt;
|-&lt;br /&gt;
|Adv Marauder	||50×50×40&lt;br /&gt;
|-&lt;br /&gt;
|Dragoon	||52×52×55&lt;br /&gt;
|-&lt;br /&gt;
|Adv Dragoon	||58×58×66&lt;br /&gt;
|-&lt;br /&gt;
|Tyrant		||64×64×92&lt;br /&gt;
|-&lt;br /&gt;
|Human		||30×30×56&lt;br /&gt;
|-&lt;br /&gt;
|Crouching	||30×30×40&lt;br /&gt;
|-&lt;br /&gt;
|Battlesuit	||30×30×72&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Players will need an opening at least 1qu wider to fit through (possibly 2). In addition, player bounding boxes do not rotate, which means diagonal corridors would need to be wider (thus the majority should be axis aligned&lt;br /&gt;
&lt;br /&gt;
Map scale:&lt;br /&gt;
32qu = 1m&lt;br /&gt;
&lt;br /&gt;
Doorways should be a minimum of 3m×3m, preferably around 4m×4m. Corridors should be a minimum of 5m wide, although it is ''possible'' to use a mix of 4-5m (see Niveus for an example), and at most 8m wide. Do not create corridors more than 40m long without plenty of cover.&lt;br /&gt;
Currently large open areas and underwater areas are very human biased.&lt;br /&gt;
&lt;br /&gt;
Alien bases need cover to hide things behind, the entrances should be ~4×4m and should not be easily visible from outside other entrances.&lt;br /&gt;
&lt;br /&gt;
==New Features==&lt;br /&gt;
&lt;br /&gt;
You may be interested in the list of [[Engine features|engine features]].&lt;br /&gt;
&lt;br /&gt;
* [[Navigation Meshes]]&lt;br /&gt;
&lt;br /&gt;
==Where to place your map files==&lt;br /&gt;
&lt;br /&gt;
The most convenient place across platforms is to place your .bsp files and any other assets in the &amp;lt;code&amp;gt;main/maps/&amp;lt;/code&amp;gt; subfolder of the [[Running_the_game#Data_locations|data location]] appropriate to your system.&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
* [http://ingar.satgnu.net/gtkradiant/ Ingar's NetRadiant builds]&lt;br /&gt;
* [http://www.custommapmakers.org/wiki/index.php/Main_Page Custom Map Maker's Wiki]&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Compiling_the_source&amp;diff=456</id>
		<title>Compiling the source</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Compiling_the_source&amp;diff=456"/>
		<updated>2012-06-27T18:12:43Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: De-duplicate resources download information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
The preferred way of building Unvanquished on Mac OS X is to use Apple's [https://developer.apple.com/xcode/ XCode] along with [http://www.cmake.org/cmake/resources/software.html CMake]; CMake is used to generate an XCode project file that is then used to compile the code.&lt;br /&gt;
&lt;br /&gt;
First, you need to [[Getting_the_source|acquire the source code]].&lt;br /&gt;
&lt;br /&gt;
You may use [http://home.comcast.net/~chet102103/compile.sh this script] to perform these tasks. If you downloaded the source to a folder named &amp;lt;code&amp;gt;Unvanquished&amp;lt;/code&amp;gt; in the current directory, a typical invocation would look like this:&lt;br /&gt;
&lt;br /&gt;
 $./compile.sh --bundle --compile -s Unvanquished --build Unvanquished-build --bundle-dest .&lt;br /&gt;
&lt;br /&gt;
You will also need to build the libraries from source.&lt;br /&gt;
&lt;br /&gt;
Unvanquished requires the following:&lt;br /&gt;
* The jpeg library from the [http://www.ijg.org/ Independent JPEG Group], version 8 or higher. (Version 6 was known to have problems).&lt;br /&gt;
* Simple DirectMedia Layer&lt;br /&gt;
* The OpenGL Extension Wrangler Library&lt;br /&gt;
&lt;br /&gt;
Optional libraries:&lt;br /&gt;
* WebP&lt;br /&gt;
* Theora&lt;br /&gt;
* Speex&lt;br /&gt;
* XVid&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
&lt;br /&gt;
====JPEG====&lt;br /&gt;
&lt;br /&gt;
 $ curl http://www.ijg.org/files/jpegsrc.v8d.tar.gz &amp;gt; jpegsrc.v8d.tar.gz&lt;br /&gt;
 $ tar xvzf jpegsrc.v8d.tar.gz&lt;br /&gt;
 $ cd jpeg-8d&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
====The OpenGL Extension Wrangler Library (GLEW)====&lt;br /&gt;
&lt;br /&gt;
 $ curl -L https://sourceforge.net/projects/glew/files/glew/1.7.0/glew-1.7.0.tgz/download &amp;gt; glew-1.7.0.tgz&lt;br /&gt;
 $ tar xvzf glew-1.7.0.tgz&lt;br /&gt;
 $ cd glew-1.7.0&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
====Simple DirectMedia Layer (SDL)====&lt;br /&gt;
&lt;br /&gt;
At present, there are binaries for SDL.&lt;br /&gt;
&lt;br /&gt;
Intel systems running 10.5 or higher:&lt;br /&gt;
 $ curl http://www.libsdl.org/release/SDL-1.2.15.dmg &amp;gt; SDL-1.2.15.dmg&lt;br /&gt;
 $ hdiutil attach SDL-1.2.15.dmg&lt;br /&gt;
 $ sudo cp -r /Volumes/SDL/SDL.framework /Library/Frameworks&lt;br /&gt;
 $ hdiutil detach /Volumes/SDL&lt;br /&gt;
&lt;br /&gt;
Intel or PPC systems running 10.4 or higher:&lt;br /&gt;
 $ curl http://www.libsdl.org/release/SDL-1.2.15-OSX10.4.dmg &amp;gt; SDL-1.2.15-OSX10.4.dmg&lt;br /&gt;
 $ hdiutil attach SDL-1.2.15-OSX10.4.dmg&lt;br /&gt;
 $ sudo cp -r /Volumes/SDL/SDL.framework /Library/Frameworks&lt;br /&gt;
 $ hdiutil detach /Volumes/SDL&lt;br /&gt;
&lt;br /&gt;
====The GNU MP Bignum Library (libgmp)====&lt;br /&gt;
&lt;br /&gt;
 $ curl ftp://ftp.gmplib.org/pub/gmp-5.0.5/gmp-5.0.5.tar.bz2 &amp;gt; gmp-5.0.5.tar.bz2&lt;br /&gt;
 $ tar xvjf gmp-5.0.5.tar.bz2&lt;br /&gt;
 $ cd gmp-5.0.5&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
====Ogg====&lt;br /&gt;
&lt;br /&gt;
 $ curl http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz &amp;gt; libogg-1.3.0.tar.gz&lt;br /&gt;
 $ tar xvzf libogg-1.3.0.tar.gz&lt;br /&gt;
 $ cd libogg-1.3.0&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
====Vorbis====&lt;br /&gt;
&lt;br /&gt;
 $ curl http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz &amp;gt; libvorbis-1.3.3.tar.gz&lt;br /&gt;
 $ tar xvzf libvorbis-1.3.3.tar.gz&lt;br /&gt;
 $ cd libvorbis-1.3.3&lt;br /&gt;
 $ ./configure&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
===Configuring with CMake===&lt;br /&gt;
&lt;br /&gt;
# Run CMake.&lt;br /&gt;
# Enter the location of the source code.&lt;br /&gt;
# Enter the location in which you would like to build the source code. This should be a different directory.&lt;br /&gt;
# Click &amp;quot;Configure&amp;quot;. You will be prompted as to which generator you would like to use. If you have Xcode installed, choose that. Wait while the configuration process runs. You may have to set the following:&lt;br /&gt;
## If CMake did not find your jpeg headers for some reason, set &amp;lt;code&amp;gt;JPEG_INCLUDE_DIR&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;/path/to/Unvanquished/src/libs/jpeg&amp;lt;/code&amp;gt;.&lt;br /&gt;
## You may safely disable &amp;lt;code&amp;gt;USE_WEBP&amp;lt;/code&amp;gt; to avoid having to compile the library. (At present, the format is not used by any game assets.)&lt;br /&gt;
## Check &amp;lt;code&amp;gt;USE_INTERNAL_CRYPTO&amp;lt;/code&amp;gt; to avoid having to compile nettle and hogweed.&lt;br /&gt;
## Check &amp;lt;code&amp;gt;USE_INTERNAL_SPEEX&amp;lt;/code&amp;gt; to avoid having to compile Speex.&lt;br /&gt;
## Uncheck &amp;lt;code&amp;gt;USE_CIN_THEORA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;USE_CIN_XVID&amp;lt;/code&amp;gt; to avoid having to compile Theora or Xvid. (At present, there are not cutscenes or any such that require it.)&lt;br /&gt;
## '''You will probably not be able to compile with the GLSL optimizer enabled; uncheck &amp;lt;code&amp;gt;USE_GLSL_OPTIMIZER&amp;lt;/code&amp;gt;'''&lt;br /&gt;
## If you have selected to generate XCode project files, make the &amp;lt;code&amp;gt;SDLMAIN_LIBRARY&amp;lt;/code&amp;gt; field blank. This option is not available if you have the generator set to Unix makefiles.&lt;br /&gt;
# Click &amp;quot;Generate&amp;quot;.&lt;br /&gt;
# You may now close XCode.&lt;br /&gt;
&lt;br /&gt;
===Compiling===&lt;br /&gt;
&lt;br /&gt;
====With XCode====&lt;br /&gt;
# Either start XCode and open the project file (in the build directory you specified) or double-click the project file in Finder.&lt;br /&gt;
# Open the project file created by CMake, which should be in the build directory you specified.&lt;br /&gt;
# Change the active target to &amp;quot;ALL_BUILD&amp;quot; and click Product&amp;amp;rarr;Build.&lt;br /&gt;
&lt;br /&gt;
====With Unix Makefiles====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Start Terminal (Applications &amp;amp;rarr; Utilities &amp;amp;rarr; Terminal).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Type the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /path/to/Unvanquished-build&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are on a multi-core or multi-processor machine, you may speed up the process by passing the &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; argument followed by the number of available cores to &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;; e.g., &amp;lt;code&amp;gt;make -j4&amp;lt;/code&amp;gt;. Note that doing so makes reading error messages more difficult, as multiple instances of the compiler will print to the screen at once, causing information to appear out of order.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Testing the build===&lt;br /&gt;
&lt;br /&gt;
====With Unix Makefiles====&lt;br /&gt;
&lt;br /&gt;
After compiling, you'll have to place the data files in the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; directory in your build directory. [[#Acquiring the Game Files|For download instructions, see below.]]&lt;br /&gt;
&lt;br /&gt;
Your file structure should look as follows:&lt;br /&gt;
&lt;br /&gt;
[[File:Build_dir_Mac_OS_X.png]]&lt;br /&gt;
&lt;br /&gt;
You may now start the application as such:&lt;br /&gt;
&lt;br /&gt;
 $ ./daemon.i386&lt;br /&gt;
&lt;br /&gt;
Note that older machines will not support the new OpenGL 3 renderer, and must be started specifying the &amp;quot;vanilla&amp;quot; (aka &amp;quot;GL&amp;quot;) renderer:&lt;br /&gt;
&lt;br /&gt;
 $ ./daemon.i386 +set cl_renderer GL&lt;br /&gt;
&lt;br /&gt;
===Bundling the Application===&lt;br /&gt;
&lt;br /&gt;
====With CPack====&lt;br /&gt;
&lt;br /&gt;
CPack is able to create standalone bundles (as well as many other types of installers). However you must generate the files using Unix Makefiles instead of XCode.&lt;br /&gt;
$ cd /path/to/Unvanquished-build&lt;br /&gt;
$ cpack -G Bundle&lt;br /&gt;
Some warnings will be printed however these can be safely ignored. There should be a file called Unvanquished.dmg in the Unvanquished-build folder.&lt;br /&gt;
&lt;br /&gt;
====Manually====&lt;br /&gt;
&lt;br /&gt;
You'll find the Mac [http://macdylibbundler.sourceforge.net/ dynamic library bundler] to be quite useful (you must generate the files using Unix Makefiles instead of XCode):&lt;br /&gt;
&lt;br /&gt;
 $ curl -L http://sourceforge.net/projects/macdylibbundler/files/macdylibbundler/0.4.1/dylibbundler0.4.1.zip/download &amp;gt; dylibbundler0.4.1.zip&lt;br /&gt;
 $ unzip dylibbundler0.4.1.zip&lt;br /&gt;
 $ cd dylibbundler&lt;br /&gt;
 $ make&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Once you've done that, you can proceed to create the application bundle. Note that these steps assume that you have downloaded the data files to &amp;lt;code&amp;gt;main/&amp;lt;/code&amp;gt; as shown above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git=/path/to/Unvanquished-git-repo&lt;br /&gt;
$ build=/path/to/Unvanquished-build-dir&lt;br /&gt;
$ mkdir -pv Unvanquished.app/Contents/{libs,MacOS,Resources,Frameworks}&lt;br /&gt;
$ cp -r $build/main Unvanquished.app/Contents/MacOS&lt;br /&gt;
$ sips -s format tiff $git/debian/unvanquished.png --out temp.tiff&lt;br /&gt;
$ tiff2icns temp.tiff Unvanquished.app/Contents/Resources/Unvanquished.icns&lt;br /&gt;
$ rm temp.tiff&lt;br /&gt;
$ cp $build/daemon{,ded}.i386 $build/*.dylib Unvanquished.app/Contents/MacOS&lt;br /&gt;
$ cp -r /Library/Frameworks/SDL.framework Unvanquished.app/Contents/Frameworks&lt;br /&gt;
$ install_name_tool -id @executable_path/../Frameworks/SDL.framework/Versions/A/SDL Unvanquished.app/Contents/Frameworks/SDL.framework/Versions/A/SDL&lt;br /&gt;
$ install_name_tool -change @rpath/SDL.framework/Versions/A/SDL @executable_path/../Frameworks/SDL.framework/Versions/A/SDL Unvanquished.app/Contents/MacOS/daemon.i386&lt;br /&gt;
$ install_name_tool -change @rpath/SDL.framework/Versions/A/SDL @executable_path/../Frameworks/SDL.framework/Versions/A/SDL Unvanquished.app/Contents/MacOS/librendererGLi386.dylib&lt;br /&gt;
$ install_name_tool -change @rpath/SDL.framework/Versions/A/SDL @executable_path/../Frameworks/SDL.framework/Versions/A/SDL Unvanquished.app/Contents/MacOS/librendererGL3i386.dylib&lt;br /&gt;
$ for binary in Unvanquished.app/Contents/MacOS/*.{i386,dylib}; do dylibbundler -b -x $binary -d $dest/Unvanquished.app/Contents/libs/; done&lt;br /&gt;
$ cp /usr/lib/libGLEW.1.7.0.dylib ./Unvanquished.app/Contents/libs/libGLEW.1.7.0.dylib&lt;br /&gt;
$ chmod +w ./Unvanquished.app/Contents/libs/libGLEW.1.7.0.dylib&lt;br /&gt;
$ install_name_tool -id @executable_path/../libs/libGLEW.1.7.0.dylib ./Unvanquished.app/Contents/libs/libGLEW.1.7.0.dylib&lt;br /&gt;
$ install_name_tool -change /usr/lib/libGLEW.1.7.0.dylib @executable_path/../libs/libGLEW.1.7.0.dylib ./Unvanquished.app/Contents/MacOS/daemon.i386&lt;br /&gt;
$ cat &amp;gt; Unvanquished.app/Contents/Info.plist&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleName&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;Unvanquished&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleDisplayName&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;Unvanquished&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleExecutable&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;daemon.i386&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleIconFile&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;Unvanquished.icns&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleIdentifier&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;net.Unvanquished&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleInfoDictionaryVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;6.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundlePackageType&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;APPL&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleShortVersionString&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;0.4.0&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;CFBundleVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;0.4.0&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
^d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: &amp;lt;code&amp;gt;^d&amp;lt;/code&amp;gt; indicates pressing &amp;lt;span class=&amp;quot;key&amp;quot;&amp;gt;Ctrl&amp;lt;/span&amp;gt;+&amp;lt;span class=&amp;quot;key&amp;quot;&amp;gt;D&amp;lt;/span&amp;gt; on the keyboard.&lt;br /&gt;
&lt;br /&gt;
The contents of the completed application bundle should look like this:&lt;br /&gt;
&lt;br /&gt;
[[File:Bundle_dir_Mac_OS_X.png]]&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&lt;br /&gt;
===Visual Studio===&lt;br /&gt;
&lt;br /&gt;
CMake can generate Visual Studio projects for unvanquished however this feature is relatively new and may have some bugs.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
# Double click on Visual_Studio32.bat&lt;br /&gt;
# Open build-32/Daemon.sln in Visual Studio 2010.&lt;br /&gt;
# In the two text boxes in the toolbar, select &amp;quot;Release&amp;quot; or &amp;quot;Debug&amp;quot; in the first one and Win32 in the second one&lt;br /&gt;
# Press F5 to build solution and run application, or just use Build &amp;amp;rarr; Build Solution to compile the code.&lt;br /&gt;
&lt;br /&gt;
====Important Notes====&lt;br /&gt;
&lt;br /&gt;
* The CMake script currently only supports 32 bit builds however this will change in the future&lt;br /&gt;
* QVM, LLVM and glsl-optimizer are disabled and probably do not work correctly with CMake generated Visual Studio projects.&lt;br /&gt;
* ncurses is not supported under Visual Studio.&lt;br /&gt;
&lt;br /&gt;
===MinGW===&lt;br /&gt;
Unvanquished is supported under MinGW. The build process should be fairly similar to the Linux instructions.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: this may be incomplete --&amp;gt;&lt;br /&gt;
====Debian/Ubuntu====&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libcurl4-gnutls-dev libfreetype6-dev libglew1.5-dev \&lt;br /&gt;
   libgmp3-dev libjpeg8-dev libncurses5-dev libogg-dev libopenal-dev \&lt;br /&gt;
   libpng12-dev libsdl1.2-dev libvorbis-dev zlib1g-dev nettle-dev \&lt;br /&gt;
   libwebp-dev libspeexdsp-dev libtheora-dev&lt;br /&gt;
&lt;br /&gt;
Actual dev package names may vary, e.g. libgmp-dev instead of libgmp3-dev and libglew-dev or libglew1.7-dev instead of libglew1.5-dev.&lt;br /&gt;
&lt;br /&gt;
Since we have a debian directory in the source, you can also to check what's needed then install the listed packages (choosing from alternatives as needed):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ dpkg-checkbuilddeps&lt;br /&gt;
 …&lt;br /&gt;
 $ sudo apt-get install &amp;lt;var&amp;gt;package(s)&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If dpkg-checkbuilddeps produces no output, you have all necessary build dependencies. Also, debhelper's only needed if you're building .debs.&lt;br /&gt;
&lt;br /&gt;
====Gentoo====&lt;br /&gt;
&lt;br /&gt;
 $ emerge curl freetype glew gmp jpeg ncurses libogg openal libpng libsdl libvorbis zlib&lt;br /&gt;
&lt;br /&gt;
===Configuring the code with CMake===&lt;br /&gt;
&lt;br /&gt;
After you have [[Getting the source|acquired the source code]], you can proceed to compile. Unvanquished uses CMake, so you must have that installed. &lt;br /&gt;
&lt;br /&gt;
====Using ccmake (curses-based front-end)====&lt;br /&gt;
&lt;br /&gt;
On Debian or Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install cmake-curses-gui&lt;br /&gt;
&lt;br /&gt;
On Gentoo you should set the '''ncurses''' USE flag either globally or individually, just for cmake.&lt;br /&gt;
To add the USE flag globally, edit the USE array in /etc/make.conf for it to include '''ncurses'''.&lt;br /&gt;
To only install cmake with ncurses functionality, you could do the following:&lt;br /&gt;
&lt;br /&gt;
 $ echo 'dev-util/cmake ncurses' &amp;gt;&amp;gt; /etc/portage/package.use &amp;amp;&amp;amp; emerge cmake&lt;br /&gt;
&lt;br /&gt;
Note that in Ubuntu, &amp;lt;code&amp;gt;cmake-curses-gui&amp;lt;/code&amp;gt; is in Universe, which you may have to enable with &amp;lt;code&amp;gt;software-properties-gtk&amp;lt;/code&amp;gt;. Make sure to reload the software sources with &amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt; afterwards.&lt;br /&gt;
&lt;br /&gt;
Next, configure the codebase.&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ mkdir build&lt;br /&gt;
 $ cd build&lt;br /&gt;
 $ ccmake ..&lt;br /&gt;
&lt;br /&gt;
Or, in Debian or Ubuntu, you can build a package (but you'll need to have devscripts and fakeroot installed):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ fakeroot dpkg-buildpackage -b -uc&lt;br /&gt;
 $ sudo dpkg -i &amp;lt;var&amp;gt;../unvanquished_*.deb&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once in &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt;, use the following keys:&lt;br /&gt;
&lt;br /&gt;
* Press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; to configure. If an error occurs during this phase, make note of it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;e&amp;lt;/span&amp;gt; to dismiss it.&lt;br /&gt;
* Use the up and down arrow keys to navigate the compilation options.&lt;br /&gt;
* Press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;Enter&amp;lt;/span&amp;gt; to enable or disable boolean options (i.e., on/off) or to edit textual options.&lt;br /&gt;
** Press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;Esc&amp;lt;/span&amp;gt; when editing a textual option to cancel the change.&lt;br /&gt;
&lt;br /&gt;
Once you have finished the configuration process, press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;C&amp;lt;/span&amp;gt; again, then &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;G&amp;lt;/span&amp;gt; to generate the makefile.&lt;br /&gt;
&lt;br /&gt;
====Using cmake-qt-gui (graphical front-end)====&lt;br /&gt;
&lt;br /&gt;
This graphical front end for cmake has its own package you must install:&lt;br /&gt;
&lt;br /&gt;
=====Debian/Ubuntu=====&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install cmake-qt-gui&lt;br /&gt;
&lt;br /&gt;
=====Gentoo=====&lt;br /&gt;
&lt;br /&gt;
With the '''qt4''' USE flag enabled:&lt;br /&gt;
&lt;br /&gt;
 $ emerge cmake&lt;br /&gt;
&lt;br /&gt;
Once installed, run with &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cmake-qt-gui.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
# Set the path where you have the source code downloaded.&lt;br /&gt;
# Set the path where you would like to build the engine. This may be the same directory if you wish.&lt;br /&gt;
# Click 'Configure'.&lt;br /&gt;
# Click 'Generate'.&lt;br /&gt;
&lt;br /&gt;
====Unnecessary libraries====&lt;br /&gt;
&lt;br /&gt;
Regardless of which front-end to cmake you use, you may want to disable some libraries that are not strictly necessary:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_WEBP&amp;lt;/code&amp;gt; &amp;amp;mdash; Some maps use WebP to store their textures. Currently this should have little impact on gameplay but more maps will likely use this format in the future.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_OPENAL&amp;lt;/code&amp;gt; &amp;amp;mdash; If this is disabled, SDL is used instead for sound.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CODEC_VORBIS&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this will cause certain sound effects (those using the &amp;lt;code&amp;gt;.ogg&amp;lt;/code&amp;gt; format) not to play. At present, this has only a minor impact on gameplay, but more and more sounds will likely use the format in the future.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CURSES&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this will cause the external (not in-game) console to not use curses; it will not be scrollable and will be similar to the console in the original Tremulous. This does in no way affect gameplay.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CIN_THEORA&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this prevents videos from being recorded in Theora.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CIN_XVID&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this prevents videos from being recorded in Xvid.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_VOIP&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this removes VOIP support. Alternatively enabling &amp;lt;code&amp;gt;USE_INTERNAL_SPEEX&amp;lt;/code&amp;gt; will use the libraries distributed with Unvanquished for VoIP&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_INTERNAL_CRYPTO&amp;lt;/code&amp;gt; &amp;amp;mdash; Enable this to use the crypto libraries provided by Unvanquished.&lt;br /&gt;
&lt;br /&gt;
===Compiling===&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;path/to/unvanquished/build&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ make -j4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; switch to make allows you to speed up the compilation process by running it in multiple threads; set the number following this to the number of cores your processor(s) have.&lt;br /&gt;
&lt;br /&gt;
===Acquiring the Game Files===&lt;br /&gt;
&lt;br /&gt;
The game files are not in the Git repository, and must be downloaded separately.&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;path/to/Unvanquished/build&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ cd main&lt;br /&gt;
 $ wget http://sourceforge.net/projects/unvanquished/files/Assets/pak0.pk3/download&lt;br /&gt;
 $ wget http://sourceforge.net/projects/unvanquished/files/Assets/pak1.pk3/download&lt;br /&gt;
 $ wget http://sourceforge.net/projects/unvanquished/files/Assets/pak2.pk3/download&lt;br /&gt;
 $ wget http://sourceforge.net/projects/unvanquished/files/Map%20Pack/maps.7z/download&lt;br /&gt;
&lt;br /&gt;
You can also get the pak files in this way (requires curl):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;path/to/Unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ mkdir -p ~/.Unvanquished/main&lt;br /&gt;
 $ ./download-pk3.sh ~/.Unvanquished/main&lt;br /&gt;
&lt;br /&gt;
The maps archive file isn't strictly necessary: if you don't have a particular map, the game will, by default, download missing files for you.&lt;br /&gt;
&lt;br /&gt;
Now you can proceed to [[running the game]].&lt;br /&gt;
&lt;br /&gt;
==Errors==&lt;br /&gt;
&lt;br /&gt;
===CMake cannot locate Newton===&lt;br /&gt;
&lt;br /&gt;
If CMake cannot find Newton, you'll need to set it up yourself.&lt;br /&gt;
&lt;br /&gt;
It should be in &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;/path/to/Unvanquished&amp;lt;/var&amp;gt;/src/libs/libnewton/libs/&amp;lt;var&amp;gt;your_os&amp;lt;/var&amp;gt;/libNewton.so&amp;lt;/code&amp;gt;.&lt;br /&gt;
Be sure to replace &amp;lt;var&amp;gt;your_os&amp;lt;/var&amp;gt; with the proper directory name.&lt;br /&gt;
&lt;br /&gt;
Use CMake as before to change the &amp;lt;code&amp;gt;NEWTON_LIBRARY&amp;lt;/code&amp;gt; build setting to the said path:&lt;br /&gt;
&lt;br /&gt;
# Start the CMake configurator:&amp;lt;pre&amp;gt;$ ccmake ..&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Scroll down and highlight &amp;lt;code&amp;gt;NEWTON_LIBRARY&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;Enter&amp;lt;/span&amp;gt; to begin editing and input in the path.&lt;br /&gt;
# Press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;C&amp;lt;/span&amp;gt; to configure and &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;G&amp;lt;/span&amp;gt; to generate the new makefiles.&lt;br /&gt;
# Press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;Q&amp;lt;/span&amp;gt; to quit.&lt;br /&gt;
# Recompile the source:&amp;lt;pre&amp;gt;$ make&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=296</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=296"/>
		<updated>2012-05-11T11:52:54Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: Float the TOC at the top right. It's tall…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
'''''The information on this page is incomplete.'''''&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Daemon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Daemon                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
==New commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===LoadTranslations===&lt;br /&gt;
&lt;br /&gt;
===SaveNewTranslations===&lt;br /&gt;
&lt;br /&gt;
===SaveTranslations===&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example: &amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=295</id>
		<title>Creating custom keybinds</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Creating_custom_keybinds&amp;diff=295"/>
		<updated>2012-05-11T11:51:36Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: List new commands since Tremulous GPP r2259&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
'''''The information on this page is incomplete.'''''&lt;br /&gt;
&lt;br /&gt;
A number of commands for keybinds have changed since Tremulous, so keybind configurations cannot be directly copied from Tremulous to Daemon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tremulous             || Daemon                 || Used for…&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+useitem&amp;lt;/code&amp;gt;  || Using an item; granger spit; dragoon barb&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button3&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+taunt&amp;lt;/code&amp;gt;    || “Come on!” etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button5&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+attack2&amp;lt;/code&amp;gt;  || Secondary attack&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button6&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+dodge&amp;lt;/code&amp;gt;    || Dodging&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button7&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+activate&amp;lt;/code&amp;gt; || Using a structure; evolving&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;+button8&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+sprint&amp;lt;/code&amp;gt;   || Sprinting&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As of alpha 3, the &amp;lt;code&amp;gt;+button''N''&amp;lt;/code&amp;gt; commands are no longer present.&lt;br /&gt;
&lt;br /&gt;
You may want to bind the new [[Voice say system|vsays]] to different keys.&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
==New commands==&lt;br /&gt;
&lt;br /&gt;
This is a partial list of commands added, using Tremulous GPP r2259 as a reference point. Not everything listed is actually useful.&lt;br /&gt;
&lt;br /&gt;
===+activate===&lt;br /&gt;
Access an armoury; evolve.&lt;br /&gt;
&lt;br /&gt;
===+attack2===&lt;br /&gt;
Secondary attack.&lt;br /&gt;
&lt;br /&gt;
===+dodge===&lt;br /&gt;
Low jump sideways or backwards. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+sprint===&lt;br /&gt;
Run. (Humans only.)&lt;br /&gt;
&lt;br /&gt;
===+taunt===&lt;br /&gt;
“Come on!” etc.&lt;br /&gt;
&lt;br /&gt;
===+useitem===&lt;br /&gt;
Use the highlighted item; tertiary attack (granger spit, dragoon snipe).&lt;br /&gt;
&lt;br /&gt;
===LoadTranslations===&lt;br /&gt;
&lt;br /&gt;
===SaveNewTranslations===&lt;br /&gt;
&lt;br /&gt;
===SaveTranslations===&lt;br /&gt;
&lt;br /&gt;
===alias===&lt;br /&gt;
&amp;lt;tt&amp;gt;alias NAME COMMAND [PARAMETERS…]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create an alias for the given command. The alias is then useable as a command in its own right.&lt;br /&gt;
&lt;br /&gt;
===aliaslist===&lt;br /&gt;
Lists available command aliases.&lt;br /&gt;
&lt;br /&gt;
===animationlist===&lt;br /&gt;
&lt;br /&gt;
===buildcubemaps===&lt;br /&gt;
&lt;br /&gt;
===cache_endgather===&lt;br /&gt;
&lt;br /&gt;
===cache_mapchange===&lt;br /&gt;
&lt;br /&gt;
===cache_setindex===&lt;br /&gt;
&lt;br /&gt;
===cache_startgather===&lt;br /&gt;
&lt;br /&gt;
===cache_usedfile===&lt;br /&gt;
&lt;br /&gt;
===calc===&lt;br /&gt;
&lt;br /&gt;
===clearaliases===&lt;br /&gt;
Clears all command aliases.&lt;br /&gt;
&lt;br /&gt;
===concat===&lt;br /&gt;
&lt;br /&gt;
===cycle===&lt;br /&gt;
&lt;br /&gt;
===delay===&lt;br /&gt;
&lt;br /&gt;
===editbind===&lt;br /&gt;
&amp;lt;tt&amp;gt;editbind KEY&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This inserts a &amp;lt;tt&amp;gt;/bind&amp;lt;/tt&amp;gt; command into the in-game console, ready for editing. The console is opened if needed.&lt;br /&gt;
&lt;br /&gt;
===fbolist===&lt;br /&gt;
&lt;br /&gt;
===fieldinfo===&lt;br /&gt;
&lt;br /&gt;
===gameCompleteStatus===&lt;br /&gt;
&lt;br /&gt;
===glsl_restart===&lt;br /&gt;
Development use. For recompiling the GLSL shader code.&lt;br /&gt;
&lt;br /&gt;
===grep===&lt;br /&gt;
&amp;lt;tt&amp;gt;grep TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches the in-game console for occurrences of &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt;. Matching lines are reprinted.&lt;br /&gt;
&lt;br /&gt;
===help===&lt;br /&gt;
&lt;br /&gt;
===if===&lt;br /&gt;
&amp;lt;tt&amp;gt;if VALUE CONDITION VALUE THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;if MODIFIERS THEN [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;tt&amp;gt;VALUE&amp;lt;/tt&amp;gt; : a variable or number&lt;br /&gt;
; &amp;lt;tt&amp;gt;CONDITION&amp;lt;/tt&amp;gt; : comparison operator&lt;br /&gt;
; &amp;lt;tt&amp;gt;MODIFIERS&amp;lt;/tt&amp;gt; : comma-separated list of keyboard modifiers: Shift, Ctrl, Alt, Command (or Cmd), Mode, Super. Prefix any which must not be pressed with &amp;lt;kbd&amp;gt;!&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
; &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; : either a variable name or, if prefixed with &amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt; or &amp;lt;kbd&amp;gt;\&amp;lt;/kbd&amp;gt;, a command string.&lt;br /&gt;
&lt;br /&gt;
Either the &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; clause or the &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; clause (if present) will be executed. If it is a variable name, its content will be executed.&lt;br /&gt;
&lt;br /&gt;
For example: &amp;lt;pre&amp;gt;/if shift &amp;quot;/echo Hello&amp;quot; &amp;quot;/echo Goodbye&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===irc_connect===&lt;br /&gt;
&lt;br /&gt;
===irc_quit===&lt;br /&gt;
&lt;br /&gt;
===irc_say===&lt;br /&gt;
&lt;br /&gt;
===listrotation===&lt;br /&gt;
Lists the current map rotation. The current map is highlighted.&lt;br /&gt;
&lt;br /&gt;
===loadgame===&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
&lt;br /&gt;
===messagemode4===&lt;br /&gt;
This command opens a chat prompt for the built-in IRC client.&lt;br /&gt;
&lt;br /&gt;
===modcase===&lt;br /&gt;
&amp;lt;tt&amp;gt;modcase MODIFIERS THEN [MODIFIERS THEN]* [ELSE]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works like &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt;. The leftmost most-specific &amp;lt;tt&amp;gt;THEN&amp;lt;/tt&amp;gt; whose modifier list matches is the one which is executed; if none match, then &amp;lt;tt&amp;gt;ELSE&amp;lt;/tt&amp;gt; is executed if it is present.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;/modcase shift &amp;quot;/echo 1&amp;quot; ctrl &amp;quot;/echo 2&amp;quot; shift,ctrl &amp;quot;/echo 3&amp;quot; shift,!alt &amp;quot;/echo 4&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
works as follows:&lt;br /&gt;
&lt;br /&gt;
# if Shift and Alt (due to clause 4) but not Ctrl (due to clause 3) are pressed;&lt;br /&gt;
# if Ctrl but not Shift (due to clause 3);&lt;br /&gt;
# if Shift and Ctrl;&lt;br /&gt;
# if Shift but neither Alt nor Ctrl.&lt;br /&gt;
&lt;br /&gt;
===modelist===&lt;br /&gt;
&lt;br /&gt;
===openurl===&lt;br /&gt;
&lt;br /&gt;
===pubkey===&lt;br /&gt;
&lt;br /&gt;
===pubkey_identify===&lt;br /&gt;
&lt;br /&gt;
===random===&lt;br /&gt;
&lt;br /&gt;
===reloadhud===&lt;br /&gt;
&lt;br /&gt;
===say_area_team===&lt;br /&gt;
&lt;br /&gt;
===screenshotPNG===&lt;br /&gt;
Saves a screenshot.&lt;br /&gt;
&lt;br /&gt;
===search===&lt;br /&gt;
&amp;lt;tt&amp;gt;search TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches back through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===searchDown===&lt;br /&gt;
&amp;lt;tt&amp;gt;searchDown TEXT&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Searches forward through the in-game console for &amp;lt;tt&amp;gt;TEXT&amp;lt;/tt&amp;gt; and scrolls to it.&lt;br /&gt;
&lt;br /&gt;
===setRecommended===&lt;br /&gt;
&lt;br /&gt;
===shaderexp===&lt;br /&gt;
&lt;br /&gt;
===snd_reload===&lt;br /&gt;
&lt;br /&gt;
===spdevmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===speclock===&lt;br /&gt;
&lt;br /&gt;
===specunlock===&lt;br /&gt;
&lt;br /&gt;
===spmap===&lt;br /&gt;
Does nothing.&lt;br /&gt;
&lt;br /&gt;
===strcmp===&lt;br /&gt;
&lt;br /&gt;
===toggleConsole===&lt;br /&gt;
Opens or closes the in-game console.&lt;br /&gt;
&lt;br /&gt;
===ui_restart===&lt;br /&gt;
Reloads UI files.&lt;br /&gt;
&lt;br /&gt;
===unalias===&lt;br /&gt;
&amp;lt;tt&amp;gt;unalias NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Removes the named alias.&lt;br /&gt;
&lt;br /&gt;
===undelay===&lt;br /&gt;
&lt;br /&gt;
===undelayAll===&lt;br /&gt;
&lt;br /&gt;
===unregister===&lt;br /&gt;
Removes registration of your GUID and name.&lt;br /&gt;
&lt;br /&gt;
===updatehunkusage===&lt;br /&gt;
&lt;br /&gt;
===updatescreen===&lt;br /&gt;
&lt;br /&gt;
===vbolist===&lt;br /&gt;
&lt;br /&gt;
===wav_record===&lt;br /&gt;
&lt;br /&gt;
===wav_stoprecord===&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Compiling_the_source&amp;diff=264</id>
		<title>Compiling the source</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Compiling_the_source&amp;diff=264"/>
		<updated>2012-05-03T19:08:34Z</updated>

		<summary type="html">&lt;p&gt;Anomalous: /* Acquiring the Game Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
The preferred way of building Unvanquished on Mac OS X is to use Apple's [https://developer.apple.com/xcode/ XCode] along with [http://www.cmake.org/cmake/resources/software.html CMake]; CMake is used to generate an XCode project file that is then used to compile the code.&lt;br /&gt;
&lt;br /&gt;
First, you need to [[Getting_the_source##Mac_OS_X_2|acquire the source code]].&lt;br /&gt;
&lt;br /&gt;
Next, perform the following:&lt;br /&gt;
&lt;br /&gt;
# Run CMake.&lt;br /&gt;
# Enter the location of the source code.&lt;br /&gt;
# Enter the location in which you would like to build the source code. This may be the same directory.&lt;br /&gt;
# Click &amp;quot;Configure&amp;quot;. You will be prompted as to which generator you would like to use. If you have Xcode installed, choose that.&lt;br /&gt;
# Wait while the configuration process runs.&lt;br /&gt;
# '''''TODO: explain which libraries will likely have to be set'''''&lt;br /&gt;
# Click &amp;quot;Generate&amp;quot;.&lt;br /&gt;
# Close CMake and open Xcode.&lt;br /&gt;
# Open the project file created by CMake, which should be in the build directory you specified.&lt;br /&gt;
# Click the build button.&lt;br /&gt;
&lt;br /&gt;
Unvanquished can also be built from the command line if you're not a fan of Xcode. The build process is the same as under Linux.&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&lt;br /&gt;
The preferred way of building Unvanquished on Windows is to use Microsoft Visual Studio 2010.&lt;br /&gt;
The free Express version of the software works fine.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
# Open src/engine/Daemon.sln in Visual Studio 2010.&lt;br /&gt;
# In the two text boxes in the toolbar, select &amp;quot;Release&amp;quot; in the first one and Win32 or Win64 in the second one&lt;br /&gt;
# Press F5 to build solution and run application, or just use Build &amp;amp;rarr; Build Solution to compile the code.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
===Dependencies===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: this may be incomplete --&amp;gt;&lt;br /&gt;
====Debian/Ubuntu====&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libcurl4-gnutls-dev libfreetype6-dev libglew1.5-dev \&lt;br /&gt;
   libgmp3-dev libjpeg8-dev libncurses5-dev libogg-dev libopenal-dev \&lt;br /&gt;
   libpng12-dev libsdl1.2-dev libvorbis-dev zlib1g-dev nettle-dev \&lt;br /&gt;
   libwebp-dev libspeexdsp-dev libtheora-dev&lt;br /&gt;
&lt;br /&gt;
Actual dev package names may vary, e.g. libgmp-dev instead of libgmp3-dev and libglew-dev or libglew1.7-dev instead of libglew1.5-dev.&lt;br /&gt;
&lt;br /&gt;
Since we have a debian directory in the source, you can also to check what's needed then install the listed packages (choosing from alternatives as needed):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ dpkg-checkbuilddeps&lt;br /&gt;
 …&lt;br /&gt;
 $ sudo apt-get install &amp;lt;var&amp;gt;package(s)&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If dpkg-checkbuilddeps produces no output, you have all necessary build dependencies. Also, debhelper's only needed if you're building .debs.&lt;br /&gt;
&lt;br /&gt;
====Gentoo====&lt;br /&gt;
&lt;br /&gt;
 $ emerge curl freetype glew gmp jpeg ncurses libogg openal libpng libsdl libvorbis zlib&lt;br /&gt;
&lt;br /&gt;
===Configuring the code with CMake===&lt;br /&gt;
&lt;br /&gt;
After you have [[Getting the source|acquired the source code]], you can proceed to compile. Unvanquished uses CMake, so you must have that installed. &lt;br /&gt;
&lt;br /&gt;
====Using ccmake (curses-based front-end)====&lt;br /&gt;
&lt;br /&gt;
On Debian or Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install cmake-curses-gui&lt;br /&gt;
&lt;br /&gt;
On Gentoo you should set the '''ncurses''' USE flag either globally or individually, just for cmake.&lt;br /&gt;
To add the USE flag globally, edit the USE array in /etc/make.conf for it to include '''ncurses'''.&lt;br /&gt;
To only install cmake with ncurses functionality, you could do the following:&lt;br /&gt;
&lt;br /&gt;
 $ echo 'dev-util/cmake ncurses' &amp;gt;&amp;gt; /etc/portage/package.use &amp;amp;&amp;amp; emerge cmake&lt;br /&gt;
&lt;br /&gt;
Note that in Ubuntu, &amp;lt;code&amp;gt;cmake-curses-gui&amp;lt;/code&amp;gt; is in Universe, which you may have to enable with &amp;lt;code&amp;gt;software-properties-gtk&amp;lt;/code&amp;gt;. Make sure to reload the software sources with &amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt; afterwards.&lt;br /&gt;
&lt;br /&gt;
Next, configure the codebase.&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ mkdir build&lt;br /&gt;
 $ cd build&lt;br /&gt;
 $ ccmake ..&lt;br /&gt;
&lt;br /&gt;
Or, in Debian or Ubuntu, you can build a package (but you'll need to have devscripts and fakeroot installed):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;/path/to/unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ fakeroot dpkg-buildpackage -b -uc&lt;br /&gt;
 $ sudo dpkg -i &amp;lt;var&amp;gt;../unvanquished_*.deb&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once in &amp;lt;code&amp;gt;ccmake&amp;lt;/code&amp;gt;, use the following keys:&lt;br /&gt;
&lt;br /&gt;
* Press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt; to configure. If an error occurs during this phase, make note of it and press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;e&amp;lt;/span&amp;gt; to dismiss it.&lt;br /&gt;
* Use the up and down arrow keys to navigate the compilation options.&lt;br /&gt;
* Press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;Enter&amp;lt;/span&amp;gt; to enable or disable boolean options (i.e., on/off) or to edit textual options.&lt;br /&gt;
** Press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;Esc&amp;lt;/span&amp;gt; when editing a textual option to cancel the change.&lt;br /&gt;
&lt;br /&gt;
Once you have finished the configuration process, press &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;C&amp;lt;/span&amp;gt; again, then &amp;lt;span class=&amp;quot;hotkey&amp;quot;&amp;gt;G&amp;lt;/span&amp;gt; to generate the makefile.&lt;br /&gt;
&lt;br /&gt;
====Using cmake-qt-gui (graphical front-end)====&lt;br /&gt;
&lt;br /&gt;
This graphical front end for cmake has its own package you must install:&lt;br /&gt;
&lt;br /&gt;
=====Debian/Ubuntu=====&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install cmake-qt-gui&lt;br /&gt;
&lt;br /&gt;
=====Gentoo=====&lt;br /&gt;
&lt;br /&gt;
With the '''qt4''' USE flag enabled:&lt;br /&gt;
&lt;br /&gt;
 $ emerge cmake&lt;br /&gt;
&lt;br /&gt;
Once installed, run with &amp;lt;code&amp;gt;cmake-gui&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Cmake-qt-gui.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
# Set the path where you have the source code downloaded.&lt;br /&gt;
# Set the path where you would like to build the engine. This may be the same directory if you wish.&lt;br /&gt;
# Click 'Configure'.&lt;br /&gt;
# Click 'Generate'.&lt;br /&gt;
&lt;br /&gt;
====Unnecessary libraries====&lt;br /&gt;
&lt;br /&gt;
Regardless of which front-end to cmake you use, you may want to disable some libraries that are not strictly necessary:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_WEBP&amp;lt;/code&amp;gt; &amp;amp;mdash; Some maps use WebP to store their textures. Currently this should have little impact on gameplay but more maps will likely use this format in the future.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_OPENAL&amp;lt;/code&amp;gt; &amp;amp;mdash; If this is disabled, SDL is used instead for sound.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CODEC_VORBIS&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this will cause certain sound effects (those using the &amp;lt;code&amp;gt;.ogg&amp;lt;/code&amp;gt; format) not to play. At present, this has only a minor impact on gameplay, but more and more sounds will likely use the format in the future.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CURSES&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this will cause the external (not in-game) console to not use curses; it will not be scrollable and will be similar to the console in the original Tremulous. This does in no way affect gameplay.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CIN_THEORA&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this prevents videos from being recorded in Theora.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_CIN_XVID&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this prevents videos from being recorded in Xvid.&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_VOIP&amp;lt;/code&amp;gt; &amp;amp;mdash; Disabling this removes VOIP support. Alternatively enabling &amp;lt;code&amp;gt;USE_INTERNAL_SPEEX&amp;lt;/code&amp;gt; will use the libraries distributed with Unvanquished for VoIP&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_INTERNAL_CRYPTO&amp;lt;/code&amp;gt; &amp;amp;mdash; Enable this to use the crypto libraries provided by Unvanquished.&lt;br /&gt;
&lt;br /&gt;
===Compiling===&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;path/to/unvanquished/build&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ make -j4&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt; switch to make allows you to speed up the compilation process by running it in multiple threads; set the number following this to the number of cores your processor(s) have.&lt;br /&gt;
&lt;br /&gt;
===Acquiring the Game Files===&lt;br /&gt;
&lt;br /&gt;
The game files are not in the Git repository, and must be downloaded separately.&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;path/to/Unvanquished/build&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ cd main&lt;br /&gt;
 $ wget http://sourceforge.net/projects/unvanquished/files/Assets/pak0.pk3/download&lt;br /&gt;
 $ wget http://sourceforge.net/projects/unvanquished/files/Assets/pak1.pk3/download&lt;br /&gt;
 $ wget http://sourceforge.net/projects/unvanquished/files/Assets/pak2.pk3/download&lt;br /&gt;
 $ wget http://sourceforge.net/projects/unvanquished/files/Map%20Pack/maps.7z/download&lt;br /&gt;
&lt;br /&gt;
You can also get the pak files in this way (requires curl):&lt;br /&gt;
&lt;br /&gt;
 $ cd &amp;lt;var&amp;gt;path/to/Unvanquished&amp;lt;/var&amp;gt;&lt;br /&gt;
 $ mkdir -p ~/.Unvanquished/main&lt;br /&gt;
 $ ./download-pk3.sh ~/.Unvanquished/main&lt;br /&gt;
&lt;br /&gt;
The maps archive file isn't strictly necessary: if you don't have a particular map, the game will normally download it for you.&lt;br /&gt;
&lt;br /&gt;
Now you can proceed to [[running the game]].&lt;br /&gt;
&lt;br /&gt;
==Errors==&lt;br /&gt;
===Crash/Freeze on Death===&lt;br /&gt;
Some Linux users may experience a bug where the game freezes whenever you die. The work around until this bug is fixed is to to run &amp;lt;code&amp;gt;ccmake ..&amp;lt;/code&amp;gt; and change &amp;lt;code&amp;gt;CMAKE_BUILD_TYPE&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt;. Run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; and it should now work.&lt;/div&gt;</summary>
		<author><name>Anomalous</name></author>
	</entry>
</feed>