<?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=Kangz</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=Kangz"/>
	<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/wiki/Special:Contributions/Kangz"/>
	<updated>2026-04-04T19:58:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Old/Technical_Documentation&amp;diff=3823</id>
		<title>Old/Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Old/Technical_Documentation&amp;diff=3823"/>
		<updated>2015-07-17T04:37:40Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- THIS IS TO BE A HUB PAGE --&amp;gt;&lt;br /&gt;
{{PetProject|author=Kangz}}&lt;br /&gt;
== About the Dæmon engine ==&lt;br /&gt;
&lt;br /&gt;
The Dæmon engine is part of the grand family of Quake engines, having started as an heavily modified Quake3. It started with the big improvements to the renderer made by XReal and ET:Xreal, then the Dæmon developers developed it further, making it the most advanced open-source Quake-derived engine.&lt;br /&gt;
&lt;br /&gt;
* lineage picture&lt;br /&gt;
&lt;br /&gt;
Originally it was being developed as the engine for the Unvanquished, the succesor of Tremulous, a new release of Dæmon coming out every month with the corresponding Unvanquished Alpha. Other games are currently looking at using it as their engine.&lt;br /&gt;
&lt;br /&gt;
The most important [[Engine/Features|features]] are:&lt;br /&gt;
* A modern [[Engine/Renderer|renderer]] with shadows, skeletal models and post-processing effectsoul&lt;br /&gt;
* [[Engine/NaCl|NaCl]]-based [[Engine/Virtual_Machines|virtual machines]] which allows C++ in the gamelogic&lt;br /&gt;
* A somewhat clean C++ codebase (vs. the mess of C we inherited)&lt;br /&gt;
&lt;br /&gt;
While the Quake 3 engine has originally been released under the GPLv2, we want to have Dæmon completely licensed under a 3-clause BSD which means that new files should use that license and that rewrites of subsystem should be made from scratch as much as possible;&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
Currently Dæmon's master [[Engine/Source_Code|source code]] is in the same repository as Unvanquished but it will move soon in the [https://github.com/DaemonDevelopers/ DæmonDevelopers] organization on Github. After [[Engine/Building|building]] the engine you will get three executables:&lt;br /&gt;
* daemon, the graphical client that the players use&lt;br /&gt;
* daemon-tty, a command line client that can be used for development and server administration&lt;br /&gt;
* daemonded, the server&lt;br /&gt;
&lt;br /&gt;
There are not usable on their own, without a game to run on top but if you built it from, inside a game's repository you should be able to run daemon to start the engine. The engine accepts a number of command [[Engine/Flags|line flags]] to specify in which directories it will find the assets, as well as to set variables or run commands at startup.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
Like Quake 3 our engine runs the gamelogic inside a [[Engine/Virtual_Machines|virtual machine]] so that by simply connecting to a server and downloading some assets, a whole different game can be played. However, because of the technology underlying them, the virtual machines run in a different process than the engine and can only communicate through IPC (InterProcess Communication) such as sockets and shared memory. This forces some architectural choice like having a command buffer for VM-engine communication, and is in stark contrast to Quake 3 in which the gamelogic was run in an interpreter in the engine process.&lt;br /&gt;
&lt;br /&gt;
The client-server communication still follows the Quake 3 model of buffering entity snapshots to be played on the client side and likewise the [[Engine/Renderer|renderer]] buffers all graphics commands to process them on another core. All this buffering is explained in more detail in the [[Engine/Architecture|architecture]] page. It is to be noted that since the gamelogic is in its own process, we can kill it safely: non-fatal errors simply shut down the gamelogic and return to the main menu.&lt;br /&gt;
&lt;br /&gt;
The source code is arganized as follows:&lt;br /&gt;
* '''CMakeList.txt''': build system main file&lt;br /&gt;
* '''cmake''': additional build system files&lt;br /&gt;
* '''external_deps''': binaries needed to compile and run the game, downloaded on the first compilation&lt;br /&gt;
* '''libs''': external libraries&lt;br /&gt;
* '''src'''&lt;br /&gt;
** '''common''': source files compiled both in the gamelogic and the engine&lt;br /&gt;
*** '''cm''': Quake 3's collision model or physics&lt;br /&gt;
*** '''IPC''': InterProcess Communication library&lt;br /&gt;
*** '''math''': our math library&lt;br /&gt;
** '''engine'''&lt;br /&gt;
*** '''audio'''&lt;br /&gt;
*** '''botlib''': pathfinding library for the bots&lt;br /&gt;
*** '''client''': other files specific to the client-side engine&lt;br /&gt;
*** '''framework''': utilities used by both the client-side and the server-side engine&lt;br /&gt;
*** '''null''': noop interfaces for a number of subsystem&lt;br /&gt;
*** '''qcommon''': like framework, but containing only legacy files&lt;br /&gt;
*** '''renderer''': the biggest part of the engine&lt;br /&gt;
*** '''server''': files specific to the client-side engine&lt;br /&gt;
*** '''sys''': system support files that haven't been moved in framwork yet&lt;br /&gt;
** '''shared''': support code to be used in the gamelogic only&lt;br /&gt;
&lt;br /&gt;
== Development workflow ==&lt;br /&gt;
&lt;br /&gt;
* When changing the engine&lt;br /&gt;
* When developing the gamelogic&lt;br /&gt;
* When changing assets&lt;br /&gt;
&lt;br /&gt;
== Coding inside Daemon ==&lt;br /&gt;
* Code in common&lt;br /&gt;
** Command&lt;br /&gt;
** Cvar&lt;br /&gt;
** Filesystem&lt;br /&gt;
** Log&lt;br /&gt;
** Math&lt;br /&gt;
** System&lt;br /&gt;
* IPC / writing a new syscall&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
* References&lt;br /&gt;
* Nacl&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Old/Technical_Documentation&amp;diff=3822</id>
		<title>Old/Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Old/Technical_Documentation&amp;diff=3822"/>
		<updated>2015-07-17T04:36:38Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- THIS IS TO BE A HUB PAGE --&amp;gt;&lt;br /&gt;
{{PetProject|author=Kangz}}&lt;br /&gt;
== About the Dæmon engine ==&lt;br /&gt;
&lt;br /&gt;
The Dæmon engine is part of the grand family of Quake engines, having started as an heavily modified Quake3. It started with the big improvements to the renderer made by XReal and ET:Xreal, then the Dæmon developers developed it further, making it the most advanced open-source Quake-derived engine.&lt;br /&gt;
&lt;br /&gt;
* lineage picture&lt;br /&gt;
&lt;br /&gt;
Originally it was being developed as the engine for the Unvanquished, the succesor of Tremulous, a new release of Dæmon coming out every month with the corresponding Unvanquished Alpha. Other games are currently looking at using it as their engine.&lt;br /&gt;
&lt;br /&gt;
The most important [[Engine/Features|features]] are:&lt;br /&gt;
* A modern [[Engine/Renderer|renderer]] with shadows, skeletal models and post-processing effectsoul&lt;br /&gt;
* [[Engine/NaCl|NaCl]]-based [[Engine/Virtual_Machines|virtual machines]] which allows C++ in the gamelogic&lt;br /&gt;
* A somewhat clean C++ codebase (vs. the mess of C we inherited)&lt;br /&gt;
&lt;br /&gt;
While the Quake 3 engine has originally been released under the GPLv2, we want to have Dæmon completely licensed under a 3-clause BSD which means that new files should use that license and that rewrites of subsystem should be made from scratch as much as possible;&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
Currently Dæmon's master [[Engine/Source_Code|source code]] is in the same repository as Unvanquished but it will move soon in the [https://github.com/DaemonDevelopers/ DæmonDevelopers] organization on Github. After [[Engine/Building|building]] the engine you will get three executables:&lt;br /&gt;
* daemon, the graphical client that the players use&lt;br /&gt;
* daemon-tty, a command line client that can be used for development and server administration&lt;br /&gt;
* daemonded, the server&lt;br /&gt;
&lt;br /&gt;
There are not usable on their own, without a game to run on top but if you built it from, inside a game's repository you should be able to run daemon to start the engine. The engine accepts a number of command [[Engine/Flags|line flags]] to specify in which directories it will find the assets, as well as to set variables or run commands at startup.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
Like Quake 3 our engine runs the gamelogic inside a [[Engine/Virtual_Machines|virtual machine]] so that by simply connecting to a server and downloading some assets, a whole different game can be played. However, because of the technology underlying them, the virtual machines run in a different process than the engine and can only communicate through IPC (InterProcess Communication) such as sockets and shared memory. This forces some architectural choice like having a command buffer for VM-engine communication, and is in stark contrast to Quake 3 in which the gamelogic was run in an interpreter in the engine process.&lt;br /&gt;
&lt;br /&gt;
The client-server communication still follows the Quake 3 model of buffering entity snapshots to be played on the client side and likewise the [[Engine/Renderer|renderer]] buffers all graphics commands to process them on another core. All this buffering is explained in more detail in the [[Engine/Architecture|architecture]]page. It is to be noted that since the gamelogic is in its own process, we can kill it safely: non-fatal errors simply shut down the gamelogic and return to the main menu.&lt;br /&gt;
&lt;br /&gt;
The source code is arganized as follows:&lt;br /&gt;
* '''CMakeList.txt''': build system main file&lt;br /&gt;
* '''cmake''': additional build system files&lt;br /&gt;
* '''external_deps''': binaries needed to compile and run the game, downloaded on the first compilation&lt;br /&gt;
* '''libs''': external libraries&lt;br /&gt;
* '''src'''&lt;br /&gt;
** '''common''': source files compiled both in the gamelogic and the engine&lt;br /&gt;
*** '''cm''': Quake 3's collision model or physics&lt;br /&gt;
*** '''IPC''': InterProcess Communication library&lt;br /&gt;
*** '''math''': our math library&lt;br /&gt;
** '''engine'''&lt;br /&gt;
*** '''audio'''&lt;br /&gt;
*** '''botlib''': pathfinding library for the bots&lt;br /&gt;
*** '''client''': other files specific to the client-side engine&lt;br /&gt;
*** '''framework''': utilities used by both the client-side and the server-side engine&lt;br /&gt;
*** '''null''': noop interfaces for a number of subsystem&lt;br /&gt;
*** '''qcommon''': like framework, but containing only legacy files&lt;br /&gt;
*** '''renderer''': the biggest part of the engine&lt;br /&gt;
*** '''server''': files specific to the client-side engine&lt;br /&gt;
*** '''sys''': system support files that haven't been moved in framwork yet&lt;br /&gt;
** '''shared''': support code to be used in the gamelogic only&lt;br /&gt;
&lt;br /&gt;
== Development workflow ==&lt;br /&gt;
&lt;br /&gt;
* When changing the engine&lt;br /&gt;
* When developing the gamelogic&lt;br /&gt;
* When changing assets&lt;br /&gt;
&lt;br /&gt;
== Coding inside Daemon ==&lt;br /&gt;
* Code in common&lt;br /&gt;
** Command&lt;br /&gt;
** Cvar&lt;br /&gt;
** Filesystem&lt;br /&gt;
** Log&lt;br /&gt;
** Math&lt;br /&gt;
** System&lt;br /&gt;
* IPC / writing a new syscall&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
* References&lt;br /&gt;
* Nacl&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Old/Technical_Documentation&amp;diff=3821</id>
		<title>Old/Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Old/Technical_Documentation&amp;diff=3821"/>
		<updated>2015-07-17T03:21:39Z</updated>

		<summary type="html">&lt;p&gt;Kangz: /* About the Dæmon engine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- THIS IS TO BE A HUB PAGE --&amp;gt;&lt;br /&gt;
{{PetProject|author=Kangz}&lt;br /&gt;
== About the Dæmon engine ==&lt;br /&gt;
&lt;br /&gt;
The Dæmon engine is part of the grand family of Quake engines, having started as an heavily modified Quake3. It started with the big improvements to the renderer made by XReal and ET:Xreal, then the Dæmon developers developed it further, making it the most advanced open-source Quake-derived engine.&lt;br /&gt;
&lt;br /&gt;
* lineage picture&lt;br /&gt;
&lt;br /&gt;
Originally it was being developed as the engine for the Unvanquished, the succesor of Tremulous, a new release of Dæmon coming out every month with the corresponding Unvanquished Alpha. Other games are currently looking at using it as their engine.&lt;br /&gt;
&lt;br /&gt;
The most important [[Engine/Features|features]] are:&lt;br /&gt;
* A modern [[Engine/Renderer|renderer]] with shadows, skeletal models and post-processing effectsoul&lt;br /&gt;
* [[Engine/NaCl|NaCl]]-based [[Engine/Virtual_Machines|virtual machines]] which allows C++ in the gamelogic&lt;br /&gt;
* A somewhat clean C++ codebase (vs. the mess of C we inherited)&lt;br /&gt;
&lt;br /&gt;
While the Quake 3 engine has originally been released under the GPLv2, we want to have Dæmon completely licensed under a 3-clause BSD which means that new files should use that license and that rewrites of subsystem should be made from scratch as much as possible;&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
* Getting the source code bundled with unvanquished&lt;br /&gt;
* Building the engine (3 executables and what they are)&lt;br /&gt;
* Running the engine, startup flags&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
* The two VMs + netcode&lt;br /&gt;
* The renderer with the command list?&lt;br /&gt;
* Error handling&lt;br /&gt;
* Organization of the source code&lt;br /&gt;
&lt;br /&gt;
== Development workflow ==&lt;br /&gt;
&lt;br /&gt;
* When changing the engine&lt;br /&gt;
* When developing the gamelogic&lt;br /&gt;
* When changing assets&lt;br /&gt;
&lt;br /&gt;
== Coding inside Daemon ==&lt;br /&gt;
* Code in common&lt;br /&gt;
** Command&lt;br /&gt;
** Cvar&lt;br /&gt;
** Filesystem&lt;br /&gt;
** Log&lt;br /&gt;
** Math&lt;br /&gt;
** System&lt;br /&gt;
* IPC / writing a new syscall&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
* References&lt;br /&gt;
* Nacl&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Old/Technical_Documentation&amp;diff=3820</id>
		<title>Old/Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Old/Technical_Documentation&amp;diff=3820"/>
		<updated>2015-07-17T03:20:41Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Created page with &amp;quot;&amp;lt;!-- THIS IS TO BE A HUB PAGE --&amp;gt; {{PetProject|author=Kangz} == About the Dæmon engine ==  The Dæmon engine is part of the grand family of Quake engines, having started as a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- THIS IS TO BE A HUB PAGE --&amp;gt;&lt;br /&gt;
{{PetProject|author=Kangz}&lt;br /&gt;
== About the Dæmon engine ==&lt;br /&gt;
&lt;br /&gt;
The Dæmon engine is part of the grand family of Quake engines, having started as an heavily modified Quake3. It started with the big improvements to the renderer made by XReal and ET:Xreal, then the Dæmon developers developed it further, making it the most advanced open-source Quake-derived engine.&lt;br /&gt;
&lt;br /&gt;
* lineage picture&lt;br /&gt;
&lt;br /&gt;
It started being developed as the engine for the Unvanquished, the succesor of Tremulous, a new release of Dæmon coming out every month with the corresponding Unvanquished Alpha. Other games are currently looking at using it as their engine.&lt;br /&gt;
&lt;br /&gt;
The most important [[Engine/Features|features]] are:&lt;br /&gt;
* A modern [[Engine/Renderer|renderer]] with shadows, skeletal models and post-processing effectsoul&lt;br /&gt;
* [[Engine/NaCl|NaCl]]-based [[Engine/Virtual_Machines|virtual machines]] which allows C++ in the gamelogic&lt;br /&gt;
* A somewhat clean C++ codebase (vs. the mess of C we inherited)&lt;br /&gt;
&lt;br /&gt;
While the Quake 3 engine has originally been released under the GPLv2, we want to have Dæmon completely licensed under a 3-clause BSD which means that new files should use that license and that rewrites of subsystem should be made from scratch as much as possible;&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
* Getting the source code bundled with unvanquished&lt;br /&gt;
* Building the engine (3 executables and what they are)&lt;br /&gt;
* Running the engine, startup flags&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
* The two VMs + netcode&lt;br /&gt;
* The renderer with the command list?&lt;br /&gt;
* Error handling&lt;br /&gt;
* Organization of the source code&lt;br /&gt;
&lt;br /&gt;
== Development workflow ==&lt;br /&gt;
&lt;br /&gt;
* When changing the engine&lt;br /&gt;
* When developing the gamelogic&lt;br /&gt;
* When changing assets&lt;br /&gt;
&lt;br /&gt;
== Coding inside Daemon ==&lt;br /&gt;
* Code in common&lt;br /&gt;
** Command&lt;br /&gt;
** Cvar&lt;br /&gt;
** Filesystem&lt;br /&gt;
** Log&lt;br /&gt;
** Math&lt;br /&gt;
** System&lt;br /&gt;
* IPC / writing a new syscall&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
* References&lt;br /&gt;
* Nacl&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Technical_Documentation&amp;diff=3819</id>
		<title>Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Technical_Documentation&amp;diff=3819"/>
		<updated>2015-07-17T02:31:53Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OutOfDate}}&lt;br /&gt;
&lt;br /&gt;
If you have a question that is not answered here, you can always hop on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
If you have not already, go [[Getting_the_source|get the code]], read up on your options for [[development environments]], and [[Compiling_the_source|compile it]]. Instructions are available for a variety of platforms. If your platform of choice is not listed, you are welcome to add instructions for it.&lt;br /&gt;
&lt;br /&gt;
From there, play the game! The [[Running the game]] page contains documentation on all the most commonly used and user-accessible commands and console variables. If you have trouble, see the [[troubleshooting]] page for possible solutions. &lt;br /&gt;
&lt;br /&gt;
There are also very detailed instructions on [[Testing|testing the game]], which includes information on using sophisticated profiling tools such as apitrace, GPUPerfStudio, gDEBugger, valgrind, and clang-analyzer.&lt;br /&gt;
&lt;br /&gt;
===Need something to work on?===&lt;br /&gt;
&lt;br /&gt;
There are all sorts of existing tasks listed on our [https://github.com/Unvanquished/Unvanquished/issues issues reported on the bug tracker] you are free to fix.  Please drop in on [[IRC]] and tell us what you're up to.&lt;br /&gt;
&lt;br /&gt;
===Giving Back===&lt;br /&gt;
&lt;br /&gt;
You are welcome to contribute in any way possible! We have [[Contributing/Code|guidelines for contributing code]] as well as documentation on [[Coding_convention|coding conventions]].&lt;br /&gt;
&lt;br /&gt;
==Language Oddities==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must use the &amp;lt;code&amp;gt;INLINE&amp;lt;/code&amp;gt; macro instead of &amp;lt;code&amp;gt;inline&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;You must cast integers that are being used as enum values to an enum type. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BG_Class ( ( class_t ) self-&amp;gt;client-&amp;gt;ps.stats[ STAT_CLASS ] )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Source Code &amp;amp;amp; Data Structure==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;main/&amp;lt;/code&amp;gt; Data associated with the game.&lt;br /&gt;
** &amp;lt;code&amp;gt;def/&amp;lt;/code&amp;gt; Entity definitions for [[Mapping|Radiant]].&lt;br /&gt;
** &amp;lt;code&amp;gt;fonts/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gfx/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;glsl/&amp;lt;/code&amp;gt; OpenGL shader code.&lt;br /&gt;
** &amp;lt;code&amp;gt;lights/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;models/&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;sound/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;translation/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ui/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;engine/&amp;lt;/code&amp;gt; Engine source code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;asm/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;client/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;null/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;qcommon/&amp;lt;/code&amp;gt; Common code: utility functions, typedefs, macros, and the like.&lt;br /&gt;
*** &amp;lt;code&amp;gt;renderer/&amp;lt;/code&amp;gt; Vanilla (fixed-function pipeline) renderer&lt;br /&gt;
*** &amp;lt;code&amp;gt;rendererGL/&amp;lt;/code&amp;gt; Modern XReal-based renderer&lt;br /&gt;
*** &amp;lt;code&amp;gt;server/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;sys/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gamelogic/&amp;lt;/code&amp;gt; Code that falls outside the scope of the core engine. These are all run in separate [[virtual machines]].&lt;br /&gt;
*** &amp;lt;code&amp;gt;cgame/&amp;lt;/code&amp;gt; Client-side game code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;game/&amp;lt;/code&amp;gt; Server-side game code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;ui/&amp;lt;/code&amp;gt; User interface code.&lt;br /&gt;
&lt;br /&gt;
==Program Entry Point==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; function may be found at around line 591 of {{SourceFile|src/engine/sys/sys_main.c}}. Note that some magic happens on the Mac in {{SourceFile|src/engine/sys/SDLMain.m}}.&lt;br /&gt;
&lt;br /&gt;
==Lag Compensation==&lt;br /&gt;
&lt;br /&gt;
Daemon uses Neil &amp;quot;haste&amp;quot; Toronto's [http://www.ra.is/unlagged/ Unlagged mod].&lt;br /&gt;
&lt;br /&gt;
==Data Files==&lt;br /&gt;
&lt;br /&gt;
Daemon uses a variety of file formats. Many of these formats are custom. &amp;lt;!-- just try and provide a dump of all configuration files, then I'll reorganize them --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Bot behavior trees&lt;br /&gt;
* Player configuration files&lt;br /&gt;
** Crosshair configuration&lt;br /&gt;
** Pubkey&lt;br /&gt;
** GUID&lt;br /&gt;
* Server configuration files&lt;br /&gt;
** [[Map_layouts|Map layouts]]&lt;br /&gt;
** Map rotations&lt;br /&gt;
* Particle &amp;amp; trail system files&lt;br /&gt;
* Sound configurations&lt;br /&gt;
** [[Music_and_sounds#Buildables|Buildables]]&lt;br /&gt;
* Model data ([[Exporting_Models#What_is_MD5.3F|discussion of supported formats]])&lt;br /&gt;
** Skins&lt;br /&gt;
** [[Exporting_Models#MD3_3|MD3 animation configuration files]] &amp;amp;mdash; specify which frames are for which animations&lt;br /&gt;
** Configuration files&lt;br /&gt;
*** [[Exporting_Models#Buildables_2|Buildables]]&lt;br /&gt;
*** [[Exporting_Models#Weapons_2|Weapons]]&lt;br /&gt;
*** [[Exporting_Models#Player_models_2|Player models]]&lt;br /&gt;
* Map data&lt;br /&gt;
** Map geometry (BSPs)&lt;br /&gt;
** Color grading configurations&lt;br /&gt;
&lt;br /&gt;
==Game Logic==&lt;br /&gt;
&lt;br /&gt;
Game logic is split into three areas: user interface, server-side, and client-side. Each runs in its own [[Virtual_machines|virtual machine]].&lt;br /&gt;
&lt;br /&gt;
==Client-Side==&lt;br /&gt;
&lt;br /&gt;
Buildable information is encapsulated in the &amp;lt;code&amp;gt;cg_buildables&amp;lt;/code&amp;gt; array (declared in {{SourceFile|src/gamelogic/cgame/cg_main.c|cg_main.c}})&lt;br /&gt;
&lt;br /&gt;
Constants used to define gamelogic variables are in {{SourceFile|src/gamelogic/game/tremulous.h}}.&lt;br /&gt;
&lt;br /&gt;
Types:&lt;br /&gt;
* &amp;lt;code&amp;gt;buildableInfo_t&amp;lt;/code&amp;gt; &amp;amp;mdash; Encapsulates data associated with buildables (sounds, animations, etc.).&lt;br /&gt;
* &amp;lt;code&amp;gt;buildable_t&amp;lt;/code&amp;gt; &amp;amp;mdash; An enumeration of all buildable types.&lt;br /&gt;
* &amp;lt;code&amp;gt;buildableAttributes_t&amp;lt;/code&amp;gt; &amp;amp;mdash; Encapsulates gameplay information associated with buildables. There is an array of these called &amp;lt;code&amp;gt;bg_buildableList&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Server-Side==&lt;br /&gt;
&lt;br /&gt;
Server game state initialization occurs in &amp;lt;code&amp;gt;G_InitGame()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/game/g_main.c}}.&lt;br /&gt;
&lt;br /&gt;
==Particle &amp;amp;amp; Trail System==&lt;br /&gt;
&lt;br /&gt;
For now, please see the [http://tremulous.net/manual/#x1-130003.2 Tremulous documentation].&lt;br /&gt;
&lt;br /&gt;
==GL3 Renderer==&lt;br /&gt;
&lt;br /&gt;
Source code for the modern OpenGL renderer is located in {{SourceFile|src/engine/rendererGL}}. This renderer is often referred to as the &amp;quot;GL3&amp;quot; renderer, whereas the legacy renderer (found in {{SourceFile|src/engine/renderer}}) is often referred to as the &amp;quot;vanilla&amp;quot; renderer.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* There is some incomplete disabled Direct3D code mixed in the modern OpenGL renderer code.&lt;br /&gt;
* Shaders are implemented as subclasses of the &amp;lt;code&amp;gt;GLShader&amp;lt;/code&amp;gt; class. All are defined in {{SourceFile|src/engine/rendererGL/gl_shader.h}}.&lt;br /&gt;
* Each GLSL shader has their compilation and loading controlled by the single GLShaderManager class&lt;br /&gt;
* Compiled shaders are cached to disk when possible to speed up load times&lt;br /&gt;
* Shader compilation may be done up front before the game loads, or delayed till the main menu depending on the value of r_lazyShaders&lt;br /&gt;
* All possible parameters (what OpenGL calls [http://www.opengl.org/sdk/docs/man4/xhtml/glUniform.xml &amp;quot;uniform variables&amp;quot;]) that may be passed to a shader are enumerated through multiple inheritance.&lt;br /&gt;
E.g., &amp;lt;code&amp;gt;gl_genericShader&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;GLShader_generic*&amp;lt;/code&amp;gt; which derives from the following classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;GLShader&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorMap&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorTextureMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ViewOrigin&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_AlphaTest&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ModelMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ModelViewProjectionMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorModulate&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_Color&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_BoneMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_VertexInterpolation&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_PortalPlane&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLDeformStage&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_PORTAL_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_ALPHA_TESTING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_SKINNING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_ANIMATION&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_DEFORM_VERTEXES&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_ENVIRONMENT&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_LIGHTMAP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The u_* parent classes provide functions that allow external code to set shader uniforms. e.g gl_genericShader-&amp;gt;SetUniform_ColorTextureMatrix()&lt;br /&gt;
&lt;br /&gt;
* GLSL shaders may be found in &amp;lt;code&amp;gt;main/glsl/&amp;lt;/code&amp;gt;. Please see the [[GLSL Shaders|full article]] for a complete listing.&lt;br /&gt;
&lt;br /&gt;
===Helper Classes===&lt;br /&gt;
&lt;br /&gt;
As mentioned above, shader classes make use of multiple inheritance to give them the relevant methods for controlling their behavior.&lt;br /&gt;
&lt;br /&gt;
====Compile Macros====&lt;br /&gt;
&lt;br /&gt;
Compile macros are used to reduce the number of uniforms needed, and speed up execution by eliminating useless if ( ) statements.&lt;br /&gt;
&lt;br /&gt;
They also allow for easy code reuse when turning off some features like e.g Normal Mapping.&lt;br /&gt;
&lt;br /&gt;
Compile macros are set when rendering before the call to shader-&amp;gt;BindProgram().&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_ALPHA_TESTING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_PORTAL_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_FRUSTUM_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_SKINNING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_ANIMATION&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_DEFORM_VERTEXES&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_ENVIRONMENT&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_LIGHTMAP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_NORMAL_MAPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_PARALLAX_MAPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_REFLECTIVE_SPECULAR&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_EYE_OUTSIDE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_BRIGHTPASS_FILTER&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_LIGHT_DIRECTIONAL&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_SHADOWING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_GBUFFER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Resources===&lt;br /&gt;
&lt;br /&gt;
Mac OS X users with XCode installed can access OpenGL man pages via the terminal. &amp;lt;!-- TODO: discuss how to get these on windows or linux? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, OpenGL API reference documentation is available online:&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/man3/ OpenGL 3.3 Reference Pages]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/manglsl/ OpenGL Shading Language (GLSL) Reference Pages]&lt;br /&gt;
* [http://www.khronos.org/files/opengl-quick-reference-card.pdf OpenGL 3.3 &amp;amp;amp; GLSL Quick Reference Card]&lt;br /&gt;
&lt;br /&gt;
==Valgrind and fglrx==&lt;br /&gt;
&lt;br /&gt;
fglrx drivers cause Valgrind to spew out a lot of false errors. You can suppress these by using the --suppressions=/path/to/file.supp flag. You must pass the full path (no use of the tilde symbol). The following [http://www.mediafire.com/?z6ehwrxpw2m469h file] can be used as a template for your suppression file. Keep in mind that the location of the fglrx library may need to be changed.&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
===Publications===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://halo.bungie.net/Inside/publications.aspx Bungie, Inc.] &amp;amp;mdash; creators of the Marathon, Myth, and Halo franchises.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://dice.se/publications/ DICE SE] &amp;amp;mdash; creators of the Battlefield franchise.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.guerrilla-games.com/publications/ Guerilla Games] &amp;amp;mdash; creators of the Killzone franchise.&lt;br /&gt;
&amp;lt;p&amp;gt;Also of interest is the &amp;quot;Making of Killzone 2&amp;quot; video series, not listed on their site:&amp;lt;/p&amp;gt;&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-1?objectid=748475 Part 1]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-2?objectid=748475 Part 2]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-3?objectid=748475 Part 3]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-4?objectid=748475 Part 4]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.valvesoftware.com/company/publications.html Valve Software] &amp;amp;mdash; creators of the Half-Life franchise.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===General Game Development===&lt;br /&gt;
&lt;br /&gt;
* [http://devmaster.net/ Devmaster.net]&lt;br /&gt;
&lt;br /&gt;
===OpenGL===&lt;br /&gt;
&lt;br /&gt;
* [http://www.opengl.org/ Official OpenGL page]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/man3/ OpenGL 3.3 Reference Pages]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/manglsl/ OpenGL Shading Language Reference Pages]&lt;br /&gt;
* [http://arcsynthesis.org/gltut/ Learning Modern 3D Graphics Programming]&lt;br /&gt;
&lt;br /&gt;
===Quake===&lt;br /&gt;
&lt;br /&gt;
* [http://fd.fabiensanglard.net/doom3/pdfs/johnc-plan_1999.pdf John Carmack's notes from development]&lt;br /&gt;
* &amp;quot;Looking at the Quake 3 Source&amp;quot;&lt;br /&gt;
** [http://element61.blogspot.com/2005/08/looking-at-quake-3-source-part-1.html Part 1]&lt;br /&gt;
** [http://element61.blogspot.com/2005/08/looking-at-quake-3-source-part-2.html Part 2]&lt;br /&gt;
** [http://element61.blogspot.com/2005/09/looking-at-quake-3-source-part-3.html Part 3]&lt;br /&gt;
* [http://www.quakewiki.net/archives/code3arena/ Code3Arena]&lt;br /&gt;
* [http://www.modwiki.net/wiki/MD5_(file_format) MD5 file format] (website down since 2013, use https://web.archive.org/web/20120930061040/http://www.modwiki.net/wiki/MD5_%28file_format%29 )&lt;br /&gt;
* [http://tfc.duke.free.fr/coding/md5-specs-en.html Another MD5 format article]&lt;br /&gt;
* [http://fabiensanglard.net/quake3/index.php Quake 3 Source Code Review]&lt;br /&gt;
* [http://www.quake3world.com/forum/index.php Quake3World Discussion Forums]&lt;br /&gt;
* [http://wiki.ioquake3.org/ ioquake3 project wiki] &amp;amp;mdash; Primarily oriented for users, developers and server administrators.&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Compiling_the_source&amp;diff=3748</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=3748"/>
		<updated>2015-02-26T14:58:09Z</updated>

		<summary type="html">&lt;p&gt;Kangz: /* Windows */&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;
## 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;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;
# Add _NO_DEBUG_HEAP=1 to your environment variables otherwise performance under the debugger [http://www.massimpressionsprojects.com/dev/altdevblog/2011/07/27/the-unexpected-performance-of-debug-builds/ will be terrible]&lt;br /&gt;
# Run CMake with the source directory as the base directory of your source code (which should contain directories such as &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt;), and the build directory as a subdirectory of the source directory named &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Open &amp;lt;code&amp;gt;build/Daemon.sln&amp;lt;/code&amp;gt; in Visual Studio 2013.&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;
* ncurses is not supported under Visual Studio.&lt;br /&gt;
* If the path to your build directory is too long, the generation of a NaCl VMs will fail because a command line will be longer than what VS tools support. Put the sources closer to the root of a drive.&lt;br /&gt;
* Due to limitations with CMake, the startup project cannot be specified. This 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;
* The &amp;lt;code&amp;gt;game-nacl&amp;lt;/code&amp;gt; project may fail to build if the name of your build-directory is longer than about 43 characters due to generated batch file commands that exceed 8192 characters in length.&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 libgeoip-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;
Optionally: to use clang (rather than the default gcc and g++ compilers) export the CC and CXX variables before running cmake:&lt;br /&gt;
&lt;br /&gt;
 $ export CC=&amp;quot;clang&amp;quot;&lt;br /&gt;
 $ export CXX=&amp;quot;clang++ -stdlib=libc++ -lc++abi&amp;quot;&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/pkg&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>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=GSoC_idea_list&amp;diff=3214</id>
		<title>GSoC idea list</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=GSoC_idea_list&amp;diff=3214"/>
		<updated>2015-02-17T01:52:02Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Created page with &amp;quot;= Note to students =  This is a curated list of ideas suggested by regular developers. They vary in difficulty but are all doable during the summer. Of course feel free to add...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Note to students =&lt;br /&gt;
&lt;br /&gt;
This is a curated list of ideas suggested by regular developers. They vary in difficulty but are all doable during the summer. Of course feel free to add your own ideas to the list, respecting the current format (leave Mentor empty). You can also drop by the IRC channel to discuss your ideas, also note that you can get involved in gameplay too!&lt;br /&gt;
&lt;br /&gt;
= Engine =&lt;br /&gt;
&lt;br /&gt;
== Sound shaders ==&lt;br /&gt;
&lt;br /&gt;
* '''Brief explanation:''' Our engine supports only sounds, with no information attached and the little sound effects we have need to be handled in a case by case by the gamelogic. Sound shaders would be sets of parameters associated to a sound file that would allow things like: randomizing samples, changing the attenuation model, looping, sound category, ...&lt;br /&gt;
* '''Expected results:''' Sound shaders are implemented and used in a few maps to enrich the audio environment.&lt;br /&gt;
* '''Prerequisite knowledge:''' C++.&lt;br /&gt;
* '''Mentor:''' Corentin &amp;quot;kangz&amp;quot; Wallez&lt;br /&gt;
&lt;br /&gt;
== Use bullet for physics ==&lt;br /&gt;
&lt;br /&gt;
* '''Brief explanation:''' The Quake3 physics code we use is very limited in both that it only handles collision with the world and supports mostly axis-aligned boxes. Using bullet would overcome this limitations and open the way for more advaned features such as inverse kinematics, ragdolls and more accurate physics simulation.&lt;br /&gt;
* '''Expected results:''' All the physics call go through bullet instead of the former physics system, while keeping mostly the same physics.&lt;br /&gt;
* '''Prerequisite knowledge:''' C++, vector math, game physics library a big plus.&lt;br /&gt;
* '''Mentor:''' Corentin &amp;quot;kangz&amp;quot; Wallez&lt;br /&gt;
&lt;br /&gt;
== Breakpad integration ==&lt;br /&gt;
&lt;br /&gt;
* '''Brief explanation:''' We want to make it easy for users to submit useful crash reports. Google Breakpad  is a good solution. In the future, we can even discuss an option to  automatically send these to us (with the user's permission) and create  an issue on github.&lt;br /&gt;
* '''Expected results:''' At least on Windows, a crash of the engine produces a dump that contains useful debug info. Better, the crash handler asks the user if they want to upload it to our servers.&lt;br /&gt;
* '''Prerequisite knowledge:''' C++, will require access to a windows machine for testing.&lt;br /&gt;
* '''Mentor:''' Corentin &amp;quot;kangz&amp;quot; Wallez (Amanieu d'Antras)&lt;br /&gt;
&lt;br /&gt;
== Renderer support for GL ES 3 ==&lt;br /&gt;
&lt;br /&gt;
* '''Brief explanation:''' Our renderer relies on GL 2.1 + extension or GL 3, the goal is to add support for GL ES 3, potentially removing GL 2.1 support. This would allow us to port the on platforms without Desktop OpenGL support such as the Web and mobile platforms.&lt;br /&gt;
* '''Expected results:''' The game engine can run without linking to libGL, or better is shown running on the web / mobile.&lt;br /&gt;
* '''Prerequisite knowledge:''' C++, OpenGL.&lt;br /&gt;
* '''Mentor:''' Corentin &amp;quot;kangz&amp;quot; Wallez&lt;br /&gt;
&lt;br /&gt;
==Add debug draw capabilities ==&lt;br /&gt;
&lt;br /&gt;
* '''Brief explanation:''' Printf debugging is nice but sometimes it is easier to visualize things  than to read them, especially for 3D. We want to add draw debugging to help debugging the gamelogic or subsystems that work with 3D objects, the goal is to have a super simple interface to draw basic geometry, in all parts of the engine and gamelogic.&lt;br /&gt;
* '''Expected results:''' Basic shapes (spheres, boxes, arrows) and text can be drawn in the 3d world with control for color, depth test and wireframe mode.&lt;br /&gt;
* '''Prerequisite knowledge:''' C++, vector math, OpenGL a plus.&lt;br /&gt;
* '''Mentor:''' Corentin &amp;quot;kangz&amp;quot; Wallez&lt;br /&gt;
&lt;br /&gt;
== Input thread / Splashscreen ==&lt;br /&gt;
&lt;br /&gt;
* '''Brief explanation:''' It'd be nice to have a splash screen while the game starts (6 sec on my  SSD with hot OS cache). Also we will want inputs to be processed in parallel of the game to reduce latency and enable neat tricks. The two are linked since with SDL all the windowing function must be done in the main thread, including getting new events.&lt;br /&gt;
* '''Expected results:''' The splashscreen and input thread are implemented.&lt;br /&gt;
* '''Prerequisite knowledge:''' C++, some multithreading.&lt;br /&gt;
* '''Mentor:''' Corentin &amp;quot;kangz&amp;quot; Wallez&lt;br /&gt;
&lt;br /&gt;
= Updater =&lt;br /&gt;
&lt;br /&gt;
== Add news support ==&lt;br /&gt;
&lt;br /&gt;
* '''Brief Explanation:''' Every player will see the updater and this gives us an oppurtunity to engage players that wouldn't otherwise be part of the &amp;quot;community&amp;quot;. The goal is to fetch news from the site and display it in a pleasing manner&lt;br /&gt;
* '''Expected Results:''' Implement both the frontend of this in the updater and a simple backend where news are published.&lt;br /&gt;
* '''Prerequisite knowledge:''' QT, C++&lt;br /&gt;
* '''Mentor:''' Harsh &amp;quot;`Ishq&amp;quot; Modi&lt;br /&gt;
&lt;br /&gt;
== In game integration ==&lt;br /&gt;
&lt;br /&gt;
* '''Brief Explanation:'''We need to be able to launch the updater frmo the game when an update is found, in a cross platform way otherwise we would be keeping the update manual as it is currently which defeats the purpose of the updater.&lt;br /&gt;
* '''Expected Results:''' Message should show up ingame telling player to update. Clicking on message should launch updater to update the game.&lt;br /&gt;
* '''Prerequisite knowledge:''' C++&lt;br /&gt;
* '''Mentor:''' Harsh &amp;quot;`Ishq&amp;quot; Modi&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Coding&amp;diff=3213</id>
		<title>Coding</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Coding&amp;diff=3213"/>
		<updated>2015-02-17T01:23:08Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Getting Started=&lt;br /&gt;
Introduction: [[Technical Documentation]]&lt;br /&gt;
&lt;br /&gt;
TODO: Rough map of how the engine is divided code-wise, so people know exactly where to look for the things they want to do&lt;br /&gt;
&lt;br /&gt;
== Game ==&lt;br /&gt;
* [[Getting the source]]&lt;br /&gt;
* [[Compiling the source]]&lt;br /&gt;
* [[Using Unvanquished from git]]&lt;br /&gt;
* [[Development environments]]&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
Game:&lt;br /&gt;
* [https://github.com/Unvanquished/Unvanquished Game/engine source] ([https://github.com/Unvanquished/Unvanquished/issues bug tracker])&lt;br /&gt;
&lt;br /&gt;
Sub-projects:&lt;br /&gt;
* [https://github.com/Unvanquished/Osavul Osavul server browser source] ([https://github.com/Unvanquished/Osavul/issues bug tracker])&lt;br /&gt;
* [https://github.com/Unvanquished/unvanquished-master Master server source] ([https://github.com/Unvanquished/unvanquished-master/issues bug tracker])&lt;br /&gt;
* [[Tools/Chameleon|Chameleon]] [https://github.com/Unvanquished/Chameleon source]&lt;br /&gt;
* [[Tools/Archipelago|Archipelago]] [https://github.com/velociostrich/remapper source] ([https://github.com/velociostrich/remapper/issues bug tracker])&lt;br /&gt;
&lt;br /&gt;
Related/used projects:&lt;br /&gt;
* [https://github.com/harmonise/BitRock Installer source] ([https://github.com/harmonise/BitRock/issues bug tracker])&lt;br /&gt;
&lt;br /&gt;
=Documentation=&lt;br /&gt;
&lt;br /&gt;
* [[Engine features]]&lt;br /&gt;
** [[Feature Proposals]]&lt;br /&gt;
* [[Renderer Status]]&lt;br /&gt;
* [[UI Implementation]]&lt;br /&gt;
* [[GSoC idea list]]&lt;br /&gt;
* [[List future ideas etherpad]]&lt;br /&gt;
&lt;br /&gt;
=Contributing=&lt;br /&gt;
&lt;br /&gt;
* [[Coding convention]]&lt;br /&gt;
* [[Contributing/Code|Contributing code]]&lt;br /&gt;
* [[Contributor Quickies]]&lt;br /&gt;
* [[Programming Task List]]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=List_future_ideas_etherpad&amp;diff=3212</id>
		<title>List future ideas etherpad</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=List_future_ideas_etherpad&amp;diff=3212"/>
		<updated>2015-02-16T22:47:35Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Created page with &amp;quot;http://etherpad.wikimedia.org/p/Unv-GSoC  http://etherpad.wikimedia.org/p/Unv-resources  https://etherpad.wikimedia.org/p/Unv_netcode  https://etherpad.wikimedia.org/p/Unv_gam...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://etherpad.wikimedia.org/p/Unv-GSoC&lt;br /&gt;
&lt;br /&gt;
http://etherpad.wikimedia.org/p/Unv-resources&lt;br /&gt;
&lt;br /&gt;
https://etherpad.wikimedia.org/p/Unv_netcode&lt;br /&gt;
&lt;br /&gt;
https://etherpad.wikimedia.org/p/Unv_gamelogic_upgrade&lt;br /&gt;
&lt;br /&gt;
https://etherpad.wikimedia.org/p/Unv_rendering&lt;br /&gt;
&lt;br /&gt;
https://etherpad.wikimedia.org/p/Unv_math&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Coding&amp;diff=3211</id>
		<title>Coding</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Coding&amp;diff=3211"/>
		<updated>2015-02-16T22:46:05Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Getting Started=&lt;br /&gt;
Introduction: [[Technical Documentation]]&lt;br /&gt;
&lt;br /&gt;
TODO: Rough map of how the engine is divided code-wise, so people know exactly where to look for the things they want to do&lt;br /&gt;
&lt;br /&gt;
== Game ==&lt;br /&gt;
* [[Getting the source]]&lt;br /&gt;
* [[Compiling the source]]&lt;br /&gt;
* [[Using Unvanquished from git]]&lt;br /&gt;
* [[Development environments]]&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
Game:&lt;br /&gt;
* [https://github.com/Unvanquished/Unvanquished Game/engine source] ([https://github.com/Unvanquished/Unvanquished/issues bug tracker])&lt;br /&gt;
&lt;br /&gt;
Sub-projects:&lt;br /&gt;
* [https://github.com/Unvanquished/Osavul Osavul server browser source] ([https://github.com/Unvanquished/Osavul/issues bug tracker])&lt;br /&gt;
* [https://github.com/Unvanquished/unvanquished-master Master server source] ([https://github.com/Unvanquished/unvanquished-master/issues bug tracker])&lt;br /&gt;
* [[Tools/Chameleon|Chameleon]] [https://github.com/Unvanquished/Chameleon source]&lt;br /&gt;
* [[Tools/Archipelago|Archipelago]] [https://github.com/velociostrich/remapper source] ([https://github.com/velociostrich/remapper/issues bug tracker])&lt;br /&gt;
&lt;br /&gt;
Related/used projects:&lt;br /&gt;
* [https://github.com/harmonise/BitRock Installer source] ([https://github.com/harmonise/BitRock/issues bug tracker])&lt;br /&gt;
&lt;br /&gt;
=Documentation=&lt;br /&gt;
&lt;br /&gt;
* [[Engine features]]&lt;br /&gt;
** [[Feature Proposals]]&lt;br /&gt;
* [[Renderer Status]]&lt;br /&gt;
* [[UI Implementation]]&lt;br /&gt;
* [[List future ideas etherpad]]&lt;br /&gt;
&lt;br /&gt;
=Contributing=&lt;br /&gt;
&lt;br /&gt;
* [[Coding convention]]&lt;br /&gt;
* [[Contributing/Code|Contributing code]]&lt;br /&gt;
* [[Contributor Quickies]]&lt;br /&gt;
* [[Programming Task List]]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Cvar_Changes&amp;diff=3207</id>
		<title>Cvar Changes</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Cvar_Changes&amp;diff=3207"/>
		<updated>2015-01-20T17:54:24Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! New Cvar !! Old Cvar&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.availableCaptureDevices || s_alAvailableInputDevices&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.availableDevices || s_alAvailableDevices&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.captureDevice || s_alInputDevice&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.checkAllCalls || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.device || s_alDevice&lt;br /&gt;
|-&lt;br /&gt;
| audio.doppler || s_doppler&lt;br /&gt;
|-&lt;br /&gt;
| audio.dopplerExaggeration || s_alDopplerFactor&lt;br /&gt;
|-&lt;br /&gt;
| audio.muteWhenMinimized || s_muteWhenMinimized&lt;br /&gt;
|-&lt;br /&gt;
| audio.muteWhenUnfocused || s_muteWhenUnfocused&lt;br /&gt;
|-&lt;br /&gt;
| audio.reverb || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.reverbIntensity || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.effects || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.master || s_volume&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.music || s_musicvolume&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.fixed || com_fixedtime&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.max || com_maxfps&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.maxMinimized || com_maxfpsMinimized&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.maxUnfocused || com_maxfpsUnfocused&lt;br /&gt;
|-&lt;br /&gt;
| common.ignoreCrash || com_ignorecrash&lt;br /&gt;
|-&lt;br /&gt;
| common.pipefile || com_pipefile&lt;br /&gt;
|-&lt;br /&gt;
| common.showTraceStats || com_showtrace&lt;br /&gt;
|-&lt;br /&gt;
| common.watchdogCmd || com_watchdog_cmd&lt;br /&gt;
|-&lt;br /&gt;
| common.watchdogTime || com_watchdog&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.active || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.filename || com_logfile&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.forceFlush || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.overwrite || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logLevel.audio || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logLevel.common.commands || N/A&lt;br /&gt;
|-&lt;br /&gt;
| server.lanOnly || dedicated&lt;br /&gt;
|-&lt;br /&gt;
| vm.game.type || N/A&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Cvar_Changes&amp;diff=3206</id>
		<title>Cvar Changes</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Cvar_Changes&amp;diff=3206"/>
		<updated>2015-01-20T17:54:01Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! New Cvar !! Old Cvar&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.availableCaptureDevices || s_alAvailableInputDevices&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.availableDevices || s_alAvailableDevices&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.captureDevice || s_alInputDevice&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.checkAllCalls || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.device || s_alDevice&lt;br /&gt;
|-&lt;br /&gt;
| audio.doppler || s_doppler&lt;br /&gt;
|-&lt;br /&gt;
| audio.dopplerExaggeration || s_alDopplerFactor&lt;br /&gt;
|-&lt;br /&gt;
| audio.muteWhenMinimized || s_muteWhenMinimized&lt;br /&gt;
|-&lt;br /&gt;
| audio.muteWhenUnfocused || s_muteWhenUnfocused&lt;br /&gt;
|-&lt;br /&gt;
| audio.reverb || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.reverbIntensity || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.effects || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.master || s_volume&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.music || s_musicvolume&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.fixed || com_fixedtime&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.max || com_maxfps&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.maxMinimized || com_maxfpsMinimized&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.maxUnfocused || com_maxfpsUnfocused&lt;br /&gt;
|-&lt;br /&gt;
| common.ignoreCrash || com_ignorecrash&lt;br /&gt;
|-&lt;br /&gt;
| common.pipefile || com_pipefile&lt;br /&gt;
|-&lt;br /&gt;
| common.showTraceStats || com_showtrace&lt;br /&gt;
|-&lt;br /&gt;
| common.watchdogCmd || com_watchdog_cmd&lt;br /&gt;
|-&lt;br /&gt;
| common.watchdogTime || com_watchdog&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.active || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.filename || com_logfile&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.forceFlush || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.overwrite || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logLevel.audio || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logLevel.common.commands || N/A&lt;br /&gt;
|-&lt;br /&gt;
| vm.game.type || N/A&lt;br /&gt;
|-&lt;br /&gt;
| server.lanOnly || dedicated&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Mentored_Coding_Project&amp;diff=3178</id>
		<title>Mentored Coding Project</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Mentored_Coding_Project&amp;diff=3178"/>
		<updated>2014-07-19T01:58:36Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To help new coders get acquainted with our code we have some mentored coding projects. A mentored project should be:&lt;br /&gt;
* interesting like a new feature or some visible change&lt;br /&gt;
* approchable, not requiring knowledge of arcane part of the code or crazy templating skills (not everybody is Amanieu)&lt;br /&gt;
* mentored by a more experienced developer with a precise knowledge of that area of the code and an idea of the design of the project&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Unvanquished/Unvanquished/issues?labels=D-Mentored&amp;amp;page=1&amp;amp;state=open See the list of mentored projects!]&lt;br /&gt;
&lt;br /&gt;
= Creating mentored projects =&lt;br /&gt;
&lt;br /&gt;
Add the task on github with the D-mentored tag. At the bottom you can put a block like the following:&lt;br /&gt;
 * Mentor: Kangz (gimhael, Fuma?)&lt;br /&gt;
 * Knowledge: Renderer, OpenGL, C++ hacks to make the API fluid&lt;br /&gt;
 * Difficulty: 5 (without visualization) 8 (with visualization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Difficulty scale of projects =&lt;br /&gt;
&lt;br /&gt;
The difficulty field of the issue for the project should map approximately on the following scale:&lt;br /&gt;
* '''1: limited project''' that doesn't require knowledge of code and stays in a single module&lt;br /&gt;
** Nicify prints&lt;br /&gt;
** Small tweaks (such as adding interpolation in the gamelogic)&lt;br /&gt;
** Adding a cvar for a currently constant parameter&lt;br /&gt;
* '''4: self-contained project''' that may require easy interaction with other modules and some knowledge of the code&lt;br /&gt;
** Rewriting sound codecs&lt;br /&gt;
** Adding the first implementation of the minimap&lt;br /&gt;
** New hud element&lt;br /&gt;
* '''7: large project''' because of the amount/complexity of the code to produce, modules impacted, architectural implications&lt;br /&gt;
** adding IQM&lt;br /&gt;
** Implementing a new alien / weapon / building&lt;br /&gt;
** Rewriting the command system&lt;br /&gt;
* '''10: big changes''', often architectural. Seriously, before doing one of these talk with the rest of the team first&lt;br /&gt;
** making the VMs run in NaCl&lt;br /&gt;
** librocket&lt;br /&gt;
** Bullet&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Mentored_Coding_Project&amp;diff=3177</id>
		<title>Mentored Coding Project</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Mentored_Coding_Project&amp;diff=3177"/>
		<updated>2014-07-19T01:57:37Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Created page with &amp;quot;To help new coders get acquainted with our code we have some mentored coding projects. A mentored project should be: * interesting like a new feature or some visible change * ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To help new coders get acquainted with our code we have some mentored coding projects. A mentored project should be:&lt;br /&gt;
* interesting like a new feature or some visible change&lt;br /&gt;
* approchable, not requiring knowledge of arcane part of the code or crazy templating skills (not everybody is Amanieu)&lt;br /&gt;
* mentored by a more experienced developer with a precise knowledge of that area of the code and an idea of the design of the project&lt;br /&gt;
&lt;br /&gt;
= Creating mentored projects =&lt;br /&gt;
&lt;br /&gt;
Add the task on github with the D-mentored tag. At the bottom you can put a block like the following:&lt;br /&gt;
 * Mentor: Kangz (gimhael, Fuma?)&lt;br /&gt;
 * Knowledge: Renderer, OpenGL, C++ hacks to make the API fluid&lt;br /&gt;
 * Difficulty: 5 (without visualization) 8 (with visualization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Difficulty scale of projects =&lt;br /&gt;
&lt;br /&gt;
The difficulty field of the issue for the project should map approximately on the following scale:&lt;br /&gt;
* '''1: limited project''' that doesn't require knowledge of code and stays in a single module&lt;br /&gt;
** Nicify prints&lt;br /&gt;
** Small tweaks (such as adding interpolation in the gamelogic)&lt;br /&gt;
** Adding a cvar for a currently constant parameter&lt;br /&gt;
* '''4: self-contained project''' that may require easy interaction with other modules and some knowledge of the code&lt;br /&gt;
** Rewriting sound codecs&lt;br /&gt;
** Adding the first implementation of the minimap&lt;br /&gt;
** New hud element&lt;br /&gt;
* '''7: large project''' because of the amount/complexity of the code to produce, modules impacted, architectural implications&lt;br /&gt;
** adding IQM&lt;br /&gt;
** Implementing a new alien / weapon / building&lt;br /&gt;
** Rewriting the command system&lt;br /&gt;
* '''10: big changes''', often architectural. Seriously, before doing one of these talk with the rest of the team first&lt;br /&gt;
** making the VMs run in NaCl&lt;br /&gt;
** librocket&lt;br /&gt;
** Bullet&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Filesystem&amp;diff=3150</id>
		<title>Filesystem</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Filesystem&amp;diff=3150"/>
		<updated>2014-07-04T01:35:14Z</updated>

		<summary type="html">&lt;p&gt;Kangz: answer some of Veyrdite's questions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unvanquished stores its resources (maps, sounds, textures, models etc) in ''packages''.  To be able to use your own resources in the game you must put them in a package.&lt;br /&gt;
&lt;br /&gt;
Note: The Unvanquished filesystem rules differ from Tremulous and Quake.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
A package is simply a zip-file or a folder containing resources.  When a package is loaded its contents are extracted into a virtual filesystem (analogous to a hidden folder).  If two packages have the same file, the file that was first extracted always wins out -- files cannot be overwritten once they are in the filesystem (this differs greatly to the traditional quake behavior).&lt;br /&gt;
&lt;br /&gt;
The game only loads packages as it needs them:&lt;br /&gt;
* Main ''unvanquished'' package (containing base game resources) is always loaded first.&lt;br /&gt;
* Map packages as they are necessary&lt;br /&gt;
* Any packages that the above say they depend on (eg texture-packs)&lt;br /&gt;
Other packages can be forced to load using fs_extrapaks (detailed below).&lt;br /&gt;
&lt;br /&gt;
Every package has a version number.  When a package is loaded (generally) only the latest version is used. For example:&lt;br /&gt;
  awesometextures_2016-04-25.pk3dir&lt;br /&gt;
In this case an enterprising author made their package version an ISO date (YYYY-MM-DD) to ensure that the latest version always has the 'largest' version number.  There are [[Packaging Version Guidelines|recommended versioning guidelines]] that go into more detail.&lt;br /&gt;
&lt;br /&gt;
There are two ways packages can be stored: as pk3s or pk3dirs.  Packages ending in .pk3dir are plain folders whilst .pk3's are zip-compressed files.  Generally it's easier to work with a pk3dir folder and then make a compressed copy only when needed to send over the web.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
Packages can be stored in the 'pkg' folder found in two places: the game installation path (fs_basepath) or the user's own personal path (fs_homepath). &lt;br /&gt;
&lt;br /&gt;
{{Game Locations }}&lt;br /&gt;
&lt;br /&gt;
== Filesystem priority ==&lt;br /&gt;
Once a file is in the filesystem, nothing can change it or replace it.  If two packages have the same file then the first one to be loaded becomes dominant. The moment a package is loaded, if it contains a DEPS file, its dependencies are loaded recursively in the order of the DEPS file.&lt;br /&gt;
&lt;br /&gt;
Packages are loaded from:&lt;br /&gt;
# fs_extrapaks if set: each pak in the space-separated values is loaded starting from the left.&lt;br /&gt;
# main unvanquished package hardcoded to be &amp;quot;unvanquished&amp;quot;&lt;br /&gt;
# map, as needed.&lt;br /&gt;
&lt;br /&gt;
Dependencies are loaded immediately after their parent package, in the order specified in the DEPS file {{Verify}}&lt;br /&gt;
&lt;br /&gt;
Whole-game modifications can still use the main unvanquished package by listing it as one of their dependencies.  Otherwise fs_extrapaks can just be used.&lt;br /&gt;
&lt;br /&gt;
= Packaging Details =&lt;br /&gt;
== Naming ==&lt;br /&gt;
Packages have three parts to their filename:&lt;br /&gt;
* the package basename (eg map-nano)&lt;br /&gt;
* the version (eg 2)&lt;br /&gt;
* the extension (eg .pk3)&lt;br /&gt;
In this case our filename would be ''map-nano_2.pk3''&lt;br /&gt;
&lt;br /&gt;
Rules:&lt;br /&gt;
* Underscores must be used to separate the name from the version, but may not be used anywhere else&lt;br /&gt;
* Authors intending to release their work should follow the [[Packaging Version Guidelines]]&lt;br /&gt;
&lt;br /&gt;
Sometimes a fourth section (a [https://en.wikipedia.org/wiki/checksum checksum]) is included when auto-downloading maps.  This should never be added manually.&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
* '''.pk3dir''' is for folders&lt;br /&gt;
* '''.pk3''' is for zip-compressed packages&lt;br /&gt;
&lt;br /&gt;
To convert from a pk3dir to a pk3: &lt;br /&gt;
# Compress the ''contents'' of a pk3dir (not the folder itself){{Verify}} into a zip-file&lt;br /&gt;
# Rename this zip file so that it ends with .pk3&lt;br /&gt;
&lt;br /&gt;
= Filesystem layout =&lt;br /&gt;
Every package is 'extracted' into the same root folder in the filesystem. &lt;br /&gt;
&lt;br /&gt;
It is recommended you follow the traditional folder-structure for your packages.  When there is a chance files from another package may have similiar names, you should make a subfolder with your packages name to avoid a clash.  Examples of this are below.&lt;br /&gt;
&lt;br /&gt;
== Recommended folder structure ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Folder&lt;br /&gt;
! Description and notes&lt;br /&gt;
! Example&lt;br /&gt;
|-&lt;br /&gt;
| /about&lt;br /&gt;
| Info and licensing about your package.  &lt;br /&gt;
| /about/map-parpax.txt&lt;br /&gt;
|-&lt;br /&gt;
| /textures&lt;br /&gt;
| .crn texture files&lt;br /&gt;
| /textures/parpax_evillair/&lt;br /&gt;
|-&lt;br /&gt;
| /sound&lt;br /&gt;
| Sound files. &lt;br /&gt;
| /sound/parpax&lt;br /&gt;
|-&lt;br /&gt;
| /scripts&lt;br /&gt;
| .shader, .arena, .particle&lt;br /&gt;
| /scripts/parpax.arena&lt;br /&gt;
|-&lt;br /&gt;
| /minimaps&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
/minimaps/parpax_upper.png&lt;br /&gt;
/minimaps/parpax_lower.png&lt;br /&gt;
/minimaps/parpax.minimap&lt;br /&gt;
|-&lt;br /&gt;
| /map&lt;br /&gt;
| .map .bsp .navMesh (for bots)&lt;br /&gt;
| /map/parpax.bsp&lt;br /&gt;
|-&lt;br /&gt;
| /levelshots&lt;br /&gt;
| &amp;quot;Loading screen&amp;quot; picture of a map level&lt;br /&gt;
| /levelshots/parpax.jpg&lt;br /&gt;
|-&lt;br /&gt;
| /gfx&lt;br /&gt;
| ???&lt;br /&gt;
| /gfx/parpax/&lt;br /&gt;
|-&lt;br /&gt;
| /DEPS (file)&lt;br /&gt;
| Depedencies file.  See next section.&lt;br /&gt;
| /DEPS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DEPS file ==&lt;br /&gt;
A DEPS file in the root of a package tells the game what dependencies are required for this package.  Dependant packages are loaded after the current package, so if any files clash then the dependencies 'lose out'.&lt;br /&gt;
&lt;br /&gt;
Example contents of a DEPS file (from map-parpax_d03a.pk3):&lt;br /&gt;
 tex-common&lt;br /&gt;
 tex-ex&lt;br /&gt;
 tex-exm&lt;br /&gt;
 tex-pk01&lt;br /&gt;
 tex-pk02&lt;br /&gt;
 tex-space&lt;br /&gt;
 tex-trak5&lt;br /&gt;
&lt;br /&gt;
= Guides =&lt;br /&gt;
&lt;br /&gt;
== Creating your own package ==&lt;br /&gt;
Find your user's package directory&lt;br /&gt;
 [[File:Dir homepkg.png]]&lt;br /&gt;
&lt;br /&gt;
Create a pk3dir folder&lt;br /&gt;
 [[File:Dir_homepkg_newfolder.png]]&lt;br /&gt;
&lt;br /&gt;
Place inside the files you want to use.  Make sure you follow the filesystem organisation guidelines, or [[User:Kangz|kangz]] will eat you.&lt;br /&gt;
 [[File:Dir inpackage.png]]&lt;br /&gt;
&lt;br /&gt;
If your package is a map, you can ''/devmap mapname'' in the [[console]] to load it.  Otherwise you may want to force it to be loaded with ''fs_extrapacks''.  See [[Running_the_game#Advanced_options]] for more details.&lt;br /&gt;
&lt;br /&gt;
 $ unvanquished +set fs_extrapaks tutorialexample&lt;br /&gt;
&lt;br /&gt;
== Using the latest resources from git ==&lt;br /&gt;
See [[Using Unvanquished from git]]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Technical_Documentation&amp;diff=3121</id>
		<title>Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Technical_Documentation&amp;diff=3121"/>
		<updated>2014-06-28T00:29:17Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you have a question that is not answered here, you can always hop on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
If you have not already, go [[Getting_the_source|get the code]], read up on your options for [[development environments]], and [[Compiling_the_source|compile it]]. Instructions are available for a variety of platforms. If your platform of choice is not listed, you are welcome to add instructions for it.&lt;br /&gt;
&lt;br /&gt;
From there, play the game! The [[Running the game]] page contains documentation on all the most commonly used and user-accessible commands and console variables. If you have trouble, see the [[troubleshooting]] page for possible solutions. Additional documentation is available on console variables:&lt;br /&gt;
* [[New_Cvars|Cvars that are new to Daemon]]&lt;br /&gt;
* [[Renderer_Status|Cvars for the renderer]] &amp;amp;mdash; This page also lists information on what renderer features are known to have issues.&lt;br /&gt;
&lt;br /&gt;
There are also very detailed instructions on [[Testing|testing the game]], which includes information on using sophisticated profiling tools such as apitrace, GPUPerfStudio, gDEBugger, valgrind, and clang-analyzer.&lt;br /&gt;
&lt;br /&gt;
===Need something to work on?===&lt;br /&gt;
&lt;br /&gt;
There's lots of places to look for work to do:&lt;br /&gt;
&lt;br /&gt;
* You are always welcome to fix any [https://github.com/Unvanquished/Unvanquished/issues issues reported on the bug tracker]. Just either leave a comment on the issue you're interested in or drop in [[IRC]] beforehand to let us know that you're working on it, so we don't try to work on it at the same time. Do be aware that we have several sub-projects, each with their own bug tracker, which are all listed on the [[Bug reporting|Bug Reporting]] page.&lt;br /&gt;
* Quick and easy tasks are listed on the [[Contributor Quickies]] page.&lt;br /&gt;
* More involved tasks are listed on the [[Programming Task List]].&lt;br /&gt;
* The most daunting challenges are listed on the [[Feature Proposals]] page. '''Be sure to communicate with us if you intend on working on one of these features!'''&lt;br /&gt;
&lt;br /&gt;
===Giving Back===&lt;br /&gt;
&lt;br /&gt;
You are welcome to contribute in any way possible! We have [[Contributing/Code|guidelines for contributing code]] as well as documentation on [[Coding_convention|coding conventions]].&lt;br /&gt;
&lt;br /&gt;
==Branches==&lt;br /&gt;
&lt;br /&gt;
The following branches are under active development and may be of interest:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;librocket&amp;lt;/code&amp;gt; &amp;amp;mdash; Work to integrate libRocket is being done on this branch. libRocket is a library that will allow us to create user interfaces using dialects of HTML and CSS.&lt;br /&gt;
* &amp;lt;code&amp;gt;bots&amp;lt;/code&amp;gt; &amp;amp;mdash; bot code, using behavior trees.&lt;br /&gt;
&lt;br /&gt;
==Language Oddities==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must use the &amp;lt;code&amp;gt;INLINE&amp;lt;/code&amp;gt; macro instead of &amp;lt;code&amp;gt;inline&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;You must cast integers that are being used as enum values to an enum type. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BG_Class ( ( class_t ) self-&amp;gt;client-&amp;gt;ps.stats[ STAT_CLASS ] )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Source Code &amp;amp;amp; Data Structure==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;main/&amp;lt;/code&amp;gt; Data associated with the game.&lt;br /&gt;
** &amp;lt;code&amp;gt;def/&amp;lt;/code&amp;gt; Entity definitions for [[Mapping|Radiant]].&lt;br /&gt;
** &amp;lt;code&amp;gt;fonts/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gfx/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;glsl/&amp;lt;/code&amp;gt; OpenGL shader code.&lt;br /&gt;
** &amp;lt;code&amp;gt;lights/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;models/&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;sound/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;translation/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ui/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;engine/&amp;lt;/code&amp;gt; Engine source code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;asm/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;client/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;null/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;qcommon/&amp;lt;/code&amp;gt; Common code: utility functions, typedefs, macros, and the like.&lt;br /&gt;
*** &amp;lt;code&amp;gt;renderer/&amp;lt;/code&amp;gt; Vanilla (fixed-function pipeline) renderer&lt;br /&gt;
*** &amp;lt;code&amp;gt;rendererGL/&amp;lt;/code&amp;gt; Modern XReal-based renderer&lt;br /&gt;
*** &amp;lt;code&amp;gt;server/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;sys/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gamelogic/&amp;lt;/code&amp;gt; Code that falls outside the scope of the core engine. These are all run in separate [[virtual machines]].&lt;br /&gt;
*** &amp;lt;code&amp;gt;cgame/&amp;lt;/code&amp;gt; Client-side game code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;game/&amp;lt;/code&amp;gt; Server-side game code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;ui/&amp;lt;/code&amp;gt; User interface code.&lt;br /&gt;
&lt;br /&gt;
==Program Entry Point==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; function may be found at around line 591 of {{SourceFile|src/engine/sys/sys_main.c}}. Note that some magic happens on the Mac in {{SourceFile|src/engine/sys/SDLMain.m}}.&lt;br /&gt;
&lt;br /&gt;
==Lag Compensation==&lt;br /&gt;
&lt;br /&gt;
Daemon uses Neil &amp;quot;haste&amp;quot; Toronto's [http://www.ra.is/unlagged/ Unlagged mod].&lt;br /&gt;
&lt;br /&gt;
==Data Files==&lt;br /&gt;
&lt;br /&gt;
Daemon uses a variety of file formats. Many of these formats are custom. &amp;lt;!-- just try and provide a dump of all configuration files, then I'll reorganize them --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Bot behavior trees&lt;br /&gt;
* Player configuration files&lt;br /&gt;
** Crosshair configuration&lt;br /&gt;
** Pubkey&lt;br /&gt;
** GUID&lt;br /&gt;
* Server configuration files&lt;br /&gt;
** [[Map_layouts|Map layouts]]&lt;br /&gt;
** Map rotations&lt;br /&gt;
* Particle &amp;amp; trail system files&lt;br /&gt;
* Sound configurations&lt;br /&gt;
** [[Music_and_sounds#Buildables|Buildables]]&lt;br /&gt;
* Model data ([[Exporting_Models#What_is_MD5.3F|discussion of supported formats]])&lt;br /&gt;
** Skins&lt;br /&gt;
** [[Exporting_Models#MD3_3|MD3 animation configuration files]] &amp;amp;mdash; specify which frames are for which animations&lt;br /&gt;
** Configuration files&lt;br /&gt;
*** [[Exporting_Models#Buildables_2|Buildables]]&lt;br /&gt;
*** [[Exporting_Models#Weapons_2|Weapons]]&lt;br /&gt;
*** [[Exporting_Models#Player_models_2|Player models]]&lt;br /&gt;
* Map data&lt;br /&gt;
** Map geometry (BSPs)&lt;br /&gt;
** Color grading configurations&lt;br /&gt;
&lt;br /&gt;
==Game Logic==&lt;br /&gt;
&lt;br /&gt;
Game logic is split into three areas: user interface, server-side, and client-side. Each runs in its own [[Virtual_machines|virtual machine]].&lt;br /&gt;
&lt;br /&gt;
==Client-Side==&lt;br /&gt;
&lt;br /&gt;
Buildable information is encapsulated in the &amp;lt;code&amp;gt;cg_buildables&amp;lt;/code&amp;gt; array (declared in {{SourceFile|src/gamelogic/cgame/cg_main.c|cg_main.c}})&lt;br /&gt;
&lt;br /&gt;
Constants used to define gamelogic variables are in {{SourceFile|src/gamelogic/game/tremulous.h}}.&lt;br /&gt;
&lt;br /&gt;
Types:&lt;br /&gt;
* &amp;lt;code&amp;gt;buildableInfo_t&amp;lt;/code&amp;gt; &amp;amp;mdash; Encapsulates data associated with buildables (sounds, animations, etc.).&lt;br /&gt;
* &amp;lt;code&amp;gt;buildable_t&amp;lt;/code&amp;gt; &amp;amp;mdash; An enumeration of all buildable types.&lt;br /&gt;
* &amp;lt;code&amp;gt;buildableAttributes_t&amp;lt;/code&amp;gt; &amp;amp;mdash; Encapsulates gameplay information associated with buildables. There is an array of these called &amp;lt;code&amp;gt;bg_buildableList&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Server-Side==&lt;br /&gt;
&lt;br /&gt;
Server game state initialization occurs in &amp;lt;code&amp;gt;G_InitGame()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/game/g_main.c}}.&lt;br /&gt;
&lt;br /&gt;
==Particle &amp;amp;amp; Trail System==&lt;br /&gt;
&lt;br /&gt;
For now, please see the [http://tremulous.net/manual/#x1-130003.2 Tremulous documentation].&lt;br /&gt;
&lt;br /&gt;
==GL3 Renderer==&lt;br /&gt;
&lt;br /&gt;
Source code for the modern OpenGL renderer is located in {{SourceFile|src/engine/rendererGL}}. This renderer is often referred to as the &amp;quot;GL3&amp;quot; renderer, whereas the legacy renderer (found in {{SourceFile|src/engine/renderer}}) is often referred to as the &amp;quot;vanilla&amp;quot; renderer.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* There is some incomplete disabled Direct3D code mixed in the modern OpenGL renderer code.&lt;br /&gt;
* Shaders are implemented as subclasses of the &amp;lt;code&amp;gt;GLShader&amp;lt;/code&amp;gt; class. All are defined in {{SourceFile|src/engine/rendererGL/gl_shader.h}}.&lt;br /&gt;
* Each GLSL shader has their compilation and loading controlled by the single GLShaderManager class&lt;br /&gt;
* Compiled shaders are cached to disk when possible to speed up load times&lt;br /&gt;
* Shader compilation may be done up front before the game loads, or delayed till the main menu depending on the value of r_lazyShaders&lt;br /&gt;
* All possible parameters (what OpenGL calls [http://www.opengl.org/sdk/docs/man4/xhtml/glUniform.xml &amp;quot;uniform variables&amp;quot;]) that may be passed to a shader are enumerated through multiple inheritance.&lt;br /&gt;
E.g., &amp;lt;code&amp;gt;gl_genericShader&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;GLShader_generic*&amp;lt;/code&amp;gt; which derives from the following classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;GLShader&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorMap&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorTextureMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ViewOrigin&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_AlphaTest&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ModelMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ModelViewProjectionMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorModulate&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_Color&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_BoneMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_VertexInterpolation&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_PortalPlane&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLDeformStage&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_PORTAL_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_ALPHA_TESTING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_SKINNING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_ANIMATION&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_DEFORM_VERTEXES&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_ENVIRONMENT&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_LIGHTMAP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The u_* parent classes provide functions that allow external code to set shader uniforms. e.g gl_genericShader-&amp;gt;SetUniform_ColorTextureMatrix()&lt;br /&gt;
&lt;br /&gt;
* GLSL shaders may be found in &amp;lt;code&amp;gt;main/glsl/&amp;lt;/code&amp;gt;. Please see the [[GLSL Shaders|full article]] for a complete listing.&lt;br /&gt;
&lt;br /&gt;
===Helper Classes===&lt;br /&gt;
&lt;br /&gt;
As mentioned above, shader classes make use of multiple inheritance to give them the relevant methods for controlling their behavior.&lt;br /&gt;
&lt;br /&gt;
====Compile Macros====&lt;br /&gt;
&lt;br /&gt;
Compile macros are used to reduce the number of uniforms needed, and speed up execution by eliminating useless if ( ) statements.&lt;br /&gt;
&lt;br /&gt;
They also allow for easy code reuse when turning off some features like e.g Normal Mapping.&lt;br /&gt;
&lt;br /&gt;
Compile macros are set when rendering before the call to shader-&amp;gt;BindProgram().&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_ALPHA_TESTING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_PORTAL_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_FRUSTUM_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_SKINNING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_ANIMATION&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_DEFORM_VERTEXES&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_ENVIRONMENT&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_LIGHTMAP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_NORMAL_MAPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_PARALLAX_MAPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_REFLECTIVE_SPECULAR&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_EYE_OUTSIDE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_BRIGHTPASS_FILTER&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_LIGHT_DIRECTIONAL&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_SHADOWING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_GBUFFER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Resources===&lt;br /&gt;
&lt;br /&gt;
Mac OS X users with XCode installed can access OpenGL man pages via the terminal. &amp;lt;!-- TODO: discuss how to get these on windows or linux? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, OpenGL API reference documentation is available online:&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/man3/ OpenGL 3.3 Reference Pages]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/manglsl/ OpenGL Shading Language (GLSL) Reference Pages]&lt;br /&gt;
* [http://www.khronos.org/files/opengl-quick-reference-card.pdf OpenGL 3.3 &amp;amp;amp; GLSL Quick Reference Card]&lt;br /&gt;
&lt;br /&gt;
==Valgrind and fglrx==&lt;br /&gt;
&lt;br /&gt;
fglrx drivers cause Valgrind to spew out a lot of false errors. You can suppress these by using the --suppressions=/path/to/file.supp flag. You must pass the full path (no use of the tilde symbol). The following [http://www.mediafire.com/?z6ehwrxpw2m469h file] can be used as a template for your suppression file. Keep in mind that the location of the fglrx library may need to be changed.&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
===Publications===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://halo.bungie.net/Inside/publications.aspx Bungie, Inc.] &amp;amp;mdash; creators of the Marathon, Myth, and Halo franchises.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://dice.se/publications/ DICE SE] &amp;amp;mdash; creators of the Battlefield franchise.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.guerrilla-games.com/publications/ Guerilla Games] &amp;amp;mdash; creators of the Killzone franchise.&lt;br /&gt;
&amp;lt;p&amp;gt;Also of interest is the &amp;quot;Making of Killzone 2&amp;quot; video series, not listed on their site:&amp;lt;/p&amp;gt;&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-1?objectid=748475 Part 1]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-2?objectid=748475 Part 2]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-3?objectid=748475 Part 3]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-4?objectid=748475 Part 4]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.valvesoftware.com/company/publications.html Valve Software] &amp;amp;mdash; creators of the Half-Life franchise.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===General Game Development===&lt;br /&gt;
&lt;br /&gt;
* [http://devmaster.net/ Devmaster.net]&lt;br /&gt;
&lt;br /&gt;
===OpenGL===&lt;br /&gt;
&lt;br /&gt;
* [http://www.opengl.org/ Official OpenGL page]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/man3/ OpenGL 3.3 Reference Pages]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/manglsl/ OpenGL Shading Language Reference Pages]&lt;br /&gt;
* [http://arcsynthesis.org/gltut/ Learning Modern 3D Graphics Programming]&lt;br /&gt;
&lt;br /&gt;
===Quake===&lt;br /&gt;
&lt;br /&gt;
* [http://fd.fabiensanglard.net/doom3/pdfs/johnc-plan_1999.pdf John Carmack's notes from development]&lt;br /&gt;
* &amp;quot;Looking at the Quake 3 Source&amp;quot;&lt;br /&gt;
** [http://element61.blogspot.com/2005/08/looking-at-quake-3-source-part-1.html Part 1]&lt;br /&gt;
** [http://element61.blogspot.com/2005/08/looking-at-quake-3-source-part-2.html Part 2]&lt;br /&gt;
** [http://element61.blogspot.com/2005/09/looking-at-quake-3-source-part-3.html Part 3]&lt;br /&gt;
* [http://www.quakewiki.net/archives/code3arena/ Code3Arena]&lt;br /&gt;
* [http://www.modwiki.net/wiki/MD5_(file_format) MD5 file format] (website down since 2013, use https://web.archive.org/web/20120930061040/http://www.modwiki.net/wiki/MD5_%28file_format%29 )&lt;br /&gt;
* [http://tfc.duke.free.fr/coding/md5-specs-en.html Another MD5 format article]&lt;br /&gt;
* [http://fabiensanglard.net/quake3/index.php Quake 3 Source Code Review]&lt;br /&gt;
* [http://www.quake3world.com/forum/index.php Quake3World Discussion Forums]&lt;br /&gt;
* [http://wiki.ioquake3.org/ ioquake3 project wiki] &amp;amp;mdash; Primarily oriented for users, developers and server administrators.&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Technical_Documentation&amp;diff=3120</id>
		<title>Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Technical_Documentation&amp;diff=3120"/>
		<updated>2014-06-28T00:25:22Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you have a question that is not answered here, you can always hop on [[IRC]].&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
If you have not already, go [[Getting_the_source|get the code]], read up on your options for [[development environments]], and [[Compiling_the_source|compile it]]. Instructions are available for a variety of platforms. If your platform of choice is not listed, you are welcome to add instructions for it.&lt;br /&gt;
&lt;br /&gt;
From there, play the game! The [[Running the game]] page contains documentation on all the most commonly used and user-accessible commands and console variables. If you have trouble, see the [[troubleshooting]] page for possible solutions. Additional documentation is available on console variables:&lt;br /&gt;
* [[New_Cvars|Cvars that are new to Daemon]]&lt;br /&gt;
* [[Renderer_Status|Cvars for the renderer]] &amp;amp;mdash; This page also lists information on what renderer features are known to have issues.&lt;br /&gt;
&lt;br /&gt;
There are also very detailed instructions on [[Testing|testing the game]], which includes information on using sophisticated profiling tools such as apitrace, GPUPerfStudio, gDEBugger, valgrind, and clang-analyzer.&lt;br /&gt;
&lt;br /&gt;
===Need something to work on?===&lt;br /&gt;
&lt;br /&gt;
There's lots of places to look for work to do:&lt;br /&gt;
&lt;br /&gt;
* You are always welcome to fix any [https://github.com/Unvanquished/Unvanquished/issues issues reported on the bug tracker]. Just either leave a comment on the issue you're interested in or drop in [[IRC]] beforehand to let us know that you're working on it, so we don't try to work on it at the same time. Do be aware that we have several sub-projects, each with their own bug tracker, which are all listed on the [[Bug reporting|Bug Reporting]] page.&lt;br /&gt;
* Quick and easy tasks are listed on the [[Contributor Quickies]] page.&lt;br /&gt;
* More involved tasks are listed on the [[Programming Task List]].&lt;br /&gt;
* The most daunting challenges are listed on the [[Feature Proposals]] page. '''Be sure to communicate with us if you intend on working on one of these features!'''&lt;br /&gt;
&lt;br /&gt;
===Giving Back===&lt;br /&gt;
&lt;br /&gt;
You are welcome to contribute in any way possible! We have [[Contributing/Code|guidelines for contributing code]] as well as documentation on [[Coding_convention|coding conventions]].&lt;br /&gt;
&lt;br /&gt;
==Branches==&lt;br /&gt;
&lt;br /&gt;
The following branches are under active development and may be of interest:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;librocket&amp;lt;/code&amp;gt; &amp;amp;mdash; Work to integrate libRocket is being done on this branch. libRocket is a library that will allow us to create user interfaces using dialects of HTML and CSS.&lt;br /&gt;
* &amp;lt;code&amp;gt;bots&amp;lt;/code&amp;gt; &amp;amp;mdash; bot code, using behavior trees.&lt;br /&gt;
* &amp;lt;code&amp;gt;engine-upgrade&amp;lt;/code&amp;gt; &amp;amp;mdash; Work to rewrite the engine in C++ for better maintanability.&lt;br /&gt;
* &amp;lt;code&amp;gt;nacl&amp;lt;/code&amp;gt; &amp;amp;mdash; Conversion from QVMs to NaCl sandbox (will be PNaCl at some point)&lt;br /&gt;
&lt;br /&gt;
==Language Oddities==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must use the &amp;lt;code&amp;gt;INLINE&amp;lt;/code&amp;gt; macro instead of &amp;lt;code&amp;gt;inline&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;You must cast integers that are being used as enum values to an enum type. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BG_Class ( ( class_t ) self-&amp;gt;client-&amp;gt;ps.stats[ STAT_CLASS ] )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Source Code &amp;amp;amp; Data Structure==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;main/&amp;lt;/code&amp;gt; Data associated with the game.&lt;br /&gt;
** &amp;lt;code&amp;gt;def/&amp;lt;/code&amp;gt; Entity definitions for [[Mapping|Radiant]].&lt;br /&gt;
** &amp;lt;code&amp;gt;fonts/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gfx/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;glsl/&amp;lt;/code&amp;gt; OpenGL shader code.&lt;br /&gt;
** &amp;lt;code&amp;gt;lights/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;models/&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;sound/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;translation/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ui/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;engine/&amp;lt;/code&amp;gt; Engine source code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;asm/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;client/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;null/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;qcommon/&amp;lt;/code&amp;gt; Common code: utility functions, typedefs, macros, and the like.&lt;br /&gt;
*** &amp;lt;code&amp;gt;renderer/&amp;lt;/code&amp;gt; Vanilla (fixed-function pipeline) renderer&lt;br /&gt;
*** &amp;lt;code&amp;gt;rendererGL/&amp;lt;/code&amp;gt; Modern XReal-based renderer&lt;br /&gt;
*** &amp;lt;code&amp;gt;server/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;sys/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gamelogic/&amp;lt;/code&amp;gt; Code that falls outside the scope of the core engine. These are all run in separate [[virtual machines]].&lt;br /&gt;
*** &amp;lt;code&amp;gt;cgame/&amp;lt;/code&amp;gt; Client-side game code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;game/&amp;lt;/code&amp;gt; Server-side game code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;ui/&amp;lt;/code&amp;gt; User interface code.&lt;br /&gt;
&lt;br /&gt;
==Program Entry Point==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; function may be found at around line 591 of {{SourceFile|src/engine/sys/sys_main.c}}. Note that some magic happens on the Mac in {{SourceFile|src/engine/sys/SDLMain.m}}.&lt;br /&gt;
&lt;br /&gt;
==Lag Compensation==&lt;br /&gt;
&lt;br /&gt;
Daemon uses Neil &amp;quot;haste&amp;quot; Toronto's [http://www.ra.is/unlagged/ Unlagged mod].&lt;br /&gt;
&lt;br /&gt;
==Data Files==&lt;br /&gt;
&lt;br /&gt;
Daemon uses a variety of file formats. Many of these formats are custom. &amp;lt;!-- just try and provide a dump of all configuration files, then I'll reorganize them --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Bot behavior trees&lt;br /&gt;
* Player configuration files&lt;br /&gt;
** Crosshair configuration&lt;br /&gt;
** Pubkey&lt;br /&gt;
** GUID&lt;br /&gt;
* Server configuration files&lt;br /&gt;
** [[Map_layouts|Map layouts]]&lt;br /&gt;
** Map rotations&lt;br /&gt;
* Particle &amp;amp; trail system files&lt;br /&gt;
* Sound configurations&lt;br /&gt;
** [[Music_and_sounds#Buildables|Buildables]]&lt;br /&gt;
* Model data ([[Exporting_Models#What_is_MD5.3F|discussion of supported formats]])&lt;br /&gt;
** Skins&lt;br /&gt;
** [[Exporting_Models#MD3_3|MD3 animation configuration files]] &amp;amp;mdash; specify which frames are for which animations&lt;br /&gt;
** Configuration files&lt;br /&gt;
*** [[Exporting_Models#Buildables_2|Buildables]]&lt;br /&gt;
*** [[Exporting_Models#Weapons_2|Weapons]]&lt;br /&gt;
*** [[Exporting_Models#Player_models_2|Player models]]&lt;br /&gt;
* Map data&lt;br /&gt;
** Map geometry (BSPs)&lt;br /&gt;
** Color grading configurations&lt;br /&gt;
&lt;br /&gt;
==Game Logic==&lt;br /&gt;
&lt;br /&gt;
Game logic is split into three areas: user interface, server-side, and client-side. Each runs in its own [[Virtual_machines|virtual machine]].&lt;br /&gt;
&lt;br /&gt;
==Client-Side==&lt;br /&gt;
&lt;br /&gt;
Buildable information is encapsulated in the &amp;lt;code&amp;gt;cg_buildables&amp;lt;/code&amp;gt; array (declared in {{SourceFile|src/gamelogic/cgame/cg_main.c|cg_main.c}})&lt;br /&gt;
&lt;br /&gt;
Constants used to define gamelogic variables are in {{SourceFile|src/gamelogic/game/tremulous.h}}.&lt;br /&gt;
&lt;br /&gt;
Types:&lt;br /&gt;
* &amp;lt;code&amp;gt;buildableInfo_t&amp;lt;/code&amp;gt; &amp;amp;mdash; Encapsulates data associated with buildables (sounds, animations, etc.).&lt;br /&gt;
* &amp;lt;code&amp;gt;buildable_t&amp;lt;/code&amp;gt; &amp;amp;mdash; An enumeration of all buildable types.&lt;br /&gt;
* &amp;lt;code&amp;gt;buildableAttributes_t&amp;lt;/code&amp;gt; &amp;amp;mdash; Encapsulates gameplay information associated with buildables. There is an array of these called &amp;lt;code&amp;gt;bg_buildableList&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Server-Side==&lt;br /&gt;
&lt;br /&gt;
Server game state initialization occurs in &amp;lt;code&amp;gt;G_InitGame()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/game/g_main.c}}.&lt;br /&gt;
&lt;br /&gt;
==Particle &amp;amp;amp; Trail System==&lt;br /&gt;
&lt;br /&gt;
For now, please see the [http://tremulous.net/manual/#x1-130003.2 Tremulous documentation].&lt;br /&gt;
&lt;br /&gt;
==GL3 Renderer==&lt;br /&gt;
&lt;br /&gt;
Source code for the modern OpenGL renderer is located in {{SourceFile|src/engine/rendererGL}}. This renderer is often referred to as the &amp;quot;GL3&amp;quot; renderer, whereas the legacy renderer (found in {{SourceFile|src/engine/renderer}}) is often referred to as the &amp;quot;vanilla&amp;quot; renderer.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* There is some incomplete disabled Direct3D code mixed in the modern OpenGL renderer code.&lt;br /&gt;
* Shaders are implemented as subclasses of the &amp;lt;code&amp;gt;GLShader&amp;lt;/code&amp;gt; class. All are defined in {{SourceFile|src/engine/rendererGL/gl_shader.h}}.&lt;br /&gt;
* Each GLSL shader has their compilation and loading controlled by the single GLShaderManager class&lt;br /&gt;
* Compiled shaders are cached to disk when possible to speed up load times&lt;br /&gt;
* Shader compilation may be done up front before the game loads, or delayed till the main menu depending on the value of r_lazyShaders&lt;br /&gt;
* All possible parameters (what OpenGL calls [http://www.opengl.org/sdk/docs/man4/xhtml/glUniform.xml &amp;quot;uniform variables&amp;quot;]) that may be passed to a shader are enumerated through multiple inheritance.&lt;br /&gt;
E.g., &amp;lt;code&amp;gt;gl_genericShader&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;GLShader_generic*&amp;lt;/code&amp;gt; which derives from the following classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;GLShader&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorMap&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorTextureMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ViewOrigin&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_AlphaTest&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ModelMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ModelViewProjectionMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorModulate&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_Color&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_BoneMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_VertexInterpolation&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_PortalPlane&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLDeformStage&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_PORTAL_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_ALPHA_TESTING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_SKINNING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_ANIMATION&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_DEFORM_VERTEXES&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_ENVIRONMENT&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_LIGHTMAP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The u_* parent classes provide functions that allow external code to set shader uniforms. e.g gl_genericShader-&amp;gt;SetUniform_ColorTextureMatrix()&lt;br /&gt;
&lt;br /&gt;
* GLSL shaders may be found in &amp;lt;code&amp;gt;main/glsl/&amp;lt;/code&amp;gt;. Please see the [[GLSL Shaders|full article]] for a complete listing.&lt;br /&gt;
&lt;br /&gt;
===Helper Classes===&lt;br /&gt;
&lt;br /&gt;
As mentioned above, shader classes make use of multiple inheritance to give them the relevant methods for controlling their behavior.&lt;br /&gt;
&lt;br /&gt;
====Compile Macros====&lt;br /&gt;
&lt;br /&gt;
Compile macros are used to reduce the number of uniforms needed, and speed up execution by eliminating useless if ( ) statements.&lt;br /&gt;
&lt;br /&gt;
They also allow for easy code reuse when turning off some features like e.g Normal Mapping.&lt;br /&gt;
&lt;br /&gt;
Compile macros are set when rendering before the call to shader-&amp;gt;BindProgram().&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_ALPHA_TESTING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_PORTAL_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_FRUSTUM_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_SKINNING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_ANIMATION&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_DEFORM_VERTEXES&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_ENVIRONMENT&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_LIGHTMAP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_NORMAL_MAPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_PARALLAX_MAPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_REFLECTIVE_SPECULAR&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_EYE_OUTSIDE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_BRIGHTPASS_FILTER&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_LIGHT_DIRECTIONAL&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_SHADOWING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_GBUFFER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Resources===&lt;br /&gt;
&lt;br /&gt;
Mac OS X users with XCode installed can access OpenGL man pages via the terminal. &amp;lt;!-- TODO: discuss how to get these on windows or linux? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, OpenGL API reference documentation is available online:&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/man3/ OpenGL 3.3 Reference Pages]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/manglsl/ OpenGL Shading Language (GLSL) Reference Pages]&lt;br /&gt;
* [http://www.khronos.org/files/opengl-quick-reference-card.pdf OpenGL 3.3 &amp;amp;amp; GLSL Quick Reference Card]&lt;br /&gt;
&lt;br /&gt;
==Valgrind and fglrx==&lt;br /&gt;
&lt;br /&gt;
fglrx drivers cause Valgrind to spew out a lot of false errors. You can suppress these by using the --suppressions=/path/to/file.supp flag. You must pass the full path (no use of the tilde symbol). The following [http://www.mediafire.com/?z6ehwrxpw2m469h file] can be used as a template for your suppression file. Keep in mind that the location of the fglrx library may need to be changed.&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
===Publications===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://halo.bungie.net/Inside/publications.aspx Bungie, Inc.] &amp;amp;mdash; creators of the Marathon, Myth, and Halo franchises.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://dice.se/publications/ DICE SE] &amp;amp;mdash; creators of the Battlefield franchise.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.guerrilla-games.com/publications/ Guerilla Games] &amp;amp;mdash; creators of the Killzone franchise.&lt;br /&gt;
&amp;lt;p&amp;gt;Also of interest is the &amp;quot;Making of Killzone 2&amp;quot; video series, not listed on their site:&amp;lt;/p&amp;gt;&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-1?objectid=748475 Part 1]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-2?objectid=748475 Part 2]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-3?objectid=748475 Part 3]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-4?objectid=748475 Part 4]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.valvesoftware.com/company/publications.html Valve Software] &amp;amp;mdash; creators of the Half-Life franchise.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===General Game Development===&lt;br /&gt;
&lt;br /&gt;
* [http://devmaster.net/ Devmaster.net]&lt;br /&gt;
&lt;br /&gt;
===OpenGL===&lt;br /&gt;
&lt;br /&gt;
* [http://www.opengl.org/ Official OpenGL page]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/man3/ OpenGL 3.3 Reference Pages]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/manglsl/ OpenGL Shading Language Reference Pages]&lt;br /&gt;
* [http://arcsynthesis.org/gltut/ Learning Modern 3D Graphics Programming]&lt;br /&gt;
&lt;br /&gt;
===Quake===&lt;br /&gt;
&lt;br /&gt;
* [http://fd.fabiensanglard.net/doom3/pdfs/johnc-plan_1999.pdf John Carmack's notes from development]&lt;br /&gt;
* &amp;quot;Looking at the Quake 3 Source&amp;quot;&lt;br /&gt;
** [http://element61.blogspot.com/2005/08/looking-at-quake-3-source-part-1.html Part 1]&lt;br /&gt;
** [http://element61.blogspot.com/2005/08/looking-at-quake-3-source-part-2.html Part 2]&lt;br /&gt;
** [http://element61.blogspot.com/2005/09/looking-at-quake-3-source-part-3.html Part 3]&lt;br /&gt;
* [http://www.quakewiki.net/archives/code3arena/ Code3Arena]&lt;br /&gt;
* [http://www.modwiki.net/wiki/MD5_(file_format) MD5 file format] (website down since 2013, use https://web.archive.org/web/20120930061040/http://www.modwiki.net/wiki/MD5_%28file_format%29 )&lt;br /&gt;
* [http://tfc.duke.free.fr/coding/md5-specs-en.html Another MD5 format article]&lt;br /&gt;
* [http://fabiensanglard.net/quake3/index.php Quake 3 Source Code Review]&lt;br /&gt;
* [http://www.quake3world.com/forum/index.php Quake3World Discussion Forums]&lt;br /&gt;
* [http://wiki.ioquake3.org/ ioquake3 project wiki] &amp;amp;mdash; Primarily oriented for users, developers and server administrators.&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Wiki_project_resources&amp;diff=3119</id>
		<title>Wiki project resources</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Wiki_project_resources&amp;diff=3119"/>
		<updated>2014-06-28T00:22:50Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please '''Be Bold'''!   No-one owns the pages here: go for it!  https://en.wikipedia.org/wiki/Wikipedia:Be_bold&lt;br /&gt;
&lt;br /&gt;
=Current Tasks=&lt;br /&gt;
Join in!&lt;br /&gt;
&lt;br /&gt;
* Get [[Entities]] up to date and all of its links fixed&lt;br /&gt;
* Document cvar/cmd changes as a result of the engine-upgrade merge&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Resources=&lt;br /&gt;
== Useful Pages ==&lt;br /&gt;
Note: keep these as subheadings on the front page to make navigation quicker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[Wiki_Editing_Guidelines|Wiki editing guidelines]]&lt;br /&gt;
** General rules&lt;br /&gt;
** Links to extra help for editing wikis&lt;br /&gt;
&lt;br /&gt;
*[[:Category:OutOfDate]]&lt;br /&gt;
** Lists pages marked with the &amp;lt;nowiki&amp;gt;{{OutOfDate}}&amp;lt;/nowiki&amp;gt; [[Template:OutOfDate|template]]&lt;br /&gt;
** Please help reduce this list by fixing pages!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiki templates you may want to use ==&lt;br /&gt;
These templates have to do with the wiki's content, not the game itself.  They are here to make the job of being a human, whether an editor or just a reader, easier.&lt;br /&gt;
&lt;br /&gt;
To use these: type or copy the whole &amp;lt;nowiki&amp;gt;{{Template In Brackets}}&amp;lt;/nowiki&amp;gt; into the text of a page while editing it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Whole Page Marking ===&lt;br /&gt;
Put these at the top of pages to mark them.&lt;br /&gt;
&lt;br /&gt;
* [[Template:OutOfDate|Out of Date]] &amp;amp;mdash; for marking pages that need help&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;{{OutOfDate}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Template:PetProject|Pet Project]] &amp;amp;mdash; for mega pages actively being developed&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;{{PetProject|author=YourName}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Template:Deprecated|Deprecated]] &amp;amp;mdash; for pages that have been merged or superseded, and will eventually get binned&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;{{Deprecated|newpage=The Replacement Page}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** Ordinary emailconfirmed users can't delete pages.  Use this to show you have made the effort &amp;amp; the admins will follow through by looking at [[:Category:Deprecated]]&lt;br /&gt;
** Please only mark pages with this ''when you are finished!''&lt;br /&gt;
** This is for merging multiple pages into one, not moving a ''single'' page.  You can do that already once emailconfirmed.&lt;br /&gt;
&lt;br /&gt;
* [[Template:Unknown|Unknown]] &amp;amp;mdash; for pages that make no sense, seem temporary or possibly unrelated to the game&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;{{Unknown}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** Pages marked with this will eventually get deleted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inline Page Usage ===&lt;br /&gt;
Use these wherever and however you want.&lt;br /&gt;
&lt;br /&gt;
* [[Template:Note|Note]] &amp;amp;mdash; big NOTE boxes superimposed on page&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;{{Note | content=Read the rest of the next paragraph before attempting this, else you may get stuck }}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Template:Verify|Verify]] &amp;amp;mdash; request other wiki editors to confirm whether something is true or not&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;Unvanquished is an engine based on half-life's golden-src {{Verify}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Template:Rehost|Rehost]] &amp;amp;mdash; request for an external page to be copied onto the wiki&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;[https://yelloweyedgoats.com/kharnov/pictures_of_kharnov Gameplay Guide] {{Rehost}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** Read the licensing documentation on the [[Template:Rehost|rehost]] page before attempting to copy marked links&lt;br /&gt;
&lt;br /&gt;
=Staying logged in=&lt;br /&gt;
The wiki's login session times out quickly.  Simply open up the main site's login page (link in the upper right corner of this wiki) to inherit the 'logged-in' status from the main site (which lasts much longer): you don't actually have to fill in the login information again.&lt;br /&gt;
&lt;br /&gt;
=Contacting the Admins=&lt;br /&gt;
If you are having issues on this wiki or want to contact an admin for any other reason ''to do with the wiki'', start with [[User:Veyrdite]].  For all other issues and questions: please use the [[IRC]] and [http://www.unvanquished.net/forum forums].&lt;br /&gt;
&lt;br /&gt;
Use either his:&lt;br /&gt;
* [[User_talk:Veyrdite|talk page]] (public), or&lt;br /&gt;
* Email (private, if it needs to be) {{Verify}} &lt;br /&gt;
** Log yourself into the wiki&lt;br /&gt;
** Navigate to [[User:Veyrdite]]&lt;br /&gt;
** Look for 'Email this user' in the 'Tools' section of the sidebar on the left&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz&amp;diff=3118</id>
		<title>User:Kangz</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz&amp;diff=3118"/>
		<updated>2014-06-18T20:35:47Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hey there!&lt;br /&gt;
&lt;br /&gt;
I played and loved Tremulous during 5 years, with the (CY) and Welcomed clans. I'm a french student in computer science at the École polytechnique in France and doing code for Unvanquished.&lt;br /&gt;
&lt;br /&gt;
Things that I did or that I am currently doing:&lt;br /&gt;
* Config files&lt;br /&gt;
* [[Minimap]]&lt;br /&gt;
* Discovering the GL3 renderer&lt;br /&gt;
* FXAA&lt;br /&gt;
* Upgrading the engine&lt;br /&gt;
** Redid Commands&lt;br /&gt;
** Redid Cvars&lt;br /&gt;
** Redid Logs&lt;br /&gt;
** Redid the Audio (check out the [[Tutorials/Reverberation|Reverberation]])&lt;br /&gt;
** Moving from QVM to PNaCl&lt;br /&gt;
** Other misc stuff&lt;br /&gt;
&lt;br /&gt;
I also play with the assets config files as my artistic ability is limited to creating crappy procedural textures.&lt;br /&gt;
&lt;br /&gt;
I'm always on [[IRC]] (unless my server as a problem) and would love to speak with you!&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Engine&amp;diff=3117</id>
		<title>Engine</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Engine&amp;diff=3117"/>
		<updated>2014-06-18T17:29:09Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Add links to relevant blog posts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unvanquished development uses the 'daemon' engine to power unvanquished, an ever-improving engine with a long list of modern features (see below).&lt;br /&gt;
&lt;br /&gt;
=Engine History=&lt;br /&gt;
Daemon can trace its lineage all the way back to Quake 3, integrating the various features and improvements from quite a few engines before it.  The aim of Unvanquished Development is to make Daemon the most modern and best available quake-derived FOSS engine.&lt;br /&gt;
&lt;br /&gt;
[[File:Engine_history.svg|thumb|center|700px|The lineage of the Daemon engine.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Engine Features=&lt;br /&gt;
==Gameplay==&lt;br /&gt;
&lt;br /&gt;
* [[Navigation Meshes|Navigation-mesh]] based bot AI configured with behavior trees&lt;br /&gt;
* [[Voice say system]]&lt;br /&gt;
* Support for multiple [[Map_layouts|build layouts]] per map&lt;br /&gt;
&lt;br /&gt;
==Rendering==&lt;br /&gt;
&lt;br /&gt;
* Modern GL3 capable renderer&lt;br /&gt;
* Improved Quake 3 shader system:&lt;br /&gt;
** Procedural vertex deformation&lt;br /&gt;
** Alpha mapping&lt;br /&gt;
** Specular mapping (color and intensity)&lt;br /&gt;
** Glow mapping&lt;br /&gt;
** Bump (heightmap), normal, and parallax mapping&lt;br /&gt;
* Many special effects:&lt;br /&gt;
** Motion blur&lt;br /&gt;
** Rim lighting&lt;br /&gt;
** Bloom&lt;br /&gt;
** Heat haze&lt;br /&gt;
* Outline fonts&lt;br /&gt;
* Procedural animation blending&lt;br /&gt;
&lt;br /&gt;
==Networking==&lt;br /&gt;
&lt;br /&gt;
* In-game IRC client&lt;br /&gt;
* VoIP support&lt;br /&gt;
* Remote administration support&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
* Localization support&lt;br /&gt;
* Curses-based console&lt;br /&gt;
* Custom &amp;lt;code&amp;gt;unv://&amp;lt;/code&amp;gt; protocol to allow starting the game from a web browser or with an internet link&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Supported Asset Formats=&lt;br /&gt;
See the links on the [[Main Page]] under the &amp;quot;Artists&amp;quot; section for guides on how to export and package assets into these formats.&lt;br /&gt;
&lt;br /&gt;
==Image Formats==&lt;br /&gt;
See the [[Texture creation]] page.&lt;br /&gt;
&lt;br /&gt;
*DDS (soon to be standard)&lt;br /&gt;
*JPEG&lt;br /&gt;
*WebP&lt;br /&gt;
*PNG&lt;br /&gt;
*TGA&lt;br /&gt;
&lt;br /&gt;
==Model Formats==&lt;br /&gt;
See the [[Modeling]] and [[Exporting Models]] pages.&lt;br /&gt;
&lt;br /&gt;
* IQM (recommended)&lt;br /&gt;
* MD3 (vertex-based)&lt;br /&gt;
* MD5 (bone-based)&lt;br /&gt;
&lt;br /&gt;
==Map Formats==&lt;br /&gt;
See the [[Mapping]] page.&lt;br /&gt;
&lt;br /&gt;
* quake 3 style BSP&lt;br /&gt;
&lt;br /&gt;
==Engine related blog posts==&lt;br /&gt;
Actually a &amp;quot;TODO: move doc to the wiki&amp;quot;&lt;br /&gt;
* [https://www.unvanquished.net/news/75-upgrading-our-15-year-old-engine Upgrading our 15-year-old engine]&lt;br /&gt;
* [https://www.unvanquished.net/news/8-news/109-first-engine-upgrade-merge Merge of the first batch of engine-upgrade changes]&lt;br /&gt;
* [https://www.unvanquished.net/news/115-big-changes-to-the-filesystem Big changes to the Filesystem]&lt;br /&gt;
* [https://www.unvanquished.net/news/119-moving-the-server-side-gamelogic-to-pnacl Moving the server-side gamelogic to PNaCl]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Feature_proposals&amp;diff=3116</id>
		<title>Feature proposals</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Feature_proposals&amp;diff=3116"/>
		<updated>2014-06-18T17:20:06Z</updated>

		<summary type="html">&lt;p&gt;Kangz: IQM and Minimap are implemented&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please use this page '''in concert''' with the [http://unvanquished.net/ideas/ idea tracker]. While the IdeaTorrent is excellent for discussing the scope of new features, it is not good for describing implementation details.&lt;br /&gt;
&lt;br /&gt;
This is a page to list and elaborate on engine features to implement in the future. As with the [[Game_design_proposals|gameplay proposals]] page, it is not the place to argue or otherwise discuss the validity or merit of these ideas; just to list them and build upon their description. Do not delete any idea for any reason, spam and trolling excepted (but if an idea has been rejected, mark it as deleted and add text describing why). If you would like to discuss any proposed feature or idea, do so in the associated talk page for this page.&lt;br /&gt;
&lt;br /&gt;
==Proposals==&lt;br /&gt;
&lt;br /&gt;
* {{Subpage|Dual-Quaternion Skinning}}&lt;br /&gt;
* {{Subpage|Game Code Abstraction}}&lt;br /&gt;
* {{Subpage|Gameplay Configuration GUI}}&lt;br /&gt;
* {{Subpage|Improved Construction Animations}}&lt;br /&gt;
* {{Subpage|Improved Terrain}}&lt;br /&gt;
* {{Subpage|Inverse Kinematics}}&lt;br /&gt;
* {{Subpage|Map Scripting Support}}&lt;br /&gt;
* {{Subpage|Ragdoll Death Animations}}&lt;br /&gt;
&lt;br /&gt;
==Implemented==&lt;br /&gt;
* {{Subpage|IQM Format Support}}&lt;br /&gt;
* {{Subpage|Minimap}}&lt;br /&gt;
&lt;br /&gt;
==Legacy Wiki Pages for Design==&lt;br /&gt;
* [[Singleplayer Brainstorming]]&lt;br /&gt;
* [[Game design proposals]]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Engine&amp;diff=2917</id>
		<title>Engine</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Engine&amp;diff=2917"/>
		<updated>2014-04-30T01:50:00Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Remove PSK and PSA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unvanquished development uses the 'daemon' engine to power unvanquished, an ever-improving engine with a long list of modern features (see below).&lt;br /&gt;
&lt;br /&gt;
=Engine History=&lt;br /&gt;
Daemon can trace its lineage all the way back to Quake 3, integrating the various features and improvements from quite a few engines before it.  The aim of Unvanquished Development is to make Daemon the most modern and best available quake-derived FOSS engine.&lt;br /&gt;
&lt;br /&gt;
[[File:Engine_history.svg|thumb|center|700px|The lineage of the Daemon engine.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Engine Features=&lt;br /&gt;
==Gameplay==&lt;br /&gt;
&lt;br /&gt;
* [[Navigation Meshes|Navigation-mesh]] based bot AI configured with behavior trees&lt;br /&gt;
* [[Voice say system]]&lt;br /&gt;
* Support for multiple [[Map_layouts|build layouts]] per map&lt;br /&gt;
&lt;br /&gt;
==Rendering==&lt;br /&gt;
&lt;br /&gt;
* Modern GL3 capable renderer&lt;br /&gt;
* [[Stereoscopic rendering|Stereoscopic (3d) rendering]]&lt;br /&gt;
* Improved Quake 3 shader system:&lt;br /&gt;
** Procedural vertex deformation&lt;br /&gt;
** Alpha mapping&lt;br /&gt;
** Specular mapping (color and intensity)&lt;br /&gt;
** Glow mapping&lt;br /&gt;
** Bump (heightmap), normal, and parallax mapping&lt;br /&gt;
* Many special effects:&lt;br /&gt;
** Motion blur&lt;br /&gt;
** Rim lighting&lt;br /&gt;
** Bloom&lt;br /&gt;
** Heat haze&lt;br /&gt;
* Outline fonts&lt;br /&gt;
* Procedural animation blending&lt;br /&gt;
&lt;br /&gt;
==Networking==&lt;br /&gt;
&lt;br /&gt;
* In-game IRC client&lt;br /&gt;
* VoIP support&lt;br /&gt;
* Remote administration support&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
* Localization support&lt;br /&gt;
* Curses-based console&lt;br /&gt;
* Custom &amp;lt;code&amp;gt;unv://&amp;lt;/code&amp;gt; protocol to allow starting the game from a web browser or with an internet link&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Supported Asset Formats=&lt;br /&gt;
See the links on the [[Main Page]] under the &amp;quot;Artists&amp;quot; section for guides on how to export and package assets into these formats.&lt;br /&gt;
&lt;br /&gt;
==Image Formats==&lt;br /&gt;
See the [[Texture creation]] page.&lt;br /&gt;
&lt;br /&gt;
*DDS (soon to be standard)&lt;br /&gt;
*JPEG&lt;br /&gt;
*WebP&lt;br /&gt;
*PNG&lt;br /&gt;
*TGA&lt;br /&gt;
&lt;br /&gt;
==Model Formats==&lt;br /&gt;
See the [[Modeling]] and [[Exporting Models]] pages.&lt;br /&gt;
&lt;br /&gt;
* IQM (recommended)&lt;br /&gt;
* MD3 (vertex-based)&lt;br /&gt;
* MD5 (bone-based)&lt;br /&gt;
&lt;br /&gt;
==Map Formats==&lt;br /&gt;
See the [[Mapping]] page.&lt;br /&gt;
&lt;br /&gt;
* quake 3 style BSP&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Reverberation&amp;diff=2907</id>
		<title>Tutorials/Reverberation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Reverberation&amp;diff=2907"/>
		<updated>2014-03-05T10:49:40Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Explain briefly how to see a list of reverb presets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Reverberation is the effect of a sound lasting after it has been produced because of its the mutiples echos in the environment. It can give great audio clues as to what environment you are in: you would easily distinguish sounds in a regular room from sounds in a hangar from sounds in outdoor based on the reverberation. [http://en.wikipedia.org/wiki/Reverberation Wikipedia] has some examples of reverberation.&lt;br /&gt;
&lt;br /&gt;
Dæmon supports reverberation effects, which you can try using the ''/testReverb'' command (use tab completion to see the list of presets), it can be used in maps to give audio clues of the size of rooms and the material of their walls. However even if reverberation effects sound really cool, you should be subtle when using it: in real life you barely notice these effects unless you are in churches or hangars.&lt;br /&gt;
&lt;br /&gt;
== Mapping reverberation ==&lt;br /&gt;
&lt;br /&gt;
=== Global reverberation ===&lt;br /&gt;
&lt;br /&gt;
Once you have found a reverberation effect you like with ''/testReverb'' you can apply it on the whole map by setting the following keys on the worldspawn.&lt;br /&gt;
&lt;br /&gt;
* '''reverbEffect &amp;lt;presetname&amp;gt;''': with &amp;lt;presetname&amp;gt; the name of the effect to apply globally&lt;br /&gt;
* '''reverbIntensity &amp;lt;number&amp;gt;''': with &amp;lt;number&amp;gt; between 0 and 2 the intensity of the effect. The default is 1.0 so you can lower the effect or &lt;br /&gt;
crank it up to your liking (but it should mainly be used to lower the effect).&lt;br /&gt;
&lt;br /&gt;
=== Localised reverberation ===&lt;br /&gt;
&lt;br /&gt;
You can also define reverberation effects per area by placing func_static entities and adding the following keys to it:&lt;br /&gt;
&lt;br /&gt;
* '''reverbEffect &amp;lt;presetname&amp;gt;''': like for the worldspawn&lt;br /&gt;
* '''reverbIntensity &amp;lt;number&amp;gt;''': like for the worldspawn&lt;br /&gt;
* '''reverbDistance &amp;lt;distance&amp;gt;''': a distance in qunits representing the approximate size of the room  in which to use the effect. Between such func_statics, effects will be blended, potentially with the global reverb effect.&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Cvar_Changes&amp;diff=2881</id>
		<title>Cvar Changes</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Cvar_Changes&amp;diff=2881"/>
		<updated>2014-01-20T22:12:21Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Complete&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! New Cvar !! Old Cvar&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.availableCaptureDevices || s_alAvailableInputDevices&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.availableDevices || s_alAvailableDevices&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.captureDevice || s_alInputDevice&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.checkAllCalls || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.device || s_alDevice&lt;br /&gt;
|-&lt;br /&gt;
| audio.doppler || s_doppler&lt;br /&gt;
|-&lt;br /&gt;
| audio.dopplerExaggeration || s_alDopplerFactor&lt;br /&gt;
|-&lt;br /&gt;
| audio.muteWhenMinimized || s_muteWhenMinimized&lt;br /&gt;
|-&lt;br /&gt;
| audio.muteWhenUnfocused || s_muteWhenUnfocused&lt;br /&gt;
|-&lt;br /&gt;
| audio.reverb || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.reverbIntensity || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.effects || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.master || s_volume&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.music || s_musicvolume&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.fixed || com_fixedtime&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.max || com_maxfps&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.maxMinimized || com_maxfpsMinimized&lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.maxUnfocused || com_maxfpsUnfocused&lt;br /&gt;
|-&lt;br /&gt;
| common.ignoreCrash || com_ignorecrash&lt;br /&gt;
|-&lt;br /&gt;
| common.pipefile || com_pipefile&lt;br /&gt;
|-&lt;br /&gt;
| common.showTraceStats || com_showtrace&lt;br /&gt;
|-&lt;br /&gt;
| common.watchdogCmd || com_watchdog_cmd&lt;br /&gt;
|-&lt;br /&gt;
| common.watchdogTime || com_watchdog&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.active || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.filename || com_logfile&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.forceFlush || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.overwrite || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logLevel.audio || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logLevel.common.commands || N/A&lt;br /&gt;
|-&lt;br /&gt;
| server.vm.useNaCl || N/A&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Cvar_Changes&amp;diff=2880</id>
		<title>Cvar Changes</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Cvar_Changes&amp;diff=2880"/>
		<updated>2014-01-20T21:59:38Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Add N/A&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! New Cvar !! Old Cvar&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.availableCaptureDevices || &lt;br /&gt;
|-&lt;br /&gt;
| audio.al.availableDevices || &lt;br /&gt;
|-&lt;br /&gt;
| audio.al.captureDevice || &lt;br /&gt;
|-&lt;br /&gt;
| audio.al.checkAllCalls || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.al.device || &lt;br /&gt;
|-&lt;br /&gt;
| audio.doppler || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.dopplerExaggeration || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.muteWhenMinimized || &lt;br /&gt;
|-&lt;br /&gt;
| audio.muteWhenUnfocused || &lt;br /&gt;
|-&lt;br /&gt;
| audio.reverb || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.reverbIntensity || N/A&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.effects ||&lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.master || &lt;br /&gt;
|-&lt;br /&gt;
| audio.volume.music || &lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.fixed || &lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.max || &lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.maxMinimized || &lt;br /&gt;
|-&lt;br /&gt;
| common.framerate.maxUnfocused || &lt;br /&gt;
|-&lt;br /&gt;
| common.ignoreCrash ||&lt;br /&gt;
|-&lt;br /&gt;
| common.pipefile ||&lt;br /&gt;
|-&lt;br /&gt;
| common.showTraceStats ||&lt;br /&gt;
|-&lt;br /&gt;
| common.watchdogCmd ||&lt;br /&gt;
|-&lt;br /&gt;
| common.watchdogTime ||&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.active ||&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.filename ||&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.forceFlush ||&lt;br /&gt;
|-&lt;br /&gt;
| logs.logFile.overwrite ||&lt;br /&gt;
|-&lt;br /&gt;
| logs.logLevel.audio || N/A&lt;br /&gt;
|-&lt;br /&gt;
| logs.logLevel.common.commands || N/A&lt;br /&gt;
|-&lt;br /&gt;
| server.vm.useNaCl || N/A&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Troubleshooting&amp;diff=2848</id>
		<title>Troubleshooting</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Troubleshooting&amp;diff=2848"/>
		<updated>2014-01-13T23:30:02Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Add an explanation for the general case of Syscall ABI Mismatch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you do not see your issue listed here, please seek support either on the [http://unvanquished.net/forum/forumdisplay.php/6-Troubleshooting support forums] or [[IRC]]. If you think you may have found a bug, please [[Bug_reporting|report it]].&lt;br /&gt;
&lt;br /&gt;
==Installer==&lt;br /&gt;
&lt;br /&gt;
===Installation fails with &amp;quot;Problem running post-install step&amp;quot;.===&lt;br /&gt;
&lt;br /&gt;
If you get an error stating &amp;quot;Problem running post-install step. Installation may not complete correctly. Error getting [url]&amp;quot;, just try running the installer again; it is possible that the mirror the installer picked was no good. Otherwise, you might want to try [[Compiling_the_source#Acquiring_the_Game_Files|manually downloading the game files]].&lt;br /&gt;
&lt;br /&gt;
==All platforms==&lt;br /&gt;
&lt;br /&gt;
Before attempting any of the fixes listed here, you may want to [[Compiling_the_source#Verifying_the_Files|verify your installation]]. This takes minimal effort and corrupted asset files is often the problem.&lt;br /&gt;
&lt;br /&gt;
====The game crashes with &amp;quot;recursive error 'Syscall ABI mismatch' after: Syscall ABI mismatch&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
This is most of the time caused by having a wrong combination of assets and executable. Try updating the game and assets.&lt;br /&gt;
&lt;br /&gt;
===The console will not open===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Locate the autogen.cfg file in your profile folder, which is a subdirectory of your [[#Data_directory|data directory]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Search for &amp;lt;code&amp;gt;&amp;quot;bind ~ toggleconsole&amp;quot;&amp;lt;/code&amp;gt;, and delete the entire line, if present.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Search for &amp;lt;code&amp;gt;&amp;quot;seta cl_consoleKeys&amp;quot;&amp;lt;/code&amp;gt;, and ensure that &amp;lt;code&amp;gt;&amp;quot;~&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;`&amp;quot;&amp;lt;/code&amp;gt; (at a minimum, though you may assign other keys if you so desire) are listed in a space-delimited quoted string. The line may look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
seta cl_consoleKeys &amp;quot;~ ` 0x7e 0x60&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The console should now work by pressing the {{Hotkey|~}} or {{Hotkey|`}} keys.&lt;br /&gt;
&lt;br /&gt;
===The game appears to stutter===&lt;br /&gt;
&lt;br /&gt;
Enable VSync either through the menu or by setting &amp;lt;code&amp;gt;r_swapInterval&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Setting &amp;lt;code&amp;gt;r_swapInterval&amp;lt;/code&amp;gt; to a value higher than &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; will synchronize rendering to every ''n''th refresh of the display; i.e., if your monitor's refresh rate was 60 Hz, a value of &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; would result in a framerate of 30 frames per second, a value of &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; would result in a framerate of 20 frames per second, etc.&lt;br /&gt;
&lt;br /&gt;
===Certain maps seem excessively bright===&lt;br /&gt;
&lt;br /&gt;
If maps appear far too bright (consistently bright with no static shadows), your version of WebP is likely out of date. Get a newer copy from Google and [[Compiling_the_source|re-compile]].&lt;br /&gt;
&lt;br /&gt;
===Trouble running the game on Unices after updating to Alpha 9===&lt;br /&gt;
&lt;br /&gt;
Make sure that you are running &amp;lt;code&amp;gt;daemon&amp;lt;/code&amp;gt; and not &amp;lt;code&amp;gt;daemon.i386&amp;lt;/code&amp;gt;; the name has changed and you may safely delete the latter.&lt;br /&gt;
&lt;br /&gt;
===The game crashes upon compiling shaders===&lt;br /&gt;
&lt;br /&gt;
[[Running_the_game#Running_the_game_with_special_options|Run the game]] with &amp;quot;&amp;lt;code&amp;gt;+set r_recompileShaders 1&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous graphical anomalies===&lt;br /&gt;
&lt;br /&gt;
If you are using the GL3 renderer, you may just need to recompile the shaders. Enter this at the in-game console:&lt;br /&gt;
&lt;br /&gt;
 \r_recompileShaders 1; glsl_restart&lt;br /&gt;
&lt;br /&gt;
===Not all servers are listed===&lt;br /&gt;
&lt;br /&gt;
Input the following into the in-game console:&lt;br /&gt;
&lt;br /&gt;
 /reset protocol&lt;br /&gt;
&lt;br /&gt;
Hit the &amp;quot;Get New List&amp;quot; button in the in-game server browser, and the formerly omitted servers should appear.&lt;br /&gt;
&lt;br /&gt;
===menu list 'ui/menus.txt' not found, unable to continue!===&lt;br /&gt;
&lt;br /&gt;
The game files are not properly installed or they are corrupt. If this is the case, make sure that the pk3s are in the &amp;lt;code&amp;gt;~/.Unvanquished/main&amp;lt;/code&amp;gt; folder, paying careful attention to spelling and capitalization.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous game freezes/crashes or graphical glitches===&lt;br /&gt;
&lt;br /&gt;
If no other fix works, try reverting to the old renderer by &lt;br /&gt;
[[Running_the_game#Running_the_game_with_special_options|running the game]] with the &amp;lt;code&amp;gt;&amp;quot;+set cl_renderer gl&amp;quot;&amp;lt;/code&amp;gt; switch.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
===Cracking Sound===&lt;br /&gt;
&lt;br /&gt;
In the options dialog which is reachable from the main menu set &amp;quot;OpenAL Sound&amp;quot; to &amp;quot;No&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Mac OS X==&lt;br /&gt;
&lt;br /&gt;
===Mouse movement seems very slow===&lt;br /&gt;
&lt;br /&gt;
Input the following line into the console:&lt;br /&gt;
&lt;br /&gt;
 /in_disablemacosxmouseaccel 0&lt;br /&gt;
&lt;br /&gt;
This will enable mouse acceleration.&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
&lt;br /&gt;
====The game crashes with &amp;quot;recursive error 'Syscall ABI mismatch' after: Syscall ABI mismatch&amp;quot;====&lt;br /&gt;
&lt;br /&gt;
Run the game with the [[Running_the_game#Running_the_game_with_special_options|special option]] &amp;lt;code&amp;gt;+set sv_pure 0&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Mapping&amp;diff=2828</id>
		<title>Mapping</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Mapping&amp;diff=2828"/>
		<updated>2014-01-06T10:05:22Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Add a link to Tutorial/Reverberation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mapping or 'level-making' for Unvanquished is fun to learn but difficult to master.  Creating maps is highly open ended &amp;amp;mdash; anyone can use any of an infinite variety of techniques to make a map, for both fun and showing off via release.&lt;br /&gt;
&lt;br /&gt;
This page provides resources and tutorials for all skill levels, from beginner to demi-goat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
* [[Tutorials/Mapping_Tools|Tools]] &amp;amp;mdash; installing and setting up the mapping tools&lt;br /&gt;
* [[Tutorials/Mapping_Guide|Complete mapping guide]] &amp;amp;mdash; From start to finish, assuming little previous knowledge.&lt;br /&gt;
* [http://tremmapping.pbworks.com/w/page/22453200/Starting%20Tremulous%20Mapping Tremulous Mapping Tutorial] &amp;amp;mdash; still applicable to Unvanquished&lt;br /&gt;
* [[Testing#Testing_maps|Map testing hints]]&lt;br /&gt;
&lt;br /&gt;
== Techniques and Features ==&lt;br /&gt;
* [[Tutorials/Colour_Grading|Colour Grading]] &amp;amp;mdash; Changing colour-schemas on maps.&lt;br /&gt;
* [[Tutorials/Reverberation|Reverberation]] &amp;amp;mdash; Adding reverberation effects on maps.&lt;br /&gt;
* [[Tutorials/Minimap|Minimaps]] &amp;amp;mdash; Current minimap system.  Will eventually be replaced with automatic model.&lt;br /&gt;
&lt;br /&gt;
== Mapping Approaches ==&lt;br /&gt;
* [http://www.thiagoklafke.com/modularenvironments.html Modular environments] &amp;amp;mdash; making maps out of pre-made components&lt;br /&gt;
&lt;br /&gt;
== VIS and optimisation ==&lt;br /&gt;
Unvanquished employs a VIS (visibility) system to improve game performance.  Only a visible subset of a whole levels is 'rendered' at any one time, because rendering things you can't see wastes performance.  Although the compiler can do this itself, much more efficient VIS systems can be enforced by doing it by hand.&lt;br /&gt;
* [http://tremmapping.pbworks.com/w/page/22453205/Understanding%20Vis%20and%20Hint%20Brushes Understanding Vis and Hint Brushes] {{Rehost}}&lt;br /&gt;
* [http://www.quake3world.com/forum/viewtopic.php?t=3620 Advanced VIS and hinting tutorial] {{Rehost}}&lt;br /&gt;
&lt;br /&gt;
== Compilation ==&lt;br /&gt;
Maps must be compiled by a compiler to get them into a format the [[Daemon|engine]] understands.&lt;br /&gt;
* [[Mapping/Compilation|Compilation overview]]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Quake_engine Wikipedia article on 'Quake Engine'] &amp;amp;mdash; brief description of map mesh optimisation.&lt;br /&gt;
&lt;br /&gt;
== Migrating content from other quake engines ==&lt;br /&gt;
* [[Entities/Changes|Entity Changes]] &amp;amp;mdash; entity changes from Tremulous and Q3&lt;br /&gt;
&lt;br /&gt;
== Old Guides ==&lt;br /&gt;
Content in these should either be used in new guides or updated to be useful.&lt;br /&gt;
* [[Tutorials/Mapping_Old|Old mapping page]] &amp;amp;mdash; old mapping page, some content has still not been merged.&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Reverberation&amp;diff=2796</id>
		<title>Tutorials/Reverberation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Reverberation&amp;diff=2796"/>
		<updated>2014-01-06T00:55:47Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Create the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What it is ==&lt;br /&gt;
&lt;br /&gt;
Reverberation is the effect of a sound lasting after it has been produced because of its the mutiples echos in the environment. It can give great audio clues as to what environment you are in: you would easily distinguish sounds in a regular room from sounds in a hangar from sounds in outdoor based on the reverberation. [http://en.wikipedia.org/wiki/Reverberation Wikipedia] has some examples of reverberation.&lt;br /&gt;
&lt;br /&gt;
Dæmon supports reverberation effects, which you can try using the ''/testReverb'' command, it can be used in maps to give audio clues of the size of rooms and the material of their walls. However even if reverberation effects sound really cool, you should be subtle when using it: in real life you barely notice these effects unless you are in churches or hangars.&lt;br /&gt;
&lt;br /&gt;
== Mapping reverberation ==&lt;br /&gt;
&lt;br /&gt;
=== Global reverberation ===&lt;br /&gt;
&lt;br /&gt;
Once you have found a reverberation effect you like with ''/testReverb'' you can apply it on the whole map by setting the following keys on the worldspawn.&lt;br /&gt;
&lt;br /&gt;
* '''reverbEffect &amp;lt;presetname&amp;gt;''': with &amp;lt;presetname&amp;gt; the name of the effect to apply globally&lt;br /&gt;
* '''reverbIntensity &amp;lt;number&amp;gt;''': with &amp;lt;number&amp;gt; between 0 and 2 the intensity of the effect. The default is 1.0 so you can lower the effect or &lt;br /&gt;
crank it up to your liking (but it should mainly be used to lower the effect).&lt;br /&gt;
&lt;br /&gt;
=== Localised reverberation ===&lt;br /&gt;
&lt;br /&gt;
You can also define reverberation effects per area by placing func_static entities and adding the following keys to it:&lt;br /&gt;
&lt;br /&gt;
* '''reverbEffect &amp;lt;presetname&amp;gt;''': like for the worldspawn&lt;br /&gt;
* '''reverbIntensity &amp;lt;number&amp;gt;''': like for the worldspawn&lt;br /&gt;
* '''reverbDistance &amp;lt;distance&amp;gt;''': a distance in qunits representing the approximate size of the room  in which to use the effect. Between such func_statics, effects will be blended, potentially with the global reverb effect.&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz&amp;diff=2790</id>
		<title>User:Kangz</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz&amp;diff=2790"/>
		<updated>2014-01-06T00:13:41Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Try to describe what I did for Unv in engine-upgrade so that I remember later&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hey there!&lt;br /&gt;
&lt;br /&gt;
I played and loved Tremulous during 5 years, with the (CY) and Welcomed clans. I'm a french student in computer science at the École polytechnique in France and doing code for Unvanquished.&lt;br /&gt;
&lt;br /&gt;
Things that I did or that I am currently doing:&lt;br /&gt;
* Config files&lt;br /&gt;
* [[Minimap]]&lt;br /&gt;
* Discovering the GL3 renderer&lt;br /&gt;
* FXAA&lt;br /&gt;
* Upgrading the engine&lt;br /&gt;
** Redid Commands&lt;br /&gt;
** Redid Cvars&lt;br /&gt;
** Redid Logs&lt;br /&gt;
** Redid the Audio (check out the [[Reverberation]])&lt;br /&gt;
** Moving from QVM to PNaCl&lt;br /&gt;
** Other misc stuff&lt;br /&gt;
&lt;br /&gt;
I also play with the assets config files as my artistic ability is limited to creating crappy procedural textures.&lt;br /&gt;
&lt;br /&gt;
I'm always on [[IRC]] (unless my server as a problem) and would love to speak with you!&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz&amp;diff=2113</id>
		<title>User:Kangz</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz&amp;diff=2113"/>
		<updated>2013-09-04T20:33:42Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hey there!&lt;br /&gt;
&lt;br /&gt;
I played and loved Tremulous during 5 years, with the (CY) and Welcomed clans. I'm a french student in computer science at the École polytechnique in France and doing code for Unvanquished.&lt;br /&gt;
&lt;br /&gt;
Things that I did or that I am currently doing:&lt;br /&gt;
* Config files&lt;br /&gt;
* [[Minimap]]&lt;br /&gt;
* Discovering the GL3 renderer&lt;br /&gt;
* FXAA&lt;br /&gt;
* [[Engine_Upgrade|Upgrading the engine]]&lt;br /&gt;
&lt;br /&gt;
I also play with the assets config files as my artistic ability is limited to creating crappy procedural textures.&lt;br /&gt;
&lt;br /&gt;
I'm always on [[IRC]] (unless my server as a problem) and would love to speak with you!&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Technical_Documentation&amp;diff=2108</id>
		<title>Technical Documentation</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Technical_Documentation&amp;diff=2108"/>
		<updated>2013-07-31T08:52:16Z</updated>

		<summary type="html">&lt;p&gt;Kangz: /* Branches */ add nacl and engine-upgrade&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you have a question that is not answered here, you can always hop on the [http://unvanquished.net/forum/forumdisplay.php/30-Programming programming sub-forums] or [[IRC]].&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
If you have not already, go [[Getting_the_source|get the code]], read up on your options for [[development environments]], and [[Compiling_the_source|compile it]]. Instructions are available for a variety of platforms. If your platform of choice is not listed, you are welcome to add instructions for it.&lt;br /&gt;
&lt;br /&gt;
From there, play the game! The [[Running the game]] page contains documentation on all the most commonly used and user-accessible commands and console variables. If you have trouble, see the [[troubleshooting]] page for possible solutions. Additional documentation is available on console variables:&lt;br /&gt;
* [[New_Cvars|Cvars that are new to Daemon]]&lt;br /&gt;
* [[Renderer_Status|Cvars for the renderer]] &amp;amp;mdash; This page also lists information on what renderer features are known to have issues.&lt;br /&gt;
&lt;br /&gt;
There are also very detailed instructions on [[Testing|testing the game]], which includes information on using sophisticated profiling tools such as apitrace, GPUPerfStudio, gDEBugger, valgrind, and clang-analyzer.&lt;br /&gt;
&lt;br /&gt;
===Need something to work on?===&lt;br /&gt;
&lt;br /&gt;
There's lots of places to look for work to do:&lt;br /&gt;
&lt;br /&gt;
* You are always welcome to fix any [https://github.com/Unvanquished/Unvanquished/issues issues reported on the bug tracker]. Just either leave a comment on the issue you're interested in or drop in [[IRC]] beforehand to let us know that you're working on it, so we don't try to work on it at the same time. Do be aware that we have several sub-projects, each with their own bug tracker, which are all listed on the [[Bug reporting|Bug Reporting]] page.&lt;br /&gt;
* Quick and easy tasks are listed on the [[Contributor Quickies]] page.&lt;br /&gt;
* More involved tasks are listed on the [[Programming Task List]].&lt;br /&gt;
* The most daunting challenges are listed on the [[Feature Proposals]] page. '''Be sure to communicate with us if you intend on working on one of these features!'''&lt;br /&gt;
&lt;br /&gt;
===Giving Back===&lt;br /&gt;
&lt;br /&gt;
You are welcome to contribute in any way possible! We have [[Contributing_code|guidelines for contributing code]] as well as documentation on [[Coding_convention|coding conventions]].&lt;br /&gt;
&lt;br /&gt;
==Branches==&lt;br /&gt;
&lt;br /&gt;
The following branches are under active development and may be of interest:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;librocket&amp;lt;/code&amp;gt; &amp;amp;mdash; Work to integrate libRocket is being done on this branch. libRocket is a library that will allow us to create user interfaces using dialects of HTML and CSS.&lt;br /&gt;
* &amp;lt;code&amp;gt;bots&amp;lt;/code&amp;gt; &amp;amp;mdash; bot code, using behavior trees.&lt;br /&gt;
* &amp;lt;code&amp;gt;engine-upgrade&amp;lt;/code&amp;gt; &amp;amp;mdash; Work to rewrite the engine in C++ for better maintanability.&lt;br /&gt;
* &amp;lt;code&amp;gt;nacl&amp;lt;/code&amp;gt; &amp;amp;mdash; Conversion from QVMs to NaCl sandbox (will be PNaCl at some point)&lt;br /&gt;
&lt;br /&gt;
==Language Oddities==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must use the &amp;lt;code&amp;gt;INLINE&amp;lt;/code&amp;gt; macro instead of &amp;lt;code&amp;gt;inline&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;You must cast integers that are being used as enum values to an enum type. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BG_Class ( ( class_t ) self-&amp;gt;client-&amp;gt;ps.stats[ STAT_CLASS ] )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Source Code &amp;amp;amp; Data Structure==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;main/&amp;lt;/code&amp;gt; Data associated with the game.&lt;br /&gt;
** &amp;lt;code&amp;gt;def/&amp;lt;/code&amp;gt; Entity definitions for [[Mapping|Radiant]].&lt;br /&gt;
** &amp;lt;code&amp;gt;fonts/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gfx/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;glsl/&amp;lt;/code&amp;gt; OpenGL shader code.&lt;br /&gt;
** &amp;lt;code&amp;gt;lights/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;models/&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;sound/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;translation/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ui/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;engine/&amp;lt;/code&amp;gt; Engine source code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;asm/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;client/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;null/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;qcommon/&amp;lt;/code&amp;gt; Common code: utility functions, typedefs, macros, and the like.&lt;br /&gt;
*** &amp;lt;code&amp;gt;renderer/&amp;lt;/code&amp;gt; Vanilla (fixed-function pipeline) renderer&lt;br /&gt;
*** &amp;lt;code&amp;gt;rendererGL/&amp;lt;/code&amp;gt; Modern XReal-based renderer&lt;br /&gt;
*** &amp;lt;code&amp;gt;server/&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;sys/&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;gamelogic/&amp;lt;/code&amp;gt; Code that falls outside the scope of the core engine. These are all run in separate [[virtual machines]].&lt;br /&gt;
*** &amp;lt;code&amp;gt;cgame/&amp;lt;/code&amp;gt; Client-side game code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;game/&amp;lt;/code&amp;gt; Server-side game code.&lt;br /&gt;
*** &amp;lt;code&amp;gt;ui/&amp;lt;/code&amp;gt; User interface code.&lt;br /&gt;
&lt;br /&gt;
==Program Entry Point==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; function may be found at around line 591 of {{SourceFile|src/engine/sys/sys_main.c}}. Note that some magic happens on the Mac in {{SourceFile|src/engine/sys/SDLMain.m}}.&lt;br /&gt;
&lt;br /&gt;
==Lag Compensation==&lt;br /&gt;
&lt;br /&gt;
Daemon uses Neil &amp;quot;haste&amp;quot; Toronto's [http://www.ra.is/unlagged/ Unlagged mod].&lt;br /&gt;
&lt;br /&gt;
==Data Files==&lt;br /&gt;
&lt;br /&gt;
Daemon uses a variety of file formats. Many of these formats are custom. &amp;lt;!-- just try and provide a dump of all configuration files, then I'll reorganize them --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Bot behavior trees&lt;br /&gt;
* Player configuration files&lt;br /&gt;
** Crosshair configuration&lt;br /&gt;
** Pubkey&lt;br /&gt;
** GUID&lt;br /&gt;
* Server configuration files&lt;br /&gt;
** [[Map_layouts|Map layouts]]&lt;br /&gt;
** Map rotations&lt;br /&gt;
* Particle &amp;amp; trail system files&lt;br /&gt;
* Sound configurations&lt;br /&gt;
** [[Music_and_sounds#Buildables|Buildables]]&lt;br /&gt;
* Model data ([[Exporting_Models#What_is_MD5.3F|discussion of supported formats]])&lt;br /&gt;
** Skins&lt;br /&gt;
** [[Exporting_Models#MD3_3|MD3 animation configuration files]] &amp;amp;mdash; specify which frames are for which animations&lt;br /&gt;
** Configuration files&lt;br /&gt;
*** [[Exporting_Models#Buildables_2|Buildables]]&lt;br /&gt;
*** [[Exporting_Models#Weapons_2|Weapons]]&lt;br /&gt;
*** [[Exporting_Models#Player_models_2|Player models]]&lt;br /&gt;
* Map data&lt;br /&gt;
** Map geometry (BSPs)&lt;br /&gt;
** Color grading configurations&lt;br /&gt;
&lt;br /&gt;
==Game Logic==&lt;br /&gt;
&lt;br /&gt;
Game logic is split into three areas: user interface, server-side, and client-side. Each runs in its own [[Virtual_machines|virtual machine]].&lt;br /&gt;
&lt;br /&gt;
==Client-Side==&lt;br /&gt;
&lt;br /&gt;
Buildable information is encapsulated in the &amp;lt;code&amp;gt;cg_buildables&amp;lt;/code&amp;gt; array (declared in {{SourceFile|src/gamelogic/cgame/cg_main.c|cg_main.c}})&lt;br /&gt;
&lt;br /&gt;
Constants used to define gamelogic variables are in {{SourceFile|src/gamelogic/game/tremulous.h}}.&lt;br /&gt;
&lt;br /&gt;
Types:&lt;br /&gt;
* &amp;lt;code&amp;gt;buildableInfo_t&amp;lt;/code&amp;gt; &amp;amp;mdash; Encapsulates data associated with buildables (sounds, animations, etc.).&lt;br /&gt;
* &amp;lt;code&amp;gt;buildable_t&amp;lt;/code&amp;gt; &amp;amp;mdash; An enumeration of all buildable types.&lt;br /&gt;
* &amp;lt;code&amp;gt;buildableAttributes_t&amp;lt;/code&amp;gt; &amp;amp;mdash; Encapsulates gameplay information associated with buildables. There is an array of these called &amp;lt;code&amp;gt;bg_buildableList&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Server-Side==&lt;br /&gt;
&lt;br /&gt;
Server game state initialization occurs in &amp;lt;code&amp;gt;G_InitGame()&amp;lt;/code&amp;gt; in {{SourceFile|src/gamelogic/game/g_main.c}}.&lt;br /&gt;
&lt;br /&gt;
==Particle &amp;amp;amp; Trail System==&lt;br /&gt;
&lt;br /&gt;
For now, please see the [http://tremulous.net/manual/#x1-130003.2 Tremulous documentation].&lt;br /&gt;
&lt;br /&gt;
==GL3 Renderer==&lt;br /&gt;
&lt;br /&gt;
Source code for the modern OpenGL renderer is located in {{SourceFile|src/engine/rendererGL}}. This renderer is often referred to as the &amp;quot;GL3&amp;quot; renderer, whereas the legacy renderer (found in {{SourceFile|src/engine/renderer}}) is often referred to as the &amp;quot;vanilla&amp;quot; renderer.&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
&lt;br /&gt;
* There is some incomplete disabled Direct3D code mixed in the modern OpenGL renderer code.&lt;br /&gt;
* Shaders are implemented as subclasses of the &amp;lt;code&amp;gt;GLShader&amp;lt;/code&amp;gt; class. All are defined in {{SourceFile|src/engine/rendererGL/gl_shader.h}}.&lt;br /&gt;
* Each GLSL shader has their compilation and loading controlled by the single GLShaderManager class&lt;br /&gt;
* Compiled shaders are cached to disk when possible to speed up load times&lt;br /&gt;
* Shader compilation may be done up front before the game loads, or delayed till the main menu depending on the value of r_lazyShaders&lt;br /&gt;
* All possible parameters (what OpenGL calls [http://www.opengl.org/sdk/docs/man4/xhtml/glUniform.xml &amp;quot;uniform variables&amp;quot;]) that may be passed to a shader are enumerated through multiple inheritance.&lt;br /&gt;
E.g., &amp;lt;code&amp;gt;gl_genericShader&amp;lt;/code&amp;gt; is of type &amp;lt;code&amp;gt;GLShader_generic*&amp;lt;/code&amp;gt; which derives from the following classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;GLShader&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorMap&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorTextureMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ViewOrigin&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_AlphaTest&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ModelMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ModelViewProjectionMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_ColorModulate&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_Color&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_BoneMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_VertexInterpolation&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;u_PortalPlane&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLDeformStage&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_PORTAL_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_ALPHA_TESTING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_SKINNING&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_ANIMATION&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_DEFORM_VERTEXES&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_ENVIRONMENT&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_LIGHTMAP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The u_* parent classes provide functions that allow external code to set shader uniforms. e.g gl_genericShader-&amp;gt;SetUniform_ColorTextureMatrix()&lt;br /&gt;
&lt;br /&gt;
* GLSL shaders may be found in &amp;lt;code&amp;gt;main/glsl/&amp;lt;/code&amp;gt;. Please see the [[GLSL Shaders|full article]] for a complete listing.&lt;br /&gt;
&lt;br /&gt;
===Helper Classes===&lt;br /&gt;
&lt;br /&gt;
As mentioned above, shader classes make use of multiple inheritance to give them the relevant methods for controlling their behavior.&lt;br /&gt;
&lt;br /&gt;
====Compile Macros====&lt;br /&gt;
&lt;br /&gt;
Compile macros are used to reduce the number of uniforms needed, and speed up execution by eliminating useless if ( ) statements.&lt;br /&gt;
&lt;br /&gt;
They also allow for easy code reuse when turning off some features like e.g Normal Mapping.&lt;br /&gt;
&lt;br /&gt;
Compile macros are set when rendering before the call to shader-&amp;gt;BindProgram().&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_ALPHA_TESTING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_PORTAL_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_FRUSTUM_CLIPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_SKINNING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_VERTEX_ANIMATION&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_DEFORM_VERTEXES&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_ENVIRONMENT&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_TCGEN_LIGHTMAP&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_NORMAL_MAPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_PARALLAX_MAPPING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_REFLECTIVE_SPECULAR&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_EYE_OUTSIDE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_BRIGHTPASS_FILTER&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_LIGHT_DIRECTIONAL&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_SHADOWING&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;GLCompileMacro_USE_GBUFFER&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Resources===&lt;br /&gt;
&lt;br /&gt;
Mac OS X users with XCode installed can access OpenGL man pages via the terminal. &amp;lt;!-- TODO: discuss how to get these on windows or linux? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, OpenGL API reference documentation is available online:&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/man3/ OpenGL 3.3 Reference Pages]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/manglsl/ OpenGL Shading Language (GLSL) Reference Pages]&lt;br /&gt;
* [http://www.khronos.org/files/opengl-quick-reference-card.pdf OpenGL 3.3 &amp;amp;amp; GLSL Quick Reference Card]&lt;br /&gt;
&lt;br /&gt;
==Valgrind and fglrx==&lt;br /&gt;
&lt;br /&gt;
fglrx drivers cause Valgrind to spew out a lot of false errors. You can suppress these by using the --suppressions=/path/to/file.supp flag. You must pass the full path (no use of the tilde symbol). The following [http://www.mediafire.com/?z6ehwrxpw2m469h file] can be used as a template for your suppression file. Keep in mind that the location of the fglrx library may need to be changed.&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
===Publications===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://halo.bungie.net/Inside/publications.aspx Bungie, Inc.] &amp;amp;mdash; creators of the Marathon, Myth, and Halo franchises.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://dice.se/publications/ DICE SE] &amp;amp;mdash; creators of the Battlefield franchise.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.guerrilla-games.com/publications/ Guerilla Games] &amp;amp;mdash; creators of the Killzone franchise.&lt;br /&gt;
&amp;lt;p&amp;gt;Also of interest is the &amp;quot;Making of Killzone 2&amp;quot; video series, not listed on their site:&amp;lt;/p&amp;gt;&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-1?objectid=748475 Part 1]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-2?objectid=748475 Part 2]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-3?objectid=748475 Part 3]&lt;br /&gt;
* [http://www.ign.com/videos/2009/01/27/killzone-2-ps3-the-making-of-killzone-2-part-4?objectid=748475 Part 4]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[http://www.valvesoftware.com/company/publications.html Valve Software] &amp;amp;mdash; creators of the Half-Life franchise.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===General Game Development===&lt;br /&gt;
&lt;br /&gt;
* [http://devmaster.net/ Devmaster.net]&lt;br /&gt;
&lt;br /&gt;
===OpenGL===&lt;br /&gt;
&lt;br /&gt;
* [http://www.opengl.org/ Official OpenGL page]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/man3/ OpenGL 3.3 Reference Pages]&lt;br /&gt;
* [http://www.opengl.org/sdk/docs/manglsl/ OpenGL Shading Language Reference Pages]&lt;br /&gt;
* [http://arcsynthesis.org/gltut/ Learning Modern 3D Graphics Programming]&lt;br /&gt;
&lt;br /&gt;
===Quake===&lt;br /&gt;
&lt;br /&gt;
* [http://fd.fabiensanglard.net/doom3/pdfs/johnc-plan_1999.pdf John Carmack's notes from development]&lt;br /&gt;
* &amp;quot;Looking at the Quake 3 Source&amp;quot;&lt;br /&gt;
** [http://element61.blogspot.com/2005/08/looking-at-quake-3-source-part-1.html Part 1]&lt;br /&gt;
** [http://element61.blogspot.com/2005/08/looking-at-quake-3-source-part-2.html Part 2]&lt;br /&gt;
** [http://element61.blogspot.com/2005/09/looking-at-quake-3-source-part-3.html Part 3]&lt;br /&gt;
* [http://www.quakewiki.net/archives/code3arena/ Code3Arena]&lt;br /&gt;
* [http://www.modwiki.net/wiki/MD5_(file_format) MD5 file format]&lt;br /&gt;
* [http://tfc.duke.free.fr/coding/md5-specs-en.html Another MD5 format article]&lt;br /&gt;
* [http://fabiensanglard.net/quake3/index.php Quake 3 Source Code Review]&lt;br /&gt;
* [http://www.quake3world.com/forum/index.php Quake3World Discussion Forums]&lt;br /&gt;
* [http://wiki.ioquake3.org/ ioquake3 project wiki] &amp;amp;mdash; Primarily oriented for users, developers and server administrators.&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/DevLinks&amp;diff=2089</id>
		<title>User:Kangz/DevLinks</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/DevLinks&amp;diff=2089"/>
		<updated>2013-06-18T21:06:48Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dev links and interesting information&lt;br /&gt;
&lt;br /&gt;
== Server side demos ==&lt;br /&gt;
&lt;br /&gt;
 [08|06:18:02] &amp;lt; Amanieu&amp;gt; kharnov/kangz: for server-side demos, have a look at https://github.com/lrq3000/openarena_engine_serversidedemos&lt;br /&gt;
 [08|06:18:20] &amp;lt; Amanieu&amp;gt; Someone took my server-side demo patch and ported it to openarena&lt;br /&gt;
 [08|06:18:24] &amp;lt; Amanieu&amp;gt; fixed it up a bit too&lt;br /&gt;
 [08|06:43:20] &amp;lt; Amanieu&amp;gt; you're probably going to need a few gamecode hooks&lt;br /&gt;
 [08|06:43:55] &amp;lt; Amanieu&amp;gt; have a look at lakitu7-qvm-svdemo.patch&lt;br /&gt;
 [08|06:43:58] &amp;lt; Amanieu&amp;gt; in tremfusion/misc&lt;br /&gt;
 [08|06:48:08] &amp;lt; Amanieu&amp;gt; the openarena version probably won't work out of the box&lt;br /&gt;
 [08|06:48:18] &amp;lt; Amanieu&amp;gt; I expect the scoreboard and stages to be broken&lt;br /&gt;
 [08|06:48:28] &amp;lt; Amanieu&amp;gt; but otherwise everything else should work fine&lt;br /&gt;
 [08|06:49:13] &amp;lt; Amanieu&amp;gt; oh and teamchat won't be recorded&lt;br /&gt;
&lt;br /&gt;
== LibRocket ==&lt;br /&gt;
&lt;br /&gt;
[http://blog.wolfire.com/2013/06/Art-Asset-Overview-41 Nice 3d menu by wolfire game]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/TermiT/duke3d-megaton/blob/master/code/rocket/RocketAnimationPlugin.h Interesting librocket plugins]&lt;br /&gt;
&lt;br /&gt;
== Refactor / C++ ==&lt;br /&gt;
&lt;br /&gt;
[http://kotaku.com/undefined The exceptional beauty of DOOM3's source code]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc doom3 coding conventions]&lt;br /&gt;
&lt;br /&gt;
[http://icculus.org/physfs/ a library that mimics the q3 FS]&lt;br /&gt;
&lt;br /&gt;
== Better particles ==&lt;br /&gt;
&lt;br /&gt;
[http://blog.wolfire.com/2010/04/Soft-Particles Wolfire soft particles (no hard clipping)]&lt;br /&gt;
&lt;br /&gt;
[http://http.developer.nvidia.com/GPUGems3/gpugems3_ch23.html GPU Gems 3: Efficient off-screen particles]&lt;br /&gt;
&lt;br /&gt;
[http://www.humus.name/index.php?ID=266 Humus' particle trimming tool]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/Renderer_Discovery&amp;diff=2086</id>
		<title>User:Kangz/Renderer Discovery</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/Renderer_Discovery&amp;diff=2086"/>
		<updated>2013-06-18T03:36:35Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Add misc source files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm trying to learn how the renderer works, usually I write a lot of things on paper but since we have a wiki why not share my work with the other?&lt;br /&gt;
I'll be going through all the files in src/engine/rendererGL, things in ''italic'' are things I need to understand.&lt;br /&gt;
Please do not make changes to the page, this is a draft I'm using to learn. If you have comments feel free to express yourself on the discussion page.&lt;br /&gt;
&lt;br /&gt;
Kangz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== renderer/tr_public.h ===&lt;br /&gt;
&lt;br /&gt;
2 structs refexport_t and refimport_t define the API between the client and the renderer.&lt;br /&gt;
&lt;br /&gt;
refimport_t has API for:&lt;br /&gt;
* Printing and errors, cvars, commands&lt;br /&gt;
* Memory management&lt;br /&gt;
* File management&lt;br /&gt;
* Cinematics and AVI recording&lt;br /&gt;
* Misc (CM_debug, GL init, input, ftol)&lt;br /&gt;
&lt;br /&gt;
refexport has API for:&lt;br /&gt;
* Shutting down the renderer (or reloading it)&lt;br /&gt;
* Registration of assets&lt;br /&gt;
** BeginRegistration and EndRegistration respectively remove all the assets and upload all the assets&lt;br /&gt;
** Registration for models, skins, shaders, fonts, ''fontsVM?, glyph of all sorts'' and the world + visibility&lt;br /&gt;
** Things can be registered outside of Begin End but it is less efficient&lt;br /&gt;
* Drawing the scene&lt;br /&gt;
** Starts with ClearScene and ends with RenderScene (takes the definition of the view, referential definition)&lt;br /&gt;
** A bunch of add* functions to add elements to the scene&lt;br /&gt;
* Drawing 2d elements directly ''(it seems)''&lt;br /&gt;
* Managing visibility queries&lt;br /&gt;
* Setting the color grading&lt;br /&gt;
* Misc (RTT, shader management, video encoding...)&lt;br /&gt;
&lt;br /&gt;
=== renderer/tr_types.h ===&lt;br /&gt;
&lt;br /&gt;
Companion files for tr_public.h that defines the associated structs and constants&lt;br /&gt;
&lt;br /&gt;
Interesting struct are (add as I go):&lt;br /&gt;
* refEntity_t given for any entity that needs to be drawn&lt;br /&gt;
** orientation for the different parts of the model&lt;br /&gt;
** skin, texture and shader parameters&lt;br /&gt;
** ''a lot of other crap that looks redundant''&lt;br /&gt;
* refLight_t for any dynamic light&lt;br /&gt;
** Position, orientation, projection&lt;br /&gt;
** Type and shadow casting stuff&lt;br /&gt;
* refDef_t the view used for rendering&lt;br /&gt;
** Position, orientation, FOV, screen size&lt;br /&gt;
** Motion blur, color grading and fog parameters&lt;br /&gt;
** Other things&lt;br /&gt;
* gl_config{2}_t OpenGL capabilities and settings&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_local.h ===&lt;br /&gt;
All the things shared by the different rendererGL files&lt;br /&gt;
* More constants and enums&lt;br /&gt;
* Structs for everything&lt;br /&gt;
* A struct with the global state of the renderer&lt;br /&gt;
* Some global variables, including all the cvars&lt;br /&gt;
* An inline linked-list/queue/stack implementation&lt;br /&gt;
* Function definitions&lt;br /&gt;
&lt;br /&gt;
Too many things to list all of it. Will detail in the different relevant files&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_image.h ===&lt;br /&gt;
&lt;br /&gt;
Includes JPEG headers&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_model_skel.h ===&lt;br /&gt;
&lt;br /&gt;
Prototype of the few functions in rendererGL/tr_model_skel.c&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/gl_sader.h ===&lt;br /&gt;
&lt;br /&gt;
C++ prototypes for:&lt;br /&gt;
* GLShader and GLShaderManager&lt;br /&gt;
* GLUniform derived in a class per uniform type&lt;br /&gt;
* GLCompileMacro derived in a class per compile macro&lt;br /&gt;
* A class par uniform variable in a shader (derives from a uniform type class)&lt;br /&gt;
* A class per shader with derived from GLShader, each of the uniform class for this shader and each compile macro (no virtual method so it's ok to do this).&lt;br /&gt;
* A variable for each shader.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Renderer management source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_init.cpp ===&lt;br /&gt;
&lt;br /&gt;
Stuff that is not used every frame&lt;br /&gt;
&lt;br /&gt;
Contains the definition of global variables (cvars, glconfig, glstate)&lt;br /&gt;
&lt;br /&gt;
Defines some of the renderer console commands:&lt;br /&gt;
* modelist&lt;br /&gt;
* screenshot{|JPEG|PNG}&lt;br /&gt;
* gfxinfo&lt;br /&gt;
* glsl_restart&lt;br /&gt;
&lt;br /&gt;
Handles screenshots and video recording stuff&lt;br /&gt;
&lt;br /&gt;
Interesting OpenGL functions:&lt;br /&gt;
* InitOpenGL: call GLimpl_Init if not already done, set the default state, initializes the command queue, ...&lt;br /&gt;
* GL_CheckErrors_ used by the macro GL_CheckErrors&lt;br /&gt;
* RB_ReadPixels, sort of wrapper around glReadPixels&lt;br /&gt;
* GL_SetDefaultState&lt;br /&gt;
&lt;br /&gt;
Interesting renderer functions:&lt;br /&gt;
* GetRefAPI: the single entry point of the renderer library&lt;br /&gt;
* R_Init&lt;br /&gt;
** Called by R_BeginRegistration in tr_model.c&lt;br /&gt;
** Calls the initialisation of everyhing: LUT, cvars, commandbuffers, OpenGL, GPUshaders, images, fbo, vbo, q3shaders, skins, models, animations, freetype, occlusion queries&lt;br /&gt;
** Initialize DX10 as well, with special code for &amp;quot;Nvidia PerfHUD&amp;quot;&lt;br /&gt;
** ''seems to start the multiprocessing''&lt;br /&gt;
* R_Register, register cvars and console commands&lt;br /&gt;
* R_Shutdown&lt;br /&gt;
** Removes console commands and all the OpenGL state&lt;br /&gt;
** May remove the window&lt;br /&gt;
* R_EndRegistration, synchronizes with the render thread and the GPU&lt;br /&gt;
&lt;br /&gt;
Definitions for Com_Printf, Com_DPrintf and Com_Error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Backend source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_backend.c ===&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_shade.cpp ===&lt;br /&gt;
&lt;br /&gt;
Contains the Tess_Begin and Tess_End pseudo state machine and code necessary to transform shaders in real OpenGL calls.&lt;br /&gt;
&lt;br /&gt;
* Tess_Begin sets up the tess data structure with some parameters, the most important being the stage iterator: a function that will iterate over the stages of the shader and decide what to do with them (Forward render, and many iterators for deferred rendering: GBuffer, DepthFill, ...).&lt;br /&gt;
* Tess_End essentially calls the stage iterator on the tess data structure.&lt;br /&gt;
* Most stage iterators: for each stage they decide what to do with the specific surface type, calling one of the Render_ functions.&lt;br /&gt;
* The Render_ functions: they set up all the parameters for a specific OpenGL shader and finish by calling Tess_Draw that gives the actual GL draw calls.&lt;br /&gt;
* Also contains code that loads and destroys all the OpenGL shaders.&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_shade_calc.c ===&lt;br /&gt;
&lt;br /&gt;
Handles the user specified expressions and deformations in shaders:&lt;br /&gt;
* RB_EvalExpression returns the value of a shader expression.&lt;br /&gt;
* Functions that act on the tess structure to deform vertices, called if needed by Tess_DeformGeometry&lt;br /&gt;
* RB_CalcTexMatrix for the transformations of the texture coordinates&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_surface.c ===&lt;br /&gt;
&lt;br /&gt;
Definition of rb_surfaceTable with a &amp;quot;Tess&amp;quot; function for each type of surface. Code from the vanilla renderer just fill the arrays in the tess variable table, newer code bind VBOs and IBOs. In the whole file the modelview matrix is supposed to be valid and the calls to rb_surfaceTable are supposed to be surrounded by Tess_Begin() and Tess_End().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Q3 Shader source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_shader.c ===&lt;br /&gt;
&lt;br /&gt;
This file is a huge parser for shader files. At the start of the engine all .shader files are read and the different shaders are put in a hashmap. After ParseShader and potentially several ParseStage the shader is optimized (multitexturing).&lt;br /&gt;
&lt;br /&gt;
Also contains:&lt;br /&gt;
* The shaderlist command&lt;br /&gt;
* The shaderexp (evals a shader expression) command&lt;br /&gt;
* R_InitShaders&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenGL objects source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/gl_shader.cpp ===&lt;br /&gt;
&lt;br /&gt;
C++ code dealing with OpenGL shaders.&lt;br /&gt;
&lt;br /&gt;
Contains the implementation of the shader manager:&lt;br /&gt;
* Add defines to the shader text&lt;br /&gt;
* Computes shader permutation incrementally or not&lt;br /&gt;
* Handle binary shaders&lt;br /&gt;
&lt;br /&gt;
Definition of the Compile macro and shader function (dependances, ...)&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_fbo.c ===&lt;br /&gt;
&lt;br /&gt;
Functions to create, bind or attach components to FBOs and:&lt;br /&gt;
* Definition of the fbolist command&lt;br /&gt;
* R_InitFBO, creates all the needed FBOs&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_vbo.c ===&lt;br /&gt;
&lt;br /&gt;
Functions to create, bind, ... VBOs ad IBOs:&lt;br /&gt;
* Definition of the vbolist command&lt;br /&gt;
* R_InitVBOs creates the static VBOs&lt;br /&gt;
* ''R_Create{VBO|IBO}{2}''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Misc source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_decals.c ===&lt;br /&gt;
&lt;br /&gt;
Function to add decals on the world.&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_fog.c ===&lt;br /&gt;
&lt;br /&gt;
''Seems to control the fog through the old glFog calls. Most of the code has been commented and I'm not sure if the file is ever used.''&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_marks.c ===&lt;br /&gt;
&lt;br /&gt;
''Functions to project decals onto the world?''&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_noise.c ===&lt;br /&gt;
&lt;br /&gt;
Functions to fill noise tables.&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_shadows.c ===&lt;br /&gt;
&lt;br /&gt;
Contains a single function that change the tess data structure to make the ugly quake3 &amp;quot;flat&amp;quot; shadows.&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_sky.cpp ===&lt;br /&gt;
&lt;br /&gt;
This backend file is a big hack to make the renderer render the skybox. Contains Tess_StageIteratorSky and helper function. In Tess_Begin if we render the sky we put the real stage iterator in the second slot and StageIteratorSky will be the one that gets called. It will execute different things depending on the second stage iterator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Model source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_animation.c ===&lt;br /&gt;
&lt;br /&gt;
Contains R_LoadMD5Anim and R_LoadPSA, the definition of the &amp;quot;animationlist&amp;quot; console command and R_InitAnimation.&lt;br /&gt;
&lt;br /&gt;
Many functions liked to bones and skeletons (culling, interactions, adding the triangles, ...)&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_model.c ===&lt;br /&gt;
&lt;br /&gt;
Model loading and handle-&amp;gt;model&lt;br /&gt;
&lt;br /&gt;
Interesting functions:&lt;br /&gt;
* RE_RegisterModel: loads a model files and puts it in the store&lt;br /&gt;
* R_GetModelByHandle handle-&amp;gt;model&lt;br /&gt;
* R_ModelInit, essentially memory alloc&lt;br /&gt;
* Definition for the modellist command&lt;br /&gt;
&lt;br /&gt;
Also MDX loading, model tag and bone stuff&lt;br /&gt;
&lt;br /&gt;
=== Format specific files ===&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_animation_mdm.c ====&lt;br /&gt;
&lt;br /&gt;
Functions related to MDM (lod, interactions, animation, ...) and comes with its own math lib.&lt;br /&gt;
&lt;br /&gt;
''Tess_SurfaceVBOMDMMesh and Tess_MDM_SurfaceAnim''.&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_md3.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadMD3&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_md5.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadMD5&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_mdc.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadMDC&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_mdm.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadMDM&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_psk.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadPSK&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_skel.c ====&lt;br /&gt;
&lt;br /&gt;
''Definition of functions for adding things to skeleton VBO''&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_skin.c ===&lt;br /&gt;
&lt;br /&gt;
''Seems to handle the loading of &amp;quot;skins&amp;quot; for md3 models. We don't seem to use it.'' Also contains the definition of skinlist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Image source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_image.c ===&lt;br /&gt;
&lt;br /&gt;
Image (CPU) and texture (GPU) loading, management, computations&lt;br /&gt;
&lt;br /&gt;
Image functions:&lt;br /&gt;
* ''Gamma implemenation''&lt;br /&gt;
* Image manipulation (mipmaps, blends, ...)&lt;br /&gt;
* R_LoadImage with different formats and operations&lt;br /&gt;
* Definition of imagelist command&lt;br /&gt;
* R_CreateBuiltinImages&lt;br /&gt;
&lt;br /&gt;
Texture OpenGL functions:&lt;br /&gt;
* Creation of 2D, Cube and 3D textures (_and glyphs_)&lt;br /&gt;
* R_UploadImage with many branches&lt;br /&gt;
* Texture mode&lt;br /&gt;
* Creates the images needed by the FBOs&lt;br /&gt;
&lt;br /&gt;
Other:&lt;br /&gt;
* R_InitImages init memory, default images, ... (charset as well)&lt;br /&gt;
* R_ShutdownImages&lt;br /&gt;
* ''R_SetColorMapping''&lt;br /&gt;
* Color grading upload&lt;br /&gt;
&lt;br /&gt;
=== Format specific files ===&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_dds.c ====&lt;br /&gt;
&lt;br /&gt;
Contains R_LoadDDSImage and compressed image uploading to the GPU&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_exr.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadRGBEToHalfs and LoadRGBEToFloats used in rendererGL/tr_bsp.c (_but what for?_) (_and is it included there?_)&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_jpg.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadJPG, SaveJPG and SaveJPGToBuffer&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_png.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadPNG and SavePNG&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_tga.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadTGA&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_webp.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadWEBP&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/Renderer_Discovery&amp;diff=2085</id>
		<title>User:Kangz/Renderer Discovery</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/Renderer_Discovery&amp;diff=2085"/>
		<updated>2013-06-18T02:58:02Z</updated>

		<summary type="html">&lt;p&gt;Kangz: tr_shade and tr_shade_calc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm trying to learn how the renderer works, usually I write a lot of things on paper but since we have a wiki why not share my work with the other?&lt;br /&gt;
I'll be going through all the files in src/engine/rendererGL, things in ''italic'' are things I need to understand.&lt;br /&gt;
Please do not make changes to the page, this is a draft I'm using to learn. If you have comments feel free to express yourself on the discussion page.&lt;br /&gt;
&lt;br /&gt;
Kangz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== renderer/tr_public.h ===&lt;br /&gt;
&lt;br /&gt;
2 structs refexport_t and refimport_t define the API between the client and the renderer.&lt;br /&gt;
&lt;br /&gt;
refimport_t has API for:&lt;br /&gt;
* Printing and errors, cvars, commands&lt;br /&gt;
* Memory management&lt;br /&gt;
* File management&lt;br /&gt;
* Cinematics and AVI recording&lt;br /&gt;
* Misc (CM_debug, GL init, input, ftol)&lt;br /&gt;
&lt;br /&gt;
refexport has API for:&lt;br /&gt;
* Shutting down the renderer (or reloading it)&lt;br /&gt;
* Registration of assets&lt;br /&gt;
** BeginRegistration and EndRegistration respectively remove all the assets and upload all the assets&lt;br /&gt;
** Registration for models, skins, shaders, fonts, ''fontsVM?, glyph of all sorts'' and the world + visibility&lt;br /&gt;
** Things can be registered outside of Begin End but it is less efficient&lt;br /&gt;
* Drawing the scene&lt;br /&gt;
** Starts with ClearScene and ends with RenderScene (takes the definition of the view, referential definition)&lt;br /&gt;
** A bunch of add* functions to add elements to the scene&lt;br /&gt;
* Drawing 2d elements directly ''(it seems)''&lt;br /&gt;
* Managing visibility queries&lt;br /&gt;
* Setting the color grading&lt;br /&gt;
* Misc (RTT, shader management, video encoding...)&lt;br /&gt;
&lt;br /&gt;
=== renderer/tr_types.h ===&lt;br /&gt;
&lt;br /&gt;
Companion files for tr_public.h that defines the associated structs and constants&lt;br /&gt;
&lt;br /&gt;
Interesting struct are (add as I go):&lt;br /&gt;
* refEntity_t given for any entity that needs to be drawn&lt;br /&gt;
** orientation for the different parts of the model&lt;br /&gt;
** skin, texture and shader parameters&lt;br /&gt;
** ''a lot of other crap that looks redundant''&lt;br /&gt;
* refLight_t for any dynamic light&lt;br /&gt;
** Position, orientation, projection&lt;br /&gt;
** Type and shadow casting stuff&lt;br /&gt;
* refDef_t the view used for rendering&lt;br /&gt;
** Position, orientation, FOV, screen size&lt;br /&gt;
** Motion blur, color grading and fog parameters&lt;br /&gt;
** Other things&lt;br /&gt;
* gl_config{2}_t OpenGL capabilities and settings&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_local.h ===&lt;br /&gt;
All the things shared by the different rendererGL files&lt;br /&gt;
* More constants and enums&lt;br /&gt;
* Structs for everything&lt;br /&gt;
* A struct with the global state of the renderer&lt;br /&gt;
* Some global variables, including all the cvars&lt;br /&gt;
* An inline linked-list/queue/stack implementation&lt;br /&gt;
* Function definitions&lt;br /&gt;
&lt;br /&gt;
Too many things to list all of it. Will detail in the different relevant files&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_image.h ===&lt;br /&gt;
&lt;br /&gt;
Includes JPEG headers&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_model_skel.h ===&lt;br /&gt;
&lt;br /&gt;
Prototype of the few functions in rendererGL/tr_model_skel.c&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/gl_sader.h ===&lt;br /&gt;
&lt;br /&gt;
C++ prototypes for:&lt;br /&gt;
* GLShader and GLShaderManager&lt;br /&gt;
* GLUniform derived in a class per uniform type&lt;br /&gt;
* GLCompileMacro derived in a class per compile macro&lt;br /&gt;
* A class par uniform variable in a shader (derives from a uniform type class)&lt;br /&gt;
* A class per shader with derived from GLShader, each of the uniform class for this shader and each compile macro (no virtual method so it's ok to do this).&lt;br /&gt;
* A variable for each shader.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Renderer management source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_init.cpp ===&lt;br /&gt;
&lt;br /&gt;
Stuff that is not used every frame&lt;br /&gt;
&lt;br /&gt;
Contains the definition of global variables (cvars, glconfig, glstate)&lt;br /&gt;
&lt;br /&gt;
Defines some of the renderer console commands:&lt;br /&gt;
* modelist&lt;br /&gt;
* screenshot{|JPEG|PNG}&lt;br /&gt;
* gfxinfo&lt;br /&gt;
* glsl_restart&lt;br /&gt;
&lt;br /&gt;
Handles screenshots and video recording stuff&lt;br /&gt;
&lt;br /&gt;
Interesting OpenGL functions:&lt;br /&gt;
* InitOpenGL: call GLimpl_Init if not already done, set the default state, initializes the command queue, ...&lt;br /&gt;
* GL_CheckErrors_ used by the macro GL_CheckErrors&lt;br /&gt;
* RB_ReadPixels, sort of wrapper around glReadPixels&lt;br /&gt;
* GL_SetDefaultState&lt;br /&gt;
&lt;br /&gt;
Interesting renderer functions:&lt;br /&gt;
* GetRefAPI: the single entry point of the renderer library&lt;br /&gt;
* R_Init&lt;br /&gt;
** Called by R_BeginRegistration in tr_model.c&lt;br /&gt;
** Calls the initialisation of everyhing: LUT, cvars, commandbuffers, OpenGL, GPUshaders, images, fbo, vbo, q3shaders, skins, models, animations, freetype, occlusion queries&lt;br /&gt;
** Initialize DX10 as well, with special code for &amp;quot;Nvidia PerfHUD&amp;quot;&lt;br /&gt;
** ''seems to start the multiprocessing''&lt;br /&gt;
* R_Register, register cvars and console commands&lt;br /&gt;
* R_Shutdown&lt;br /&gt;
** Removes console commands and all the OpenGL state&lt;br /&gt;
** May remove the window&lt;br /&gt;
* R_EndRegistration, synchronizes with the render thread and the GPU&lt;br /&gt;
&lt;br /&gt;
Definitions for Com_Printf, Com_DPrintf and Com_Error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Backend source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_backend.c ===&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_shade.cpp ===&lt;br /&gt;
&lt;br /&gt;
Contains the Tess_Begin and Tess_End pseudo state machine and code necessary to transform shaders in real OpenGL calls.&lt;br /&gt;
&lt;br /&gt;
* Tess_Begin sets up the tess data structure with some parameters, the most important being the stage iterator: a function that will iterate over the stages of the shader and decide what to do with them (Forward render, and many iterators for deferred rendering: GBuffer, DepthFill, ...).&lt;br /&gt;
* Tess_End essentially calls the stage iterator on the tess data structure.&lt;br /&gt;
* Most stage iterators: for each stage they decide what to do with the specific surface type, calling one of the Render_ functions.&lt;br /&gt;
* The Render_ functions: they set up all the parameters for a specific OpenGL shader and finish by calling Tess_Draw that gives the actual GL draw calls.&lt;br /&gt;
* Also contains code that loads and destroys all the OpenGL shaders.&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_shade_calc.c ===&lt;br /&gt;
&lt;br /&gt;
Handles the user specified expressions and deformations in shaders:&lt;br /&gt;
* RB_EvalExpression returns the value of a shader expression.&lt;br /&gt;
* Functions that act on the tess structure to deform vertices, called if needed by Tess_DeformGeometry&lt;br /&gt;
* RB_CalcTexMatrix for the transformations of the texture coordinates&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_surface.c ===&lt;br /&gt;
&lt;br /&gt;
Definition of rb_surfaceTable with a &amp;quot;Tess&amp;quot; function for each type of surface. Code from the vanilla renderer just fill the arrays in the tess variable table, newer code bind VBOs and IBOs. In the whole file the modelview matrix is supposed to be valid and the calls to rb_surfaceTable are supposed to be surrounded by Tess_Begin() and Tess_End().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Q3 Shader source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_shader.c ===&lt;br /&gt;
&lt;br /&gt;
This file is a huge parser for shader files. At the start of the engine all .shader files are read and the different shaders are put in a hashmap. After ParseShader and potentially several ParseStage the shader is optimized (multitexturing).&lt;br /&gt;
&lt;br /&gt;
Also contains:&lt;br /&gt;
* The shaderlist command&lt;br /&gt;
* The shaderexp (evals a shader expression) command&lt;br /&gt;
* R_InitShaders&lt;br /&gt;
&lt;br /&gt;
== OpenGL objects source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/gl_shader.cpp ===&lt;br /&gt;
&lt;br /&gt;
C++ code dealing with OpenGL shaders.&lt;br /&gt;
&lt;br /&gt;
Contains the implementation of the shader manager:&lt;br /&gt;
* Add defines to the shader text&lt;br /&gt;
* Computes shader permutation incrementally or not&lt;br /&gt;
* Handle binary shaders&lt;br /&gt;
&lt;br /&gt;
Definition of the Compile macro and shader function (dependances, ...)&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_fbo.c ===&lt;br /&gt;
&lt;br /&gt;
Functions to create, bind or attach components to FBOs and:&lt;br /&gt;
* Definition of the fbolist command&lt;br /&gt;
* R_InitFBO, creates all the needed FBOs&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_vbo.c ===&lt;br /&gt;
&lt;br /&gt;
Functions to create, bind, ... VBOs ad IBOs:&lt;br /&gt;
* Definition of the vbolist command&lt;br /&gt;
* R_InitVBOs creates the static VBOs&lt;br /&gt;
* ''R_Create{VBO|IBO}{2}''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Model source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_animation.c ===&lt;br /&gt;
&lt;br /&gt;
Contains R_LoadMD5Anim and R_LoadPSA, the definition of the &amp;quot;animationlist&amp;quot; console command and R_InitAnimation.&lt;br /&gt;
&lt;br /&gt;
Many functions liked to bones and skeletons (culling, interactions, adding the triangles, ...)&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_model.c ===&lt;br /&gt;
&lt;br /&gt;
Model loading and handle-&amp;gt;model&lt;br /&gt;
&lt;br /&gt;
Interesting functions:&lt;br /&gt;
* RE_RegisterModel: loads a model files and puts it in the store&lt;br /&gt;
* R_GetModelByHandle handle-&amp;gt;model&lt;br /&gt;
* R_ModelInit, essentially memory alloc&lt;br /&gt;
* Definition for the modellist command&lt;br /&gt;
&lt;br /&gt;
Also MDX loading, model tag and bone stuff&lt;br /&gt;
&lt;br /&gt;
=== Format specific files ===&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_animation_mdm.c ====&lt;br /&gt;
&lt;br /&gt;
Functions related to MDM (lod, interactions, animation, ...) and comes with its own math lib.&lt;br /&gt;
&lt;br /&gt;
''Tess_SurfaceVBOMDMMesh and Tess_MDM_SurfaceAnim''.&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_md3.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadMD3&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_md5.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadMD5&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_mdc.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadMDC&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_mdm.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadMDM&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_psk.c ====&lt;br /&gt;
&lt;br /&gt;
Definition of R_LoadPSK&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_model_skel.c ====&lt;br /&gt;
&lt;br /&gt;
''Definition of functions for adding things to skeleton VBO''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Image source files ==&lt;br /&gt;
&lt;br /&gt;
=== rendererGL/tr_image.c ===&lt;br /&gt;
&lt;br /&gt;
Image (CPU) and texture (GPU) loading, management, computations&lt;br /&gt;
&lt;br /&gt;
Image functions:&lt;br /&gt;
* ''Gamma implemenation''&lt;br /&gt;
* Image manipulation (mipmaps, blends, ...)&lt;br /&gt;
* R_LoadImage with different formats and operations&lt;br /&gt;
* Definition of imagelist command&lt;br /&gt;
* R_CreateBuiltinImages&lt;br /&gt;
&lt;br /&gt;
Texture OpenGL functions:&lt;br /&gt;
* Creation of 2D, Cube and 3D textures (_and glyphs_)&lt;br /&gt;
* R_UploadImage with many branches&lt;br /&gt;
* Texture mode&lt;br /&gt;
* Creates the images needed by the FBOs&lt;br /&gt;
&lt;br /&gt;
Other:&lt;br /&gt;
* R_InitImages init memory, default images, ... (charset as well)&lt;br /&gt;
* R_ShutdownImages&lt;br /&gt;
* ''R_SetColorMapping''&lt;br /&gt;
* Color grading upload&lt;br /&gt;
&lt;br /&gt;
=== Format specific files ===&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_dds.c ====&lt;br /&gt;
&lt;br /&gt;
Contains R_LoadDDSImage and compressed image uploading to the GPU&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_exr.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadRGBEToHalfs and LoadRGBEToFloats used in rendererGL/tr_bsp.c (_but what for?_) (_and is it included there?_)&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_jpg.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadJPG, SaveJPG and SaveJPGToBuffer&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_png.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadPNG and SavePNG&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_tga.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadTGA&lt;br /&gt;
&lt;br /&gt;
==== rendererGL/tr_image_webp.c ====&lt;br /&gt;
&lt;br /&gt;
Contains LoadWEBP&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/DevLinks&amp;diff=2083</id>
		<title>User:Kangz/DevLinks</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/DevLinks&amp;diff=2083"/>
		<updated>2013-06-11T21:44:28Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dev links and interesting information&lt;br /&gt;
&lt;br /&gt;
== Server side demos ==&lt;br /&gt;
&lt;br /&gt;
 [08|06:18:02] &amp;lt; Amanieu&amp;gt; kharnov/kangz: for server-side demos, have a look at https://github.com/lrq3000/openarena_engine_serversidedemos&lt;br /&gt;
 [08|06:18:20] &amp;lt; Amanieu&amp;gt; Someone took my server-side demo patch and ported it to openarena&lt;br /&gt;
 [08|06:18:24] &amp;lt; Amanieu&amp;gt; fixed it up a bit too&lt;br /&gt;
 [08|06:43:20] &amp;lt; Amanieu&amp;gt; you're probably going to need a few gamecode hooks&lt;br /&gt;
 [08|06:43:55] &amp;lt; Amanieu&amp;gt; have a look at lakitu7-qvm-svdemo.patch&lt;br /&gt;
 [08|06:43:58] &amp;lt; Amanieu&amp;gt; in tremfusion/misc&lt;br /&gt;
 [08|06:48:08] &amp;lt; Amanieu&amp;gt; the openarena version probably won't work out of the box&lt;br /&gt;
 [08|06:48:18] &amp;lt; Amanieu&amp;gt; I expect the scoreboard and stages to be broken&lt;br /&gt;
 [08|06:48:28] &amp;lt; Amanieu&amp;gt; but otherwise everything else should work fine&lt;br /&gt;
 [08|06:49:13] &amp;lt; Amanieu&amp;gt; oh and teamchat won't be recorded&lt;br /&gt;
&lt;br /&gt;
== LibRocket ==&lt;br /&gt;
&lt;br /&gt;
[http://blog.wolfire.com/2013/06/Art-Asset-Overview-41 Nice 3d menu by wolfire game]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/TermiT/duke3d-megaton/blob/master/code/rocket/RocketAnimationPlugin.h Interesting librocket plugins]&lt;br /&gt;
&lt;br /&gt;
== Refactor / C++ ==&lt;br /&gt;
&lt;br /&gt;
[http://kotaku.com/undefined The exceptional beauty of DOOM3's source code]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc doom3 coding conventions]&lt;br /&gt;
&lt;br /&gt;
== Better particles ==&lt;br /&gt;
&lt;br /&gt;
[http://blog.wolfire.com/2010/04/Soft-Particles Wolfire soft particles (no hard clipping)]&lt;br /&gt;
&lt;br /&gt;
[http://http.developer.nvidia.com/GPUGems3/gpugems3_ch23.html GPU Gems 3: Efficient off-screen particles]&lt;br /&gt;
&lt;br /&gt;
[http://www.humus.name/index.php?ID=266 Humus' particle trimming tool]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/DevLinks&amp;diff=2082</id>
		<title>User:Kangz/DevLinks</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/DevLinks&amp;diff=2082"/>
		<updated>2013-06-09T04:17:25Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dev links and interesting information&lt;br /&gt;
&lt;br /&gt;
== Server side demos ==&lt;br /&gt;
&lt;br /&gt;
 [08|06:18:02] &amp;lt; Amanieu&amp;gt; kharnov/kangz: for server-side demos, have a look at https://github.com/lrq3000/openarena_engine_serversidedemos&lt;br /&gt;
 [08|06:18:20] &amp;lt; Amanieu&amp;gt; Someone took my server-side demo patch and ported it to openarena&lt;br /&gt;
 [08|06:18:24] &amp;lt; Amanieu&amp;gt; fixed it up a bit too&lt;br /&gt;
 [08|06:43:20] &amp;lt; Amanieu&amp;gt; you're probably going to need a few gamecode hooks&lt;br /&gt;
 [08|06:43:55] &amp;lt; Amanieu&amp;gt; have a look at lakitu7-qvm-svdemo.patch&lt;br /&gt;
 [08|06:43:58] &amp;lt; Amanieu&amp;gt; in tremfusion/misc&lt;br /&gt;
 [08|06:48:08] &amp;lt; Amanieu&amp;gt; the openarena version probably won't work out of the box&lt;br /&gt;
 [08|06:48:18] &amp;lt; Amanieu&amp;gt; I expect the scoreboard and stages to be broken&lt;br /&gt;
 [08|06:48:28] &amp;lt; Amanieu&amp;gt; but otherwise everything else should work fine&lt;br /&gt;
 [08|06:49:13] &amp;lt; Amanieu&amp;gt; oh and teamchat won't be recorded&lt;br /&gt;
&lt;br /&gt;
== LibRocket ==&lt;br /&gt;
&lt;br /&gt;
[http://blog.wolfire.com/2013/06/Art-Asset-Overview-41 Nice 3d menu by wolfire game]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/TermiT/duke3d-megaton/blob/master/code/rocket/RocketAnimationPlugin.h Interesting librocket plugins]&lt;br /&gt;
&lt;br /&gt;
== Refector / C++ ==&lt;br /&gt;
&lt;br /&gt;
[http://kotaku.com/undefined The exceptional beauty of DOOM3's source code]&lt;br /&gt;
&lt;br /&gt;
[ftp://ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc doom3 coding conventions]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/DevLinks&amp;diff=2081</id>
		<title>User:Kangz/DevLinks</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/DevLinks&amp;diff=2081"/>
		<updated>2013-06-08T06:47:14Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Created page with &amp;quot;Dev links and interesting information  == Server side demos ==   [08|06:18:02] &amp;lt; Amanieu&amp;gt; kharnov/kangz: for server-side demos, have a look at https://github.com/lrq3000/opena...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dev links and interesting information&lt;br /&gt;
&lt;br /&gt;
== Server side demos ==&lt;br /&gt;
&lt;br /&gt;
 [08|06:18:02] &amp;lt; Amanieu&amp;gt; kharnov/kangz: for server-side demos, have a look at https://github.com/lrq3000/openarena_engine_serversidedemos&lt;br /&gt;
 [08|06:18:20] &amp;lt; Amanieu&amp;gt; Someone took my server-side demo patch and ported it to openarena&lt;br /&gt;
 [08|06:18:24] &amp;lt; Amanieu&amp;gt; fixed it up a bit too&lt;br /&gt;
 [08|06:43:20] &amp;lt; Amanieu&amp;gt; you're probably going to need a few gamecode hooks&lt;br /&gt;
 [08|06:43:55] &amp;lt; Amanieu&amp;gt; have a look at lakitu7-qvm-svdemo.patch&lt;br /&gt;
 [08|06:43:58] &amp;lt; Amanieu&amp;gt; in tremfusion/misc&lt;br /&gt;
 [08|06:48:08] &amp;lt; Amanieu&amp;gt; the openarena version probably won't work out of the box&lt;br /&gt;
 [08|06:48:18] &amp;lt; Amanieu&amp;gt; I expect the scoreboard and stages to be broken&lt;br /&gt;
 [08|06:48:28] &amp;lt; Amanieu&amp;gt; but otherwise everything else should work fine&lt;br /&gt;
 [08|06:49:13] &amp;lt; Amanieu&amp;gt; oh and teamchat won't be recorded&lt;br /&gt;
&lt;br /&gt;
== LibRocket ==&lt;br /&gt;
&lt;br /&gt;
[http://blog.wolfire.com/2013/06/Art-Asset-Overview-41|Nice 3d menu by wolfire game]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/TermiT/duke3d-megaton/blob/master/code/rocket/RocketAnimationPlugin.h|Interesting librocket plugins]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz&amp;diff=2058</id>
		<title>User:Kangz</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz&amp;diff=2058"/>
		<updated>2013-05-27T01:45:37Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hey there!&lt;br /&gt;
&lt;br /&gt;
I played and loved Tremulous during 5 years, with the (CY) and Welcomed clans. I'm a french student in computer science at the École polytechnique in France and doing code for Unvanquished.&lt;br /&gt;
&lt;br /&gt;
Things that I did or that I am currently doing:&lt;br /&gt;
* Config files&lt;br /&gt;
* [[Minimap]]&lt;br /&gt;
* Discovering the GL3 renderer&lt;br /&gt;
&lt;br /&gt;
I also play with the assets config files as my artistic ability is limited to creating crappy procedural textures.&lt;br /&gt;
&lt;br /&gt;
I'm always on [[IRC]] (unless my server as a problem) and would love to speak with you!&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Minimap&amp;diff=2057</id>
		<title>User:Minimap</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Minimap&amp;diff=2057"/>
		<updated>2013-05-27T01:45:13Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Kangz moved page User:Minimap to Minimap: Forgot the namespace :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Minimap]]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2056</id>
		<title>Tutorials/Minimap</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2056"/>
		<updated>2013-05-27T01:45:12Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Kangz moved page User:Minimap to Minimap: Forgot the namespace :)&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 intricated levels) either because the map is too large.&lt;br /&gt;
&lt;br /&gt;
If you simply want to cut the minimap in several part, 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 too 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;
=== 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>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/Minimap&amp;diff=2055</id>
		<title>User:Kangz/Minimap</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=User:Kangz/Minimap&amp;diff=2055"/>
		<updated>2013-05-27T01:44:41Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Kangz moved page User:Kangz/Minimap to User:Minimap: The draft is finished&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[User:Minimap]]&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2054</id>
		<title>Tutorials/Minimap</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2054"/>
		<updated>2013-05-27T01:44:41Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Kangz moved page User:Kangz/Minimap to User:Minimap: The draft is finished&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 intricated levels) either because the map is too large.&lt;br /&gt;
&lt;br /&gt;
If you simply want to cut the minimap in several part, 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 too 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;
=== 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>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2037</id>
		<title>Tutorials/Minimap</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2037"/>
		<updated>2013-05-24T05:26:06Z</updated>

		<summary type="html">&lt;p&gt;Kangz: First version complete.&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 intricated levels) either because the map is too large.&lt;br /&gt;
&lt;br /&gt;
If you simply want to cut the minimap in several part, 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 too 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;
=== 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>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=File:Minimap_q3map2_texcoords.png&amp;diff=2036</id>
		<title>File:Minimap q3map2 texcoords.png</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=File:Minimap_q3map2_texcoords.png&amp;diff=2036"/>
		<updated>2013-05-24T05:25:26Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Extract from a q3map2 minimap output, highlight the size_texcoords numbers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Extract from a q3map2 minimap output, highlight the size_texcoords numbers&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2035</id>
		<title>Tutorials/Minimap</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2035"/>
		<updated>2013-05-24T04:32:12Z</updated>

		<summary type="html">&lt;p&gt;Kangz: /* nokeepaspect */&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 texcoord_size&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 texcoord_size):&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;
 Whatever, need to find out&lt;br /&gt;
&lt;br /&gt;
=== Creating the images ===&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 intricated levels) either because the map is too large.&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;
If you simply want to cut the minimap in several part, 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 too 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;
=== Creating the minimap file ===&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>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2034</id>
		<title>Tutorials/Minimap</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2034"/>
		<updated>2013-05-24T04:31:45Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Add q3map2 minimap doc&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 texcoord_size&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 texcoord_size):&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;
 Whatever, need to find out&lt;br /&gt;
&lt;br /&gt;
=== Creating the images ===&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 intricated levels) either because the map is too large.&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;
If you simply want to cut the minimap in several part, 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 too 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;
=== Creating the minimap file ===&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 SUPPORT 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>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Talk:Coding_convention&amp;diff=2032</id>
		<title>Talk:Coding convention</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Talk:Coding_convention&amp;diff=2032"/>
		<updated>2013-05-22T21:07:22Z</updated>

		<summary type="html">&lt;p&gt;Kangz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have added some conventions from the readings of the code, but I might be wrong, especially about spaces in ifs. I have noticed that some places uses writings like &lt;br /&gt;
 if ( foo )&lt;br /&gt;
and some other with &lt;br /&gt;
 if( bar )&lt;br /&gt;
so some confirmations could be useful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is not clearly defined convention for the code, although id software probably had one (doom3's is on the web). If we are to write a coding convention document, I'd rather poll everyone to see what we would like to have, instead of sticking to the old, implicit one. For example I'd change the indent style to K&amp;amp;R or 1TBS. Also when you use a talk page you can put a signature (&amp;lt;nowiki&amp;gt;--~~~&amp;lt;/nowiki&amp;gt;) so that we know who said what. --[[User:Kangz|Kangz]] ([[User talk:Kangz|talk]])&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2029</id>
		<title>Tutorials/Minimap</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=Tutorials/Minimap&amp;diff=2029"/>
		<updated>2013-05-22T07:42:58Z</updated>

		<summary type="html">&lt;p&gt;Kangz: Write a part of the full tutorial&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]].&lt;br /&gt;
&lt;br /&gt;
TODO: explain the zones briefly here&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 texcoord_size&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 texcoord_size):&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;
 Whatever, need to find out&lt;br /&gt;
&lt;br /&gt;
=== Creating the images ===&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 intricated levels) either because the map is too large.&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;
If you simply want to cut the minimap in several part, 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 ''something'' 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 too 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;
&lt;br /&gt;
=== Creating the minimap file ===&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;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=File:Minimap_atcshd_example.png&amp;diff=2028</id>
		<title>File:Minimap atcshd example.png</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=File:Minimap_atcshd_example.png&amp;diff=2028"/>
		<updated>2013-05-22T07:41:28Z</updated>

		<summary type="html">&lt;p&gt;Kangz: The basic minimap created by q3map2 for atcshd&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The basic minimap created by q3map2 for atcshd&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
	<entry>
		<id>https://staging-wiki.unvanquished.net/index.php?title=File:Minimap_atcshd_cutted.png&amp;diff=2027</id>
		<title>File:Minimap atcshd cutted.png</title>
		<link rel="alternate" type="text/html" href="https://staging-wiki.unvanquished.net/index.php?title=File:Minimap_atcshd_cutted.png&amp;diff=2027"/>
		<updated>2013-05-22T07:37:12Z</updated>

		<summary type="html">&lt;p&gt;Kangz: AtcsHD opened in radiant with the bunker part missing and the hole in the geometry filled with a brush&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AtcsHD opened in radiant with the bunker part missing and the hole in the geometry filled with a brush&lt;/div&gt;</summary>
		<author><name>Kangz</name></author>
	</entry>
</feed>