<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pioneerspacesim.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RobN</id>
	<title>PioneerWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pioneerspacesim.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=RobN"/>
	<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/wiki/Special:Contributions/RobN"/>
	<updated>2026-07-10T08:16:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=ServerAgent&amp;diff=2836</id>
		<title>ServerAgent</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=ServerAgent&amp;diff=2836"/>
		<updated>2015-02-03T07:37:43Z</updated>

		<summary type="html">&lt;p&gt;RobN: Created page with &amp;quot;The ServerAgent is an '''experimental''' feature that allows Pioneer scripts to make calls to an API server. Out of the box its disabled and not used by any of the stock modul...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The ServerAgent is an '''experimental''' feature that allows Pioneer scripts to make calls to an API server. Out of the box its disabled and not used by any of the stock modules. That will change once we gain experience with it.&lt;br /&gt;
&lt;br /&gt;
== Enabling the agent ==&lt;br /&gt;
&lt;br /&gt;
To enable the agent, you need to edit your &amp;lt;tt&amp;gt;config.ini&amp;lt;/tt&amp;gt; and set two parameters:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;EnableServerAgent=1&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ServerEndpoint=http://somewhere/api&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously, you'll need the URL of an API server.&lt;br /&gt;
&lt;br /&gt;
== Using the agent ==&lt;br /&gt;
&lt;br /&gt;
The agent has one method:&lt;br /&gt;
&lt;br /&gt;
 ServerAgent.Call(method, params, successCallback, failureCallback)&lt;br /&gt;
&lt;br /&gt;
The arguments are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;method&amp;lt;/tt&amp;gt;: string, name of the remote method to call&lt;br /&gt;
* &amp;lt;tt&amp;gt;params&amp;lt;/tt&amp;gt;: (optional) arbitrary data, converted to JSON and sent to the server&lt;br /&gt;
* &amp;lt;tt&amp;gt;successCallback&amp;lt;/tt&amp;gt;: (optional) function called on successful return from the server. Passed any data returned from the server&lt;br /&gt;
* &amp;lt;tt&amp;gt;failureCallback&amp;lt;/tt&amp;gt;: (optional) function called on failure. Passed an error message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ServerAgent.Call()&amp;lt;/tt&amp;gt; returns immediately. If there is already a call being processed, calls are queued.&lt;br /&gt;
&lt;br /&gt;
== Writing a server ==&lt;br /&gt;
&lt;br /&gt;
Servers will receive a HTTP POST request against the endpoint URL like this:&lt;br /&gt;
&lt;br /&gt;
 POST /api/method HTTP/1.1&lt;br /&gt;
 User-Agent: PioneerServerAgent/git.0f09618&lt;br /&gt;
 Content-Type: application/json&lt;br /&gt;
 &lt;br /&gt;
 {&amp;quot;foo&amp;quot;:&amp;quot;bar&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
The `params` argument to `ServerAgent.Call()` is JSON-encoded and sent in the request body.&lt;br /&gt;
&lt;br /&gt;
The server should return something like:&lt;br /&gt;
&lt;br /&gt;
 HTTP/1.0 200 OK&lt;br /&gt;
 Content-Type: application/json&lt;br /&gt;
 Content-Length: 14&lt;br /&gt;
 &lt;br /&gt;
 {&amp;quot;baz&amp;quot;:&amp;quot;quux&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
The result body is JSON-decoded and passed to the `successCallback`.&lt;br /&gt;
&lt;br /&gt;
This style of server is trivially implemented in just about any programming language. A sample server is available at https://github.com/robn/pioneer-apiserver/blob/master/pioneer-apiserver.psgi&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=2467</id>
		<title>Translations</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=2467"/>
		<updated>2014-03-03T00:10:15Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* For mod developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All text in Pioneer is translatable, and the game ships with several translations. Here's everything you need to know.&lt;br /&gt;
&lt;br /&gt;
== For translators ==&lt;br /&gt;
&lt;br /&gt;
All our translations are managed through [http://transifex.com Transifex], a web-based translation service. To start writing translations, sign up there, and then take a look at the [https://www.transifex.com/projects/p/pioneer/ Pioneer project].&lt;br /&gt;
&lt;br /&gt;
Changes to translations are automatically pulled into the master git repo twice per day, and from there to the builds when they're next run.&lt;br /&gt;
&lt;br /&gt;
In Transifex you can subscribe to notifications for the languages or resources you're interested in. When new strings are added or modified, you'll be told about it.&lt;br /&gt;
&lt;br /&gt;
If you want to translate Pioneer to an entirely new language, please [https://pioneerspacesim.net/issues open an issue] on the tracker and someone will create the translation for you.&lt;br /&gt;
&lt;br /&gt;
English is the canonical language for Pioneer. As such, you can't directly modify the english strings through Transifex. If you want to change those, you'll need to make the change in git and submit a pull request like normal.&lt;br /&gt;
&lt;br /&gt;
Untranslated strings will use the value from the English version.&lt;br /&gt;
&lt;br /&gt;
You can leave comments in Transifex to help out other translators. You'll also see any notes left by the developers to help you translate a particular string.&lt;br /&gt;
&lt;br /&gt;
If you're a new translator and you'd like your name included in AUTHORS.txt, please let us know!&lt;br /&gt;
&lt;br /&gt;
== For mod developers ==&lt;br /&gt;
&lt;br /&gt;
Each module gets its own translation resource, called &amp;lt;tt&amp;gt;module-foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To get at the strings for your module, do something like:&lt;br /&gt;
&lt;br /&gt;
    local Lang = import(&amp;quot;Lang&amp;quot;)&lt;br /&gt;
    local l = Lang.GetResource(&amp;quot;module-foo&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Then you can get at the string by its token:&lt;br /&gt;
&lt;br /&gt;
    print(l.SOME_TRANSLATED_STRING)&lt;br /&gt;
&lt;br /&gt;
While its possible to load multiple translation resources to share strings, its highly recommended that you don't do that. Stick to your own strings so that you don't have to track changes in other modules. Duplicates across resources are fine. Note that code that uses multiple resources won't be accepted into the main Pioneer repository unless you've checked it with a core developer first and it has a good reason.&lt;br /&gt;
&lt;br /&gt;
Translations are [https://developer.chrome.com/extensions/i18n.html &amp;lt;tt&amp;gt;chrome.i18n&amp;lt;/tt&amp;gt; JSON] files. The format is fairly simple - an table of tokens as keys, with values of a table with two keys, &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; is the text that will appear in the game, while &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt; provides instructions for the translator that will be displayed in Transifex. [http://json.org/string.gif Here] is a useful chart showing how characters are interpreted.&lt;br /&gt;
&lt;br /&gt;
If you're submitting code that requires a new language you should only include &amp;lt;tt&amp;gt;en.json&amp;lt;/tt&amp;gt;. Please tag @robn or @johnbartholomew in your pull request so they can create a new resource in Transifex and make sure a language update is done at merge. If you don't do this then you'll break the game for non-English users.&lt;br /&gt;
&lt;br /&gt;
== For core developers ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;core&amp;lt;/tt&amp;gt; resource is magical. If you add a string to it, you also need to add it to &amp;lt;tt&amp;gt;LangStrings.inc.h&amp;lt;/tt&amp;gt; and recompile. It will then be available as &amp;lt;tt&amp;gt;Lang::SOME_TRANSLATED_STRING&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Model_debug_flags&amp;diff=2334</id>
		<title>Model debug flags</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Model_debug_flags&amp;diff=2334"/>
		<updated>2014-02-01T11:47:03Z</updated>

		<summary type="html">&lt;p&gt;RobN: Created page with &amp;quot;The model system can be instructed to draw models with extra information visible, such as the collision mesh, tag locations, etc. The same information that is available in the...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The model system can be instructed to draw models with extra information visible, such as the collision mesh, tag locations, etc. The same information that is available in the modelviewer is also available in-game. Here's how to activate it via the console.&lt;br /&gt;
&lt;br /&gt;
== Getting a model reference ==&lt;br /&gt;
&lt;br /&gt;
You need to get a reference to a model into the console environment. Every model-based physical body (that is anything inheriting from&amp;amp;nbsp;&amp;lt;tt&amp;gt;ModelBody&amp;lt;/tt&amp;gt;: ships, spacestations, cargo, missiles) has a&amp;amp;nbsp;&amp;lt;tt&amp;gt;model&amp;lt;/tt&amp;gt; attribute attached. For the player, that's available as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;model = Game.player.model&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For other models, the easiest way to get a reference to the body is to target the object and then obtain the navtarget or combat target from the player:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;model = Game.player:GetNavTarget().model&lt;br /&gt;
model = Game.player:GetCombatTarget().model&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set debug flags ==&lt;br /&gt;
&lt;br /&gt;
Once you've got a model reference, pass a list of the flags you want to enable to its &amp;lt;code&amp;gt;SetDebugFlags()&amp;lt;/code&amp;gt; method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;model:SetDebugFlags({&amp;quot;BBOX&amp;quot;,&amp;quot;COLLMESH&amp;quot;})&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable all flags, pass an empty list:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;model:SetDebugFlags({})&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Available flags ==&lt;br /&gt;
&lt;br /&gt;
=== BBOX - Bounding box ===&lt;br /&gt;
&lt;br /&gt;
Displays the axis-aligned bounding box of the model. This includes the shield mesh, even if its not currently on screen. The bounding box is used for early collision culling and body size estimates.&lt;br /&gt;
&lt;br /&gt;
[[File:Model-debug-bbox.png|800x500px]]&lt;br /&gt;
&lt;br /&gt;
=== COLLMESH - Collision mesh ===&lt;br /&gt;
&lt;br /&gt;
Displays the collision mesh of the model. Also shows special collision-based surfaces (such as docking surfaces).&lt;br /&gt;
&lt;br /&gt;
[[File:Model-debug-collmesh.png|800x500px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Model-debug-collmesh-station.png|800x500px]]&lt;br /&gt;
&lt;br /&gt;
=== WIREFRAME - Wireframe mode ===&lt;br /&gt;
&lt;br /&gt;
Draws the model in wireframe. This can result in a performance hit on complex modes.&lt;br /&gt;
&lt;br /&gt;
[[File:Model-debug-wireframe.png|800x500px]]&lt;br /&gt;
&lt;br /&gt;
=== TAGS - Show model tags ===&lt;br /&gt;
&lt;br /&gt;
Draws an axis indicator at any &amp;lt;tt&amp;gt;tag_&amp;lt;/tt&amp;gt; points defined on the model.&lt;br /&gt;
&lt;br /&gt;
[[File:Model-debug-tags.png|800x500px]]&lt;br /&gt;
&lt;br /&gt;
=== DOCKING - Show docking positions ===&lt;br /&gt;
&lt;br /&gt;
Draws an axis indicator at docking points defined on the model (typically a station). Currently the points are drawn quite small, making them difficult to see from a distance.&lt;br /&gt;
&lt;br /&gt;
[[File:Model-debug-docking-station.png|800x500px]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-wireframe.png&amp;diff=2333</id>
		<title>File:Model-debug-wireframe.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-wireframe.png&amp;diff=2333"/>
		<updated>2014-02-01T11:37:03Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-tags.png&amp;diff=2332</id>
		<title>File:Model-debug-tags.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-tags.png&amp;diff=2332"/>
		<updated>2014-02-01T11:36:32Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-docking-station.png&amp;diff=2331</id>
		<title>File:Model-debug-docking-station.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-docking-station.png&amp;diff=2331"/>
		<updated>2014-02-01T11:36:17Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-collmesh-station.png&amp;diff=2330</id>
		<title>File:Model-debug-collmesh-station.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-collmesh-station.png&amp;diff=2330"/>
		<updated>2014-02-01T11:36:16Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-collmesh.png&amp;diff=2329</id>
		<title>File:Model-debug-collmesh.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-collmesh.png&amp;diff=2329"/>
		<updated>2014-02-01T11:36:00Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-bbox.png&amp;diff=2328</id>
		<title>File:Model-debug-bbox.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Model-debug-bbox.png&amp;diff=2328"/>
		<updated>2014-02-01T11:35:05Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=2325</id>
		<title>Model system</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=2325"/>
		<updated>2014-01-29T11:39:38Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Tag points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
tl;dr: a simple scenegraph-based approach that has nothing to do with the old system or Lua, focus is on easy importing, supports some animation.&lt;br /&gt;
&lt;br /&gt;
== Importing models ==&lt;br /&gt;
&lt;br /&gt;
The import system theoretically supports [http://assimp.sourceforge.net/main_features_formats.html many different formats] but you are expected to use only some:&lt;br /&gt;
&lt;br /&gt;
* When node structure, node names and animations matter, use '''Collada (.dae).'''&lt;br /&gt;
* For static geometry, such as buildings, OBJ is recommended, this may allow for some optimizations&lt;br /&gt;
&lt;br /&gt;
The only officially tested 3D modelling program at the moment is [http://www.blender.org/ Blender 2.64]. For blender, a quick checklist is:&lt;br /&gt;
&lt;br /&gt;
* Coordinates: X right, Y forward, Z up&lt;br /&gt;
* Always generate UV coordinates for the model&lt;br /&gt;
* Versions downloaded from blender.org support Collada out of the box, while the version distributed with some Linux distros doesn't&lt;br /&gt;
&lt;br /&gt;
The [[Model viewer]] is supplied with the game.&lt;br /&gt;
&lt;br /&gt;
=== Model definition file ===&lt;br /&gt;
&lt;br /&gt;
Models must be placed under '''data/models'''&lt;br /&gt;
&lt;br /&gt;
To define a model, create a simple &amp;lt;code&amp;gt;name_here.model&amp;lt;/code&amp;gt; text file along with your exported meshes:&lt;br /&gt;
&lt;br /&gt;
 #Comments can be written like this&lt;br /&gt;
 #Define all used materials first&lt;br /&gt;
 Material some-material&lt;br /&gt;
 tex_diff some_texture.png&lt;br /&gt;
 diffuse 0.8 0.7 0.7&lt;br /&gt;
 &lt;br /&gt;
 #Meshes to be imported into this model, should be in the current folder&lt;br /&gt;
 #Mixing different formats should be OK&lt;br /&gt;
 mesh part1.obj&lt;br /&gt;
 mesh part2.obj&lt;br /&gt;
&lt;br /&gt;
== Materials ==&lt;br /&gt;
&lt;br /&gt;
Only material names are imported from 3D models, to set material properties use a small definition like this:&lt;br /&gt;
&lt;br /&gt;
 material CobraI_body&lt;br /&gt;
 tex_diff CobraI_diff.png&lt;br /&gt;
 tex_glow CobraI_emit.png&lt;br /&gt;
 tex_spec CobraI_spec.png&lt;br /&gt;
 diffuse 1.0 1.0 1.0&lt;br /&gt;
 specular 1.0 1.0 1.0&lt;br /&gt;
 shininess 150&lt;br /&gt;
&lt;br /&gt;
=== Material properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| material || Name. Mandatory! Note, some exporters modify the names from what is visible in the modeling program, for example the Blender 2.6 Collada exporter adds &amp;quot;-material&amp;quot; to each name. You'll have to use this final name. If in doubt, note that both .obj and .dae files are human readable, and you can find the assigned names in them with a text editor.&lt;br /&gt;
|-&lt;br /&gt;
| diffuse|| Diffuse colour RGB. Default white.&lt;br /&gt;
|-&lt;br /&gt;
| specular|| Colour of specular highlights, RGB. Default white. Set to black to disable highlights.&lt;br /&gt;
|-&lt;br /&gt;
| emissive|| Self-illumination colour, RGB. Default black.&lt;br /&gt;
|-&lt;br /&gt;
| shininess|| Sharpness/size of specular highlights, 0 - 128. Default 100.&lt;br /&gt;
|-&lt;br /&gt;
| opacity|| 0-100, controls transparency of the material. A node with a material opacity less than 100 is treated as transparent, otherwise opaque.&lt;br /&gt;
|-&lt;br /&gt;
| tex_diff || Diffuse texture, file name (in the same folder). If you don't specify this, a white dummy texture is generated.&lt;br /&gt;
|-&lt;br /&gt;
| tex_glow||Self-illumination texture, overrides emissive colour parameter. Default none.&lt;br /&gt;
|-&lt;br /&gt;
| tex_spec||Specular highlight colour/intensity texture. Default none. Multiplied by specular colour parameter, so set it to white to leave control entirely to the texture.&lt;br /&gt;
|-&lt;br /&gt;
| use_patterns||This material will use the pattern/colour system. Read more below.&lt;br /&gt;
|-&lt;br /&gt;
| unlit||No lighting, diffuse value can still be used to tint the result&lt;br /&gt;
|-&lt;br /&gt;
| two_sided||Self-explanatory, however normals on the other side are not automatically inversed (no good way to do this) so the usefulness is limited&lt;br /&gt;
|-&lt;br /&gt;
| alpha_test||Pixels with alpha value &amp;lt; 0.5 are discarded, this is good for fences and such. It produces sharp edges but the geometry does not need to be sorted.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_specularmap.png]]&lt;br /&gt;
Flat specular lighting improved by a specular map&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_glowmap.png]]&lt;br /&gt;
A model lit only by the self-illumination texture&lt;br /&gt;
&lt;br /&gt;
=== Patterns ===&lt;br /&gt;
&lt;br /&gt;
A system to mark customizable color areas on a model without splitting it to separate materials.&lt;br /&gt;
&lt;br /&gt;
Patterns are small grayscale textures placed in the model folder, named pattern*.png. Using gray or white colour you can mark the areas tinted by one of the customizable colours (black marks unaffected areas). The colours are set by the game (faction-specific ship colours, shipyard UI for the player).&lt;br /&gt;
&lt;br /&gt;
The value ranges are: &lt;br /&gt;
* 0-63: not affecting (black)&lt;br /&gt;
* 64-127: first color (dark gray)&lt;br /&gt;
* 128-191: second color (mid gray)&lt;br /&gt;
* 192-255: third color (light gray/white)&lt;br /&gt;
You can set all three channels to these in RGB, or only the L channel in HSL (Hue, Saturation, Level) to get the needed gray.&lt;br /&gt;
&lt;br /&gt;
The alpha channel of the pattern defines it's transparency. It can be used for gradual changes from colored to blank, but not for gradients between different gray ranges. Useful for showing wear on the pattern, or coloring some parts more lightly. Alpha channel can be created by using a layer mask.&lt;br /&gt;
&lt;br /&gt;
Antialiasing (which generates small gradients) can cause artifacts, especially at black-white boundaries. To avoid it, try lowering the contrast on problematic places. Even different grays can be used from the same range, they will indicate the same color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The system has several limitations: it is not meant to do fine details, transitioning from one color to another is sharp and it works best with white/light textures. You'll have to experiment.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_patterns_asp.png]]&lt;br /&gt;
&lt;br /&gt;
== Detail levels ==&lt;br /&gt;
&lt;br /&gt;
Meshes can be grouped into detail levels using the &amp;lt;code&amp;gt;lod pixelsize&amp;lt;/code&amp;gt; directive:&lt;br /&gt;
&lt;br /&gt;
 lod 100&lt;br /&gt;
 mesh hull_low.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 200&lt;br /&gt;
 mesh hull_med.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 1000&lt;br /&gt;
 mesh hull_hi.dae&lt;br /&gt;
 mesh landing_gear.dae&lt;br /&gt;
&lt;br /&gt;
A detail level will be picked if the approximate radius of the model on screen is less than &amp;lt;code&amp;gt;pixelsize&amp;lt;/code&amp;gt; (for the highest level it does not matter as long as it's larger than the others). Use the modelviewer to find optimal sizes.&lt;br /&gt;
&lt;br /&gt;
You may specify any number of detail levels in any order, they will be sorted according to size.&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
&lt;br /&gt;
Position, rotation and scale keyframe animation is supported. Since the Blender 2.6 Collada exporter cannot export multiple animations in one file, you will have to put it all in one timeline and split it at the import stage (this is also the only reliable way to get named animations). An animation is defined after all the meshes in format &amp;lt;code&amp;gt;anim name startframe endframe&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 anim gear_down 0 10&lt;br /&gt;
 anim something_else 12 25&lt;br /&gt;
&lt;br /&gt;
Note, Collada uses seconds instead of frame numbers. For the conversion to work, you should create the animations at '''24FPS'''.&lt;br /&gt;
&lt;br /&gt;
The game will recognize animations by name, the list of supported animations is to be decided.&lt;br /&gt;
&lt;br /&gt;
There is no animation blending, so two animations shouldn't be directly controlling the same node.&lt;br /&gt;
&lt;br /&gt;
== Attachments ==&lt;br /&gt;
&lt;br /&gt;
Models may have special &amp;quot;tag point&amp;quot; nodes where other models may be attached. You may define a tag point in Blender by placing an Empty object and giving it one of the predefined names.&lt;br /&gt;
&lt;br /&gt;
The system is meant for attaching equipment: guns, cargo pods, turrets...&lt;br /&gt;
&lt;br /&gt;
Example: A generic gun model attached to a point &amp;quot;tag_gun_right&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_tagpoints01.png]]&lt;br /&gt;
&lt;br /&gt;
Tag points have not been fully implemented. If you want to use this feature, please content the devs.&lt;br /&gt;
&lt;br /&gt;
=== Tag points ===&lt;br /&gt;
&lt;br /&gt;
As at 29 January 2014.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera_front&amp;lt;br /&amp;gt;tag_camera_rear&amp;lt;br /&amp;gt;tag_camera_left&amp;lt;br /&amp;gt;tag_camera_right&amp;lt;br /&amp;gt;tag_camera_top&amp;lt;br /&amp;gt;tag_camera_bottom&lt;br /&gt;
|| Position and orientation for the six internal view cameras. X &amp;quot;left&amp;quot;, Y &amp;quot;up&amp;quot;, Z &amp;quot;out&amp;quot; of the ship (in the direction the camera is facing). If one is missing, tag_camera will be used with its orientation adjusted for the appropriate direction. Camera tag scaling should be 1 on all three axes to avoid glitches.&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera || Fallback for the specific camera tags. Useful if you don't want to specify all points. Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
| tag_gunmount_N || Gun positions, X &amp;quot;left&amp;quot;, Y &amp;quot;up&amp;quot;, Z &amp;quot;out&amp;quot; of the ship (in the fire direction). Note at this time, only N = 0 or 1 will work, and they correspond to &amp;quot;front&amp;quot; and &amp;quot;rear&amp;quot; guns in the UI. The &amp;quot;max_lasers&amp;quot; ship definition field still takes precedence (ie if max_lasers = 1, tag_gunmount_1 will never be used). Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
| tag_landing || A point at the lowest point of the ship with gear extended. Used during landing to make sure the ship sits at the right place on the surface. Defaults to the lowest point in the ships AABB, which is usually unsuitable because it includes the shield mesh.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Collisions ==&lt;br /&gt;
&lt;br /&gt;
By default, the collision mesh of a model is the bounding box of all the meshes.&lt;br /&gt;
&lt;br /&gt;
For more control, name objects with the prefix &amp;quot;collision_&amp;quot; and they will be added to form a collision mesh (these objects will not be visible geometry, and the bounding box will not be generated).&lt;br /&gt;
&lt;br /&gt;
Note, these names are reserved for station collision trigger surfaces:&lt;br /&gt;
&lt;br /&gt;
* collision_pad1&lt;br /&gt;
* collision_pad2&lt;br /&gt;
* collision_pad3&lt;br /&gt;
* collision_pad4&lt;br /&gt;
&lt;br /&gt;
You can also import a separate mesh using the &amp;lt;code&amp;gt;collision&amp;lt;/code&amp;gt; directive in the model definition:&lt;br /&gt;
&lt;br /&gt;
 collision collision.obj&lt;br /&gt;
&lt;br /&gt;
The collision meshis separate from all detail levels, so it should be only defined once.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_collmesh01.png]]&lt;br /&gt;
&lt;br /&gt;
== Decals ==&lt;br /&gt;
&lt;br /&gt;
Decals are meant for customizable insignia on spaceships and changing advertisements on space stations. Up to four unique decals are available for a model (multiple identical decals are allowed). Place a piece of geometry, usually a flat quad, with proper UV coordinates and name it decal_01, 02, 03 or 04. The game will then use a special material on the geometry, or make it invisible if no decal is to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_decals01.png]]&lt;br /&gt;
&lt;br /&gt;
== Labels ==&lt;br /&gt;
&lt;br /&gt;
Dynamic 3D labels are meant for naming ships and space stations. Put an empty node in the model and give it a name beginning with &amp;quot;label&amp;quot;. The text is set by the game at runtime if supported.&lt;br /&gt;
&lt;br /&gt;
Node scale can be used as usual but the text is not constrained to the node bounds or anything like that, so some trial will be required.&lt;br /&gt;
&lt;br /&gt;
You can use multiple label nodes but they will all show the same text.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_labels01.png]]&lt;br /&gt;
&lt;br /&gt;
== Minor features ==&lt;br /&gt;
&lt;br /&gt;
Note, these special nodes are only imported from the most detailed LOD, there is no need to duplicate them. They are rendered outside the detail level system.&lt;br /&gt;
&lt;br /&gt;
=== Billboard lights ===&lt;br /&gt;
&lt;br /&gt;
Simple light sprites placed using empty nodes with special naming (navlight_*). This feature will be more customizable someday, but for now the following name prefixes are recognized:&lt;br /&gt;
&lt;br /&gt;
* navlight_red: blinking red light, with ships when landing gear is down, with stations constantly&lt;br /&gt;
* navlight_green: blinking green light when landing gear is down&lt;br /&gt;
any other navlight_ is blue, on when landing gear is down.&lt;br /&gt;
* space stations, navlight_pad&amp;lt;number&amp;gt; lights change according to landing pad reservation status&lt;br /&gt;
&lt;br /&gt;
=== Thrusters ===&lt;br /&gt;
&lt;br /&gt;
Thrusters are marked with dummy objects. In Blender, create an &amp;quot;Empty&amp;quot; object and point its Z-axis (change the object display type to &amp;quot;arrows&amp;quot; or &amp;quot;single arrow&amp;quot; to visualize this) where the thruster should point. Thruster size is taken from the object scale. Begin the object name with either &amp;lt;code&amp;gt;thruster_&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;thruster_linear&amp;lt;/code&amp;gt; so the importer can recognize them (linear thrusters light up only when moving up/down/left/right/forward/backward, not when turning).&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
&lt;br /&gt;
You can find some testcase models at git://github.com/Luomu/newmodels.git.&lt;br /&gt;
&lt;br /&gt;
The internal scene graph consists of several of these nodes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Node|| Base class. A node can have a name and one or more parents.&lt;br /&gt;
|-&lt;br /&gt;
| Group|| A group is a Node that can have several children.&lt;br /&gt;
|-&lt;br /&gt;
| MatrixTransform|| A Group that applies a transformation to its child nodes when rendering.&lt;br /&gt;
|-&lt;br /&gt;
| StaticGeometry|| Contains one or more StaticMeshes.&lt;br /&gt;
|-&lt;br /&gt;
| LOD|| Detail level control node, picks one of the child nodes based on the approximate size of the model on screen.&lt;br /&gt;
|-&lt;br /&gt;
| ModelNode || Can be used to attach another Model as a submodel. Use case: dynamic equipment on ships.&lt;br /&gt;
|-&lt;br /&gt;
| More!||Some marginal nodes that exist at the moment are:&lt;br /&gt;
&lt;br /&gt;
* Thruster: spaceship thruster&lt;br /&gt;
* Billboard: can be used for light sprites (navlights on ships)&lt;br /&gt;
* Label3D: dynamic 2d text, meant for labeling ships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MatrixTransform nodes are the most commonly used, if a geometry is rotated or scaled it will be parented to a MatrixTransform. A simple form of instancing can be achieved by adding a geometry as the child of several separate MatrixTransforms.&lt;br /&gt;
&lt;br /&gt;
During rendering, the graph is traversed twice. Once for opaque objects, and once for transparent objects (which includes decals, thrusters). The model system does not perform any depth sorting, this improvement job needs to be done elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
An animation consists of Channels. Each channel controls one node (always a MatrixTransform) and has a list of position and rotation Keys. Each key has a time and value. Keys are always linearly interpolated.&lt;br /&gt;
&lt;br /&gt;
At first the animations had proper play/pause/loop functionality but right now it is not so. Animation progress (and fun things like serialization) needs to be controlled directly by whatever feature uses the animation (see: landing gear).&lt;br /&gt;
&lt;br /&gt;
=== Export settings ===&lt;br /&gt;
&lt;br /&gt;
Collada (.dae) export settings for Blender 2.6:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_exportsettings01.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=2324</id>
		<title>Model system</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=2324"/>
		<updated>2014-01-29T11:39:17Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Tag points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
tl;dr: a simple scenegraph-based approach that has nothing to do with the old system or Lua, focus is on easy importing, supports some animation.&lt;br /&gt;
&lt;br /&gt;
== Importing models ==&lt;br /&gt;
&lt;br /&gt;
The import system theoretically supports [http://assimp.sourceforge.net/main_features_formats.html many different formats] but you are expected to use only some:&lt;br /&gt;
&lt;br /&gt;
* When node structure, node names and animations matter, use '''Collada (.dae).'''&lt;br /&gt;
* For static geometry, such as buildings, OBJ is recommended, this may allow for some optimizations&lt;br /&gt;
&lt;br /&gt;
The only officially tested 3D modelling program at the moment is [http://www.blender.org/ Blender 2.64]. For blender, a quick checklist is:&lt;br /&gt;
&lt;br /&gt;
* Coordinates: X right, Y forward, Z up&lt;br /&gt;
* Always generate UV coordinates for the model&lt;br /&gt;
* Versions downloaded from blender.org support Collada out of the box, while the version distributed with some Linux distros doesn't&lt;br /&gt;
&lt;br /&gt;
The [[Model viewer]] is supplied with the game.&lt;br /&gt;
&lt;br /&gt;
=== Model definition file ===&lt;br /&gt;
&lt;br /&gt;
Models must be placed under '''data/models'''&lt;br /&gt;
&lt;br /&gt;
To define a model, create a simple &amp;lt;code&amp;gt;name_here.model&amp;lt;/code&amp;gt; text file along with your exported meshes:&lt;br /&gt;
&lt;br /&gt;
 #Comments can be written like this&lt;br /&gt;
 #Define all used materials first&lt;br /&gt;
 Material some-material&lt;br /&gt;
 tex_diff some_texture.png&lt;br /&gt;
 diffuse 0.8 0.7 0.7&lt;br /&gt;
 &lt;br /&gt;
 #Meshes to be imported into this model, should be in the current folder&lt;br /&gt;
 #Mixing different formats should be OK&lt;br /&gt;
 mesh part1.obj&lt;br /&gt;
 mesh part2.obj&lt;br /&gt;
&lt;br /&gt;
== Materials ==&lt;br /&gt;
&lt;br /&gt;
Only material names are imported from 3D models, to set material properties use a small definition like this:&lt;br /&gt;
&lt;br /&gt;
 material CobraI_body&lt;br /&gt;
 tex_diff CobraI_diff.png&lt;br /&gt;
 tex_glow CobraI_emit.png&lt;br /&gt;
 tex_spec CobraI_spec.png&lt;br /&gt;
 diffuse 1.0 1.0 1.0&lt;br /&gt;
 specular 1.0 1.0 1.0&lt;br /&gt;
 shininess 150&lt;br /&gt;
&lt;br /&gt;
=== Material properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| material || Name. Mandatory! Note, some exporters modify the names from what is visible in the modeling program, for example the Blender 2.6 Collada exporter adds &amp;quot;-material&amp;quot; to each name. You'll have to use this final name. If in doubt, note that both .obj and .dae files are human readable, and you can find the assigned names in them with a text editor.&lt;br /&gt;
|-&lt;br /&gt;
| diffuse|| Diffuse colour RGB. Default white.&lt;br /&gt;
|-&lt;br /&gt;
| specular|| Colour of specular highlights, RGB. Default white. Set to black to disable highlights.&lt;br /&gt;
|-&lt;br /&gt;
| emissive|| Self-illumination colour, RGB. Default black.&lt;br /&gt;
|-&lt;br /&gt;
| shininess|| Sharpness/size of specular highlights, 0 - 128. Default 100.&lt;br /&gt;
|-&lt;br /&gt;
| opacity|| 0-100, controls transparency of the material. A node with a material opacity less than 100 is treated as transparent, otherwise opaque.&lt;br /&gt;
|-&lt;br /&gt;
| tex_diff || Diffuse texture, file name (in the same folder). If you don't specify this, a white dummy texture is generated.&lt;br /&gt;
|-&lt;br /&gt;
| tex_glow||Self-illumination texture, overrides emissive colour parameter. Default none.&lt;br /&gt;
|-&lt;br /&gt;
| tex_spec||Specular highlight colour/intensity texture. Default none. Multiplied by specular colour parameter, so set it to white to leave control entirely to the texture.&lt;br /&gt;
|-&lt;br /&gt;
| use_patterns||This material will use the pattern/colour system. Read more below.&lt;br /&gt;
|-&lt;br /&gt;
| unlit||No lighting, diffuse value can still be used to tint the result&lt;br /&gt;
|-&lt;br /&gt;
| two_sided||Self-explanatory, however normals on the other side are not automatically inversed (no good way to do this) so the usefulness is limited&lt;br /&gt;
|-&lt;br /&gt;
| alpha_test||Pixels with alpha value &amp;lt; 0.5 are discarded, this is good for fences and such. It produces sharp edges but the geometry does not need to be sorted.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_specularmap.png]]&lt;br /&gt;
Flat specular lighting improved by a specular map&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_glowmap.png]]&lt;br /&gt;
A model lit only by the self-illumination texture&lt;br /&gt;
&lt;br /&gt;
=== Patterns ===&lt;br /&gt;
&lt;br /&gt;
A system to mark customizable color areas on a model without splitting it to separate materials.&lt;br /&gt;
&lt;br /&gt;
Patterns are small grayscale textures placed in the model folder, named pattern*.png. Using gray or white colour you can mark the areas tinted by one of the customizable colours (black marks unaffected areas). The colours are set by the game (faction-specific ship colours, shipyard UI for the player).&lt;br /&gt;
&lt;br /&gt;
The value ranges are: &lt;br /&gt;
* 0-63: not affecting (black)&lt;br /&gt;
* 64-127: first color (dark gray)&lt;br /&gt;
* 128-191: second color (mid gray)&lt;br /&gt;
* 192-255: third color (light gray/white)&lt;br /&gt;
You can set all three channels to these in RGB, or only the L channel in HSL (Hue, Saturation, Level) to get the needed gray.&lt;br /&gt;
&lt;br /&gt;
The alpha channel of the pattern defines it's transparency. It can be used for gradual changes from colored to blank, but not for gradients between different gray ranges. Useful for showing wear on the pattern, or coloring some parts more lightly. Alpha channel can be created by using a layer mask.&lt;br /&gt;
&lt;br /&gt;
Antialiasing (which generates small gradients) can cause artifacts, especially at black-white boundaries. To avoid it, try lowering the contrast on problematic places. Even different grays can be used from the same range, they will indicate the same color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The system has several limitations: it is not meant to do fine details, transitioning from one color to another is sharp and it works best with white/light textures. You'll have to experiment.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_patterns_asp.png]]&lt;br /&gt;
&lt;br /&gt;
== Detail levels ==&lt;br /&gt;
&lt;br /&gt;
Meshes can be grouped into detail levels using the &amp;lt;code&amp;gt;lod pixelsize&amp;lt;/code&amp;gt; directive:&lt;br /&gt;
&lt;br /&gt;
 lod 100&lt;br /&gt;
 mesh hull_low.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 200&lt;br /&gt;
 mesh hull_med.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 1000&lt;br /&gt;
 mesh hull_hi.dae&lt;br /&gt;
 mesh landing_gear.dae&lt;br /&gt;
&lt;br /&gt;
A detail level will be picked if the approximate radius of the model on screen is less than &amp;lt;code&amp;gt;pixelsize&amp;lt;/code&amp;gt; (for the highest level it does not matter as long as it's larger than the others). Use the modelviewer to find optimal sizes.&lt;br /&gt;
&lt;br /&gt;
You may specify any number of detail levels in any order, they will be sorted according to size.&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
&lt;br /&gt;
Position, rotation and scale keyframe animation is supported. Since the Blender 2.6 Collada exporter cannot export multiple animations in one file, you will have to put it all in one timeline and split it at the import stage (this is also the only reliable way to get named animations). An animation is defined after all the meshes in format &amp;lt;code&amp;gt;anim name startframe endframe&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 anim gear_down 0 10&lt;br /&gt;
 anim something_else 12 25&lt;br /&gt;
&lt;br /&gt;
Note, Collada uses seconds instead of frame numbers. For the conversion to work, you should create the animations at '''24FPS'''.&lt;br /&gt;
&lt;br /&gt;
The game will recognize animations by name, the list of supported animations is to be decided.&lt;br /&gt;
&lt;br /&gt;
There is no animation blending, so two animations shouldn't be directly controlling the same node.&lt;br /&gt;
&lt;br /&gt;
== Attachments ==&lt;br /&gt;
&lt;br /&gt;
Models may have special &amp;quot;tag point&amp;quot; nodes where other models may be attached. You may define a tag point in Blender by placing an Empty object and giving it one of the predefined names.&lt;br /&gt;
&lt;br /&gt;
The system is meant for attaching equipment: guns, cargo pods, turrets...&lt;br /&gt;
&lt;br /&gt;
Example: A generic gun model attached to a point &amp;quot;tag_gun_right&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_tagpoints01.png]]&lt;br /&gt;
&lt;br /&gt;
Tag points have not been fully implemented. If you want to use this feature, please content the devs.&lt;br /&gt;
&lt;br /&gt;
=== Tag points ===&lt;br /&gt;
&lt;br /&gt;
As at 23 September 2013.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera_front&amp;lt;br /&amp;gt;tag_camera_rear&amp;lt;br /&amp;gt;tag_camera_left&amp;lt;br /&amp;gt;tag_camera_right&amp;lt;br /&amp;gt;tag_camera_top&amp;lt;br /&amp;gt;tag_camera_bottom&lt;br /&gt;
|| Position and orientation for the six internal view cameras. X &amp;quot;left&amp;quot;, Y &amp;quot;up&amp;quot;, Z &amp;quot;out&amp;quot; of the ship (in the direction the camera is facing). If one is missing, tag_camera will be used with its orientation adjusted for the appropriate direction. Camera tag scaling should be 1 on all three axes to avoid glitches.&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera || Fallback for the specific camera tags. Useful if you don't want to specify all points. Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
| tag_gunmount_N || Gun positions, X &amp;quot;left&amp;quot;, Y &amp;quot;up&amp;quot;, Z &amp;quot;out&amp;quot; of the ship (in the fire direction). Note at this time, only N = 0 or 1 will work, and they correspond to &amp;quot;front&amp;quot; and &amp;quot;rear&amp;quot; guns in the UI. The &amp;quot;max_lasers&amp;quot; ship definition field still takes precedence (ie if max_lasers = 1, tag_gunmount_1 will never be used). Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
| tag_landing || A point at the lowest point of the ship with gear extended. Used during landing to make sure the ship sits at the right place on the surface. Defaults to the lowest point in the ships AABB, which is usually unsuitable because it includes the shield mesh.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Collisions ==&lt;br /&gt;
&lt;br /&gt;
By default, the collision mesh of a model is the bounding box of all the meshes.&lt;br /&gt;
&lt;br /&gt;
For more control, name objects with the prefix &amp;quot;collision_&amp;quot; and they will be added to form a collision mesh (these objects will not be visible geometry, and the bounding box will not be generated).&lt;br /&gt;
&lt;br /&gt;
Note, these names are reserved for station collision trigger surfaces:&lt;br /&gt;
&lt;br /&gt;
* collision_pad1&lt;br /&gt;
* collision_pad2&lt;br /&gt;
* collision_pad3&lt;br /&gt;
* collision_pad4&lt;br /&gt;
&lt;br /&gt;
You can also import a separate mesh using the &amp;lt;code&amp;gt;collision&amp;lt;/code&amp;gt; directive in the model definition:&lt;br /&gt;
&lt;br /&gt;
 collision collision.obj&lt;br /&gt;
&lt;br /&gt;
The collision meshis separate from all detail levels, so it should be only defined once.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_collmesh01.png]]&lt;br /&gt;
&lt;br /&gt;
== Decals ==&lt;br /&gt;
&lt;br /&gt;
Decals are meant for customizable insignia on spaceships and changing advertisements on space stations. Up to four unique decals are available for a model (multiple identical decals are allowed). Place a piece of geometry, usually a flat quad, with proper UV coordinates and name it decal_01, 02, 03 or 04. The game will then use a special material on the geometry, or make it invisible if no decal is to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_decals01.png]]&lt;br /&gt;
&lt;br /&gt;
== Labels ==&lt;br /&gt;
&lt;br /&gt;
Dynamic 3D labels are meant for naming ships and space stations. Put an empty node in the model and give it a name beginning with &amp;quot;label&amp;quot;. The text is set by the game at runtime if supported.&lt;br /&gt;
&lt;br /&gt;
Node scale can be used as usual but the text is not constrained to the node bounds or anything like that, so some trial will be required.&lt;br /&gt;
&lt;br /&gt;
You can use multiple label nodes but they will all show the same text.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_labels01.png]]&lt;br /&gt;
&lt;br /&gt;
== Minor features ==&lt;br /&gt;
&lt;br /&gt;
Note, these special nodes are only imported from the most detailed LOD, there is no need to duplicate them. They are rendered outside the detail level system.&lt;br /&gt;
&lt;br /&gt;
=== Billboard lights ===&lt;br /&gt;
&lt;br /&gt;
Simple light sprites placed using empty nodes with special naming (navlight_*). This feature will be more customizable someday, but for now the following name prefixes are recognized:&lt;br /&gt;
&lt;br /&gt;
* navlight_red: blinking red light, with ships when landing gear is down, with stations constantly&lt;br /&gt;
* navlight_green: blinking green light when landing gear is down&lt;br /&gt;
any other navlight_ is blue, on when landing gear is down.&lt;br /&gt;
* space stations, navlight_pad&amp;lt;number&amp;gt; lights change according to landing pad reservation status&lt;br /&gt;
&lt;br /&gt;
=== Thrusters ===&lt;br /&gt;
&lt;br /&gt;
Thrusters are marked with dummy objects. In Blender, create an &amp;quot;Empty&amp;quot; object and point its Z-axis (change the object display type to &amp;quot;arrows&amp;quot; or &amp;quot;single arrow&amp;quot; to visualize this) where the thruster should point. Thruster size is taken from the object scale. Begin the object name with either &amp;lt;code&amp;gt;thruster_&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;thruster_linear&amp;lt;/code&amp;gt; so the importer can recognize them (linear thrusters light up only when moving up/down/left/right/forward/backward, not when turning).&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
&lt;br /&gt;
You can find some testcase models at git://github.com/Luomu/newmodels.git.&lt;br /&gt;
&lt;br /&gt;
The internal scene graph consists of several of these nodes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Node|| Base class. A node can have a name and one or more parents.&lt;br /&gt;
|-&lt;br /&gt;
| Group|| A group is a Node that can have several children.&lt;br /&gt;
|-&lt;br /&gt;
| MatrixTransform|| A Group that applies a transformation to its child nodes when rendering.&lt;br /&gt;
|-&lt;br /&gt;
| StaticGeometry|| Contains one or more StaticMeshes.&lt;br /&gt;
|-&lt;br /&gt;
| LOD|| Detail level control node, picks one of the child nodes based on the approximate size of the model on screen.&lt;br /&gt;
|-&lt;br /&gt;
| ModelNode || Can be used to attach another Model as a submodel. Use case: dynamic equipment on ships.&lt;br /&gt;
|-&lt;br /&gt;
| More!||Some marginal nodes that exist at the moment are:&lt;br /&gt;
&lt;br /&gt;
* Thruster: spaceship thruster&lt;br /&gt;
* Billboard: can be used for light sprites (navlights on ships)&lt;br /&gt;
* Label3D: dynamic 2d text, meant for labeling ships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MatrixTransform nodes are the most commonly used, if a geometry is rotated or scaled it will be parented to a MatrixTransform. A simple form of instancing can be achieved by adding a geometry as the child of several separate MatrixTransforms.&lt;br /&gt;
&lt;br /&gt;
During rendering, the graph is traversed twice. Once for opaque objects, and once for transparent objects (which includes decals, thrusters). The model system does not perform any depth sorting, this improvement job needs to be done elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
An animation consists of Channels. Each channel controls one node (always a MatrixTransform) and has a list of position and rotation Keys. Each key has a time and value. Keys are always linearly interpolated.&lt;br /&gt;
&lt;br /&gt;
At first the animations had proper play/pause/loop functionality but right now it is not so. Animation progress (and fun things like serialization) needs to be controlled directly by whatever feature uses the animation (see: landing gear).&lt;br /&gt;
&lt;br /&gt;
=== Export settings ===&lt;br /&gt;
&lt;br /&gt;
Collada (.dae) export settings for Blender 2.6:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_exportsettings01.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=2321</id>
		<title>Code style</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=2321"/>
		<updated>2014-01-21T02:54:43Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Licensing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes some of the code style used in Pioneer. Its probably incomplete, but it should be correct. If you see something in the code that doesn't match what's described here, this guide takes precedence (and please submit a patch to fix it!)&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
Engine and Lua code is [http://www.gnu.org/licenses/gpl.html GPL 3]. Assets (include Lua-based data files like ship defs) are [http://creativecommons.org/licenses/by-sa/3.0/ CC-BY-SA 3]&lt;br /&gt;
&lt;br /&gt;
Include these two lines at the top of each file (suitably commented):&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2014 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of the GPL v3. See licenses/GPL-3.txt&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2014 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of CC-BY-SA 3.0. See licenses/CC-BY-SA-3.0.txt&lt;br /&gt;
&lt;br /&gt;
== Tabs &amp;amp; spacing ==&lt;br /&gt;
&lt;br /&gt;
* Hard tabs, 4-space aligned.&lt;br /&gt;
* Inner spaces after tabs to align arguments on multiple lines, etc&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
* Prefer &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt; over &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; wherever possible&lt;br /&gt;
&lt;br /&gt;
== Name style ==&lt;br /&gt;
&lt;br /&gt;
* Classes: FooBar&lt;br /&gt;
* Methods: FooBar&lt;br /&gt;
* Class members: m_fooBar&lt;br /&gt;
* Static members: s_fooBar&lt;br /&gt;
* Constants (defines and &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt;): FOO_BAR&lt;br /&gt;
&lt;br /&gt;
Names should generally be chosen for what the thing represents. It shouldn't have type or qualifier information embedded in the name (the so-called [http://en.wikipedia.org/wiki/Hungarian_notation Systems Hungarian] notation). Just name it so its crystal clear what it is.&lt;br /&gt;
&lt;br /&gt;
(Exception: member variables have a &amp;lt;tt&amp;gt;m_&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;s_&amp;lt;/tt&amp;gt; to disambiguate them from local names and to match C++ conventions).&lt;br /&gt;
&lt;br /&gt;
There's also a few abbreviated names that are commonly used throughout the codebase, eg &amp;lt;tt&amp;gt;Renderer *r&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;lua_State *l&amp;lt;/tt&amp;gt;, etc. Try to prefer them where appropriate.&lt;br /&gt;
&lt;br /&gt;
== Include guards ==&lt;br /&gt;
&lt;br /&gt;
Header include guards should be named for the filename of the header, capitalised, with slashes converted to underscores:&lt;br /&gt;
&lt;br /&gt;
* Ship.h&lt;br /&gt;
    #ifndef SHIP_H&lt;br /&gt;
&lt;br /&gt;
* WorldView.h&lt;br /&gt;
    #ifndef WORLDVIEW_H&lt;br /&gt;
&lt;br /&gt;
* graphics/Renderer.h&lt;br /&gt;
    #ifndef GRAPHICS_RENDERER_H&lt;br /&gt;
&lt;br /&gt;
== Enum types ==&lt;br /&gt;
&lt;br /&gt;
Enums are effectively global constants, so should be in full caps. They're prefixed with the name of the enum.&lt;br /&gt;
&lt;br /&gt;
Avoid assigning explicit integer values. Also avoid values that aren't actually valid for whatever the enum is (though *_MAX to mark the last valid value is usually acceptable). If these don't work, chances are what you're trying to do would be better served by multiple enums or even a whole class.&lt;br /&gt;
&lt;br /&gt;
    enum Thing {&lt;br /&gt;
        THING_FOO,&lt;br /&gt;
        THING_BAR,&lt;br /&gt;
        THING_BAZ,&lt;br /&gt;
        &lt;br /&gt;
        THING_MAX&lt;br /&gt;
    };&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2287</id>
		<title>Code review</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2287"/>
		<updated>2014-01-15T12:24:44Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why do code review? ==&lt;br /&gt;
&lt;br /&gt;
Code review is simply getting someone to check your code before you it gets included in the Pioneer code proper to make sure that the code is of a good quality, is consistent with the rest of the codebase and takes Pioneer in the direction that the community wants it to go.&lt;br /&gt;
&lt;br /&gt;
== When does it happen? ==&lt;br /&gt;
&lt;br /&gt;
Code review can happen at any time, whenever you like. For small items of work it will get at least one review when it is submitted for inclusion (via a pull request). For a large development you may wish to find to someone to review your code periodically, to make sure you're on the right track. If you're starting to feel a bit unsure about what you're doing, that's probably a good time to ask someone!&lt;br /&gt;
&lt;br /&gt;
You don't have to do this of course, but be aware that the reviewers don't particularly being asked to review hundreds or thousands of lines of code changes that appear out of nowhere. You face a good chance of having your code rejected outright or ignored completely, and that sucks. So if you're going to do something massive, at least check in at the start to make sure someone knows about it.&lt;br /&gt;
&lt;br /&gt;
== Who can review code? ==&lt;br /&gt;
&lt;br /&gt;
Anyone that wants to! Anyone can use the review tools on Github to read and comment on code while its under development or test pull requests.&lt;br /&gt;
&lt;br /&gt;
In the case of a pull request, someone with commit access needs to do the final sign-off (typically, but not necessarily, at the same time as merging).  If you don't have commit access you can still help make life easier for that person by leaving comments and working with the original submitter.&lt;br /&gt;
&lt;br /&gt;
== I have commit access, does my code need to be reviewed? ==&lt;br /&gt;
&lt;br /&gt;
No, you have commit access for a reason - you've proven that you can be trusted to be a good steward for the project. You should feel free to change whatever you want or need to, but as you do you should be considering all the points normally covered by a review. Self-review, if you like.&lt;br /&gt;
&lt;br /&gt;
That said, no person is an island. Be sure to ask for help if you need it, even if its just a feeling that something isn't right.&lt;br /&gt;
&lt;br /&gt;
== What gets reviewed? ==&lt;br /&gt;
&lt;br /&gt;
Every single change is a candidate for review, no matter how small. Most review will happen in a pull request, but you can be reviewing code by reading the commit history or even by reading code as you're working on it.&lt;br /&gt;
&lt;br /&gt;
Here are some good things to look out for:&lt;br /&gt;
&lt;br /&gt;
* Bugs, logical errors, mathematical errors, typos (any simple, isolated code error). These are easy. If you find a bug during testing or by looking at the code, either fix it or tell the submitter to fix it. It's easy because everyone agrees that bugs need to be fixed.&lt;br /&gt;
&lt;br /&gt;
* Uncertainty about some code logic or behaviour (&amp;quot;Is this maths right?&amp;quot; &amp;quot;Did the submitter intend this weird behaviour?&amp;quot;). These are easy: Ask the submitter (obviously). Explanatory comments are usually the &amp;quot;fix&amp;quot; here.&lt;br /&gt;
&lt;br /&gt;
* Code style errors (braces, whitespace, naming conventions, etc). Same as bugs: fix it, or tell the submitter fix it. Not everyone agrees about the importance of code style, or perhaps even what style we should be using (particularly since the existing codebase is not totally consistent), but we have a [[Code_style|code style guide]] and we want everything to conform to it. If there is some aspect of style not covered by the code style guide on the wiki, amend the guide and tell the submitter to fix their style. Yes, style is subjective, and it's not the submitter's fault that they didn't use the &amp;quot;correct&amp;quot; style, since it may not have been clear what was the &amp;quot;correct&amp;quot; style when they made the PR, but its not worth arguing about - the time and energy to discuss it costs more than just fixing the code.&lt;br /&gt;
&lt;br /&gt;
* Messy git history. Fix it or ignore it. The trouble with telling the submitter to fix it is that many of our contributors don't have enough confidence wth git to do it right and the ones that do tend not to submit messy histories in the first place. So its not worth arguing about.  Just do the best you can to keep your own history tidy, but if its not working out don't stress too much about. If you really need help, talk to someone that can drive Git well; they can help you out.&lt;br /&gt;
&lt;br /&gt;
* Game design uncertainty (&amp;quot;Do we want this feature?&amp;quot;, &amp;quot;Do we want it to behave this way?&amp;quot;). For the most part you should choose what you think is best. You should be paying attention to what the other developers and the players are asking for and be aware of what other developments are happening, and from there be able to make a reasonable decision. If you don't know, ask someone who does. But remember that you should not reject an idea simply because you prefer it a different way. Of course your opinion matters, but try to balance everyone's needs as much as possible. (This is hard. Please ask for help).&lt;br /&gt;
&lt;br /&gt;
* Code structure problems (&amp;quot;We want the feature, but not implemented like this&amp;quot;). Structural problems can take a significant effort to fix and they make future code maintenance harder. They're the ones that often end up needing to be ripped out or rewritten later. The difficulty is that its often a ridiculous amount of effort to do something the &amp;quot;right&amp;quot; way, especially if it relates to a very old piece of code. The rule of thumb then is to permit mess if its necessary, but do the best you can to keep it contained. Remember that you're now adding to the cleanup work that someone else will have to do in the future.&lt;br /&gt;
&lt;br /&gt;
== Merging looks hard, do I have to? ==&lt;br /&gt;
&lt;br /&gt;
No. You can still review code without having to do the merge yourself. If you're not confident enough with git to do the merge properly, please ask someone who can. Mention that your code review is done and you're happy with it and they will merge it without any fuss.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Commit_access&amp;diff=2286</id>
		<title>Commit access</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Commit_access&amp;diff=2286"/>
		<updated>2014-01-15T12:22:43Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is commit access? ==&lt;br /&gt;
&lt;br /&gt;
Having commit access means you have the ability to push code directly to the main Pioneer repository.&lt;br /&gt;
&lt;br /&gt;
== How do I get commit access? ==&lt;br /&gt;
&lt;br /&gt;
Usually, just by asking. If you're known to the other committers to be someone who can be trusted to be a good steward of the project (usually shown by the quality of previous contributions) then you'll be given access to push to the repository. This is deliberately a subjective measure, but rest assured, the bar is set pretty low. Its mostly just a check to make sure you aren't going to do something stupid.&lt;br /&gt;
&lt;br /&gt;
In some circumstances you might be offered commit access. The same bar is set there. It usually happens when the other committers finds themselves thinking &amp;quot;this person would be a good committer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== What do I need to know when pushing? ==&lt;br /&gt;
&lt;br /&gt;
There's a few things that are special to the way we work that you need to know about.&lt;br /&gt;
&lt;br /&gt;
=== Code style ===&lt;br /&gt;
&lt;br /&gt;
We have a [[Code_style|code style guide]]. Learn it, love it. There's almost certainly something in there you'll hate, because we all have different opions on code style. Don't argue, just use it - its what we've got!&lt;br /&gt;
&lt;br /&gt;
=== Code review ===&lt;br /&gt;
&lt;br /&gt;
Read the page about the [[Code_review|code review process]]. You're expected to be reviewing your own code according to the guildlines set out there, and you're encouraged to find another person to review your code if its particularly large or complex. Read that page for more info about that.&lt;br /&gt;
&lt;br /&gt;
There is no obligation for commiters to review other people's work, but it would be very helpful if you could. If everyone is involved, then the total workload on any individual remains small, giving everyone time to work on their code.&lt;br /&gt;
&lt;br /&gt;
=== Update the changelog ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/pioneerspacesim/pioneer/blob/master/Changelog.txt Changelog.txt] is where we track the history of the project. Each time you make a change, add a brief description of it to the Changelog. Include the Github issue or pull request number if it has one. The description should be something that is understandable by players. Choose an appropriate category, start a new month header at the start of the month, and preserve the existing formatting. Have a look through the history to get a feel for how it works.&lt;br /&gt;
&lt;br /&gt;
=== Don't break the build ===&lt;br /&gt;
&lt;br /&gt;
Pioneer is regularly built by an autobuild script, sometimes as often as once per day. This is done using the Makefile/autotools system (all platforms). You must take care to ensure that everything that lands on the master branch builds correctly with the autotools/GCC build. This could be a problem for Windows-based developers using MSVC; please do the best you can and ask for help if you need it.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2285</id>
		<title>Development team</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2285"/>
		<updated>2014-01-15T12:17:18Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* AUTHORS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists a few of the people that work on Pioneer, and their roles. If you need help with with a particular part of the game, or code or asset development, you should be able to find the right person here.&lt;br /&gt;
&lt;br /&gt;
== Who's who? ==&lt;br /&gt;
&lt;br /&gt;
Some of our people, and what they know about. These aren't necessarily owners of these areas, but they definitely know lots about it and you should talk to them before you start.&lt;br /&gt;
&lt;br /&gt;
* Robert Norris (robn): all of the code, project admin, website, everything&lt;br /&gt;
* John Bartholomew (jpab): all of the code, project admin, everything&lt;br /&gt;
&lt;br /&gt;
Add your name and details if you consider yourself an expert in one or more areas and you'd like to make yourself available.&lt;br /&gt;
&lt;br /&gt;
== Project admin ==&lt;br /&gt;
&lt;br /&gt;
There's a bunch of administrative stuff that needs to be done in a project like this. Things like looking after the repository and commit rights, the build machines, various support services (eg Transifex), managing the money, paying for domain registration and hosting, that sort of thing. That's handled quietly by robn and jpab. Yell at one of us if you have any questions.&lt;br /&gt;
&lt;br /&gt;
== AUTHORS ==&lt;br /&gt;
&lt;br /&gt;
We list everyone that has ever contributed to the project (even a single-character tweak) in the [https://github.com/pioneerspacesim/pioneer/blob/master/AUTHORS.txt AUTHORS.txt] file.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2284</id>
		<title>Development team</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2284"/>
		<updated>2014-01-15T12:16:51Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* AUTHORS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists a few of the people that work on Pioneer, and their roles. If you need help with with a particular part of the game, or code or asset development, you should be able to find the right person here.&lt;br /&gt;
&lt;br /&gt;
== Who's who? ==&lt;br /&gt;
&lt;br /&gt;
Some of our people, and what they know about. These aren't necessarily owners of these areas, but they definitely know lots about it and you should talk to them before you start.&lt;br /&gt;
&lt;br /&gt;
* Robert Norris (robn): all of the code, project admin, website, everything&lt;br /&gt;
* John Bartholomew (jpab): all of the code, project admin, everything&lt;br /&gt;
&lt;br /&gt;
Add your name and details if you consider yourself an expert in one or more areas and you'd like to make yourself available.&lt;br /&gt;
&lt;br /&gt;
== Project admin ==&lt;br /&gt;
&lt;br /&gt;
There's a bunch of administrative stuff that needs to be done in a project like this. Things like looking after the repository and commit rights, the build machines, various support services (eg Transifex), managing the money, paying for domain registration and hosting, that sort of thing. That's handled quietly by robn and jpab. Yell at one of us if you have any questions.&lt;br /&gt;
&lt;br /&gt;
== AUTHORS ==&lt;br /&gt;
&lt;br /&gt;
We list everyone that has ever contributed to the project (even a single-character tweak) in the [][[https://github.com/pioneerspacesim/pioneer/blob/master/AUTHORS.txt AUTHORS.txt]] file.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2283</id>
		<title>Development team</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2283"/>
		<updated>2014-01-15T12:16:27Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* AUTHORS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists a few of the people that work on Pioneer, and their roles. If you need help with with a particular part of the game, or code or asset development, you should be able to find the right person here.&lt;br /&gt;
&lt;br /&gt;
== Who's who? ==&lt;br /&gt;
&lt;br /&gt;
Some of our people, and what they know about. These aren't necessarily owners of these areas, but they definitely know lots about it and you should talk to them before you start.&lt;br /&gt;
&lt;br /&gt;
* Robert Norris (robn): all of the code, project admin, website, everything&lt;br /&gt;
* John Bartholomew (jpab): all of the code, project admin, everything&lt;br /&gt;
&lt;br /&gt;
Add your name and details if you consider yourself an expert in one or more areas and you'd like to make yourself available.&lt;br /&gt;
&lt;br /&gt;
== Project admin ==&lt;br /&gt;
&lt;br /&gt;
There's a bunch of administrative stuff that needs to be done in a project like this. Things like looking after the repository and commit rights, the build machines, various support services (eg Transifex), managing the money, paying for domain registration and hosting, that sort of thing. That's handled quietly by robn and jpab. Yell at one of us if you have any questions.&lt;br /&gt;
&lt;br /&gt;
== AUTHORS ==&lt;br /&gt;
&lt;br /&gt;
We list everyone that has ever contributed to the project (even a single-character tweak) in the [https://github.com/pioneerspacesim/pioneer/blob/master/AUTHORS.txt|AUTHORS.txt] file.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2282</id>
		<title>Development team</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2282"/>
		<updated>2014-01-15T12:16:05Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* AUTHORS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists a few of the people that work on Pioneer, and their roles. If you need help with with a particular part of the game, or code or asset development, you should be able to find the right person here.&lt;br /&gt;
&lt;br /&gt;
== Who's who? ==&lt;br /&gt;
&lt;br /&gt;
Some of our people, and what they know about. These aren't necessarily owners of these areas, but they definitely know lots about it and you should talk to them before you start.&lt;br /&gt;
&lt;br /&gt;
* Robert Norris (robn): all of the code, project admin, website, everything&lt;br /&gt;
* John Bartholomew (jpab): all of the code, project admin, everything&lt;br /&gt;
&lt;br /&gt;
Add your name and details if you consider yourself an expert in one or more areas and you'd like to make yourself available.&lt;br /&gt;
&lt;br /&gt;
== Project admin ==&lt;br /&gt;
&lt;br /&gt;
There's a bunch of administrative stuff that needs to be done in a project like this. Things like looking after the repository and commit rights, the build machines, various support services (eg Transifex), managing the money, paying for domain registration and hosting, that sort of thing. That's handled quietly by robn and jpab. Yell at one of us if you have any questions.&lt;br /&gt;
&lt;br /&gt;
== AUTHORS ==&lt;br /&gt;
&lt;br /&gt;
We list everyone that has ever contributed to the project (even a single-character tweak) in the [[https://github.com/pioneerspacesim/pioneer/blob/master/AUTHORS.txt|AUTHORS.txt]] file.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2281</id>
		<title>Development team</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Development_team&amp;diff=2281"/>
		<updated>2014-01-15T12:14:41Z</updated>

		<summary type="html">&lt;p&gt;RobN: Created page with &amp;quot;This page lists a few of the people that work on Pioneer, and their roles. If you need help with with a particular part of the game, or code or asset development, you should b...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists a few of the people that work on Pioneer, and their roles. If you need help with with a particular part of the game, or code or asset development, you should be able to find the right person here.&lt;br /&gt;
&lt;br /&gt;
== Who's who? ==&lt;br /&gt;
&lt;br /&gt;
Some of our people, and what they know about. These aren't necessarily owners of these areas, but they definitely know lots about it and you should talk to them before you start.&lt;br /&gt;
&lt;br /&gt;
* Robert Norris (robn): all of the code, project admin, website, everything&lt;br /&gt;
* John Bartholomew (jpab): all of the code, project admin, everything&lt;br /&gt;
&lt;br /&gt;
Add your name and details if you consider yourself an expert in one or more areas and you'd like to make yourself available.&lt;br /&gt;
&lt;br /&gt;
== Project admin ==&lt;br /&gt;
&lt;br /&gt;
There's a bunch of administrative stuff that needs to be done in a project like this. Things like looking after the repository and commit rights, the build machines, various support services (eg Transifex), managing the money, paying for domain registration and hosting, that sort of thing. That's handled quietly by robn and jpab. Yell at one of us if you have any questions.&lt;br /&gt;
&lt;br /&gt;
== AUTHORS ==&lt;br /&gt;
&lt;br /&gt;
We list everyone that has ever contributed to the project (even a single-character tweak) in the [[AUTHORS.txt|https://github.com/pioneerspacesim/pioneer/blob/master/AUTHORS.txt]] file.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Commit_access&amp;diff=2277</id>
		<title>Commit access</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Commit_access&amp;diff=2277"/>
		<updated>2014-01-15T11:58:16Z</updated>

		<summary type="html">&lt;p&gt;RobN: Created page with &amp;quot;== What is commit access? ==  Having commit access means you have the ability to push code directly to the main Pioneer repository.  Its expected that anyone with commit acces...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is commit access? ==&lt;br /&gt;
&lt;br /&gt;
Having commit access means you have the ability to push code directly to the main Pioneer repository.&lt;br /&gt;
&lt;br /&gt;
Its expected that anyone with commit access is trusted and responsible. As such, committers don't need to formally go through the [[Code_review|code review process]] (though you should still be thinking about it; there's some good ideas in there).&lt;br /&gt;
&lt;br /&gt;
== How do I get commit access? ==&lt;br /&gt;
&lt;br /&gt;
Usually, just by asking. If you're known to the other committers to be someone who can be trusted to be a good steward of the project (usually shown by the quality of previous contributions) then you'll be given access to push to the repository. This is deliberately a subjective measure, but rest assured, the bar is set pretty low. Its mostly just a check to make sure you aren't going to do something stupid.&lt;br /&gt;
&lt;br /&gt;
In some circumstances you might be offered commit access. The same bar is set there. It usually happens when the other committers finds themselves thinking &amp;quot;this person would be a good committer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== What do I need to know when pushing? ==&lt;br /&gt;
&lt;br /&gt;
There's a few things that are special to the way we work that you need to know about.&lt;br /&gt;
&lt;br /&gt;
=== Code style ===&lt;br /&gt;
&lt;br /&gt;
We have a [[Code_style|code style guide]]. Learn it, love it. There's almost certainly something in there you'll hate, because we all have different opions on code style. Don't argue, just use it - its what we've got!&lt;br /&gt;
&lt;br /&gt;
=== Code review ===&lt;br /&gt;
&lt;br /&gt;
Read the page about the [[Code_review|code review process]]. As a committer it doesn't directly apply to you, but there's good information about the types of problems that you should be looking for in your code before you push it.&lt;br /&gt;
&lt;br /&gt;
=== Update the changelog ===&lt;br /&gt;
&lt;br /&gt;
Changelog.txt is where we track the history of the project. Each time you make a change, add a brief description of it to the Changelog. Include the Github issue or pull request number if it has one. The description should be something that is understandable by players. Choose an appropriate category, start a new month header at the start of the month, and preserve the existing formatting. Have a look through the history to get a feel for how it works.&lt;br /&gt;
&lt;br /&gt;
=== Don't break the build ===&lt;br /&gt;
&lt;br /&gt;
Pioneer is regularly built by an autobuild script, sometimes as often as once per day. This is done using the Makefile/autotools system (all platforms). You must take care to ensure that everything that lands on the master branch builds correctly with the autotools/GCC build. This could be a problem for Windows-based developers using GCC; please do the best you can and ask for help if you need it.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2276</id>
		<title>Code review</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2276"/>
		<updated>2014-01-15T11:37:17Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* What gets reviewed? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why do code review? ==&lt;br /&gt;
&lt;br /&gt;
Code review is simply getting someone to check your code before you it gets included in the Pioneer code proper to make sure that the code is of a good quality, is consistent with the rest of the codebase and takes Pioneer in the direction that the community wants it to go.&lt;br /&gt;
&lt;br /&gt;
== When does it happen? ==&lt;br /&gt;
&lt;br /&gt;
Code review can happen at any time, whenever you like. For small items of work it will get at least one review when it is submitted for inclusion (via a pull request). For a large development you may wish to find to someone to review your code periodically, to make sure you're on the right track. If you're starting to feel a bit unsure about what you're doing, that's probably a good time to ask someone!&lt;br /&gt;
&lt;br /&gt;
You don't have to do this of course, but be aware that the reviewers don't particularly being asked to review hundreds or thousands of lines of code changes that appear out of nowhere. You face a good chance of having your code rejected outright or ignored completely, and that sucks. So if you're going to do something massive, at least check in at the start to make sure someone knows about it.&lt;br /&gt;
&lt;br /&gt;
== Who can review code? ==&lt;br /&gt;
&lt;br /&gt;
Anyone that wants to! Anyone can use the review tools on Github to read and comment on code while its under development or test pull requests.&lt;br /&gt;
&lt;br /&gt;
In the case of a pull request, someone with commit access needs to do the final sign-off (typically, but not necessarily, at the same time as merging).  If you don't have commit access you can still help make life easier for that person by leaving comments and working with the original submitter.&lt;br /&gt;
&lt;br /&gt;
== I have commit access, does my code need to be reviewed? ==&lt;br /&gt;
&lt;br /&gt;
No, you have commit access for a reason - you've proven that you can be trusted to be a good steward for the project. You should feel free to change whatever you want or need to, but as you do you should be considering all the points normally covered by a review. Self-review, if you like.&lt;br /&gt;
&lt;br /&gt;
That said, no person is an island. Be sure to ask for help if you need it, even if its just a feeling that something isn't right.&lt;br /&gt;
&lt;br /&gt;
== What gets reviewed? ==&lt;br /&gt;
&lt;br /&gt;
Every single change is a candidate for review, no matter how small. Most review will happen in a pull request, but you can be reviewing code by reading the commit history or even by reading code as you're working on it.&lt;br /&gt;
&lt;br /&gt;
Here are some good things to look out for:&lt;br /&gt;
&lt;br /&gt;
* Bugs, logical errors, mathematical errors, typos (any simple, isolated code error). These are easy. If you find a bug during testing or by looking at the code, either fix it or tell the submitter to fix it. It's easy because everyone agrees that bugs need to be fixed.&lt;br /&gt;
&lt;br /&gt;
* Uncertainty about some code logic or behaviour (&amp;quot;Is this maths right?&amp;quot; &amp;quot;Did the submitter intend this weird behaviour?&amp;quot;). These are easy: Ask the submitter (obviously). Explanatory comments are usually the &amp;quot;fix&amp;quot; here.&lt;br /&gt;
&lt;br /&gt;
* Code style errors (braces, whitespace, naming conventions, etc). Same as bugs: fix it, or tell the submitter fix it. Not everyone agrees about the importance of code style, or perhaps even what style we should be using (particularly since the existing codebase is not totally consistent), but we have a [[Code_style|code style guide]] and we want everything to conform to it. If there is some aspect of style not covered by the code style guide on the wiki, amend the guide and tell the submitter to fix their style. Yes, style is subjective, and it's not the submitter's fault that they didn't use the &amp;quot;correct&amp;quot; style, since it may not have been clear what was the &amp;quot;correct&amp;quot; style when they made the PR, but its not worth arguing about - the time and energy to discuss it costs more than just fixing the code.&lt;br /&gt;
&lt;br /&gt;
* Messy git history. Fix it or ignore it. The trouble with telling the submitter to fix it is that many of our contributors don't have enough confidence wth git to do it right and the ones that do tend not to submit messy histories in the first place. So its not worth arguing about.  Just do the best you can to keep your own history tidy, but if its not working out don't stress too much about. If you really need help, talk to someone that can drive Git well; they can help you out.&lt;br /&gt;
&lt;br /&gt;
* Game design uncertainty (&amp;quot;Do we want this feature?&amp;quot;, &amp;quot;Do we want it to behave this way?&amp;quot;). For the most part you should choose what you think is best. You should be paying attention to what the other developers and the players are asking for and be aware of what other developments are happening, and from there be able to make a reasonable decision. If you don't know, ask someone who does. But remember that you should not reject an idea simply because you prefer it a different way. Of course your opinion matters, but try to balance everyone's needs as much as possible. (This is hard. Please ask for help).&lt;br /&gt;
&lt;br /&gt;
* Code structure problems (&amp;quot;We want the feature, but not implemented like this&amp;quot;). Structural problems can take a significant effort to fix and they make future code maintenance harder. They're the ones that often end up needing to be ripped out or rewritten later. The difficulty is that its often a ridiculous amount of effort to do something the &amp;quot;right&amp;quot; way, especially if it relates to a very old piece of code. The rule of thumb then is to permit mess if its necessary, but do the best you can to keep it contained. Remember that you're now adding to the cleanup work that someone else will have to do in the future.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2275</id>
		<title>Code review</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2275"/>
		<updated>2014-01-15T11:35:17Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* What gets reviewed? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why do code review? ==&lt;br /&gt;
&lt;br /&gt;
Code review is simply getting someone to check your code before you it gets included in the Pioneer code proper to make sure that the code is of a good quality, is consistent with the rest of the codebase and takes Pioneer in the direction that the community wants it to go.&lt;br /&gt;
&lt;br /&gt;
== When does it happen? ==&lt;br /&gt;
&lt;br /&gt;
Code review can happen at any time, whenever you like. For small items of work it will get at least one review when it is submitted for inclusion (via a pull request). For a large development you may wish to find to someone to review your code periodically, to make sure you're on the right track. If you're starting to feel a bit unsure about what you're doing, that's probably a good time to ask someone!&lt;br /&gt;
&lt;br /&gt;
You don't have to do this of course, but be aware that the reviewers don't particularly being asked to review hundreds or thousands of lines of code changes that appear out of nowhere. You face a good chance of having your code rejected outright or ignored completely, and that sucks. So if you're going to do something massive, at least check in at the start to make sure someone knows about it.&lt;br /&gt;
&lt;br /&gt;
== Who can review code? ==&lt;br /&gt;
&lt;br /&gt;
Anyone that wants to! Anyone can use the review tools on Github to read and comment on code while its under development or test pull requests.&lt;br /&gt;
&lt;br /&gt;
In the case of a pull request, someone with commit access needs to do the final sign-off (typically, but not necessarily, at the same time as merging).  If you don't have commit access you can still help make life easier for that person by leaving comments and working with the original submitter.&lt;br /&gt;
&lt;br /&gt;
== I have commit access, does my code need to be reviewed? ==&lt;br /&gt;
&lt;br /&gt;
No, you have commit access for a reason - you've proven that you can be trusted to be a good steward for the project. You should feel free to change whatever you want or need to, but as you do you should be considering all the points normally covered by a review. Self-review, if you like.&lt;br /&gt;
&lt;br /&gt;
That said, no person is an island. Be sure to ask for help if you need it, even if its just a feeling that something isn't right.&lt;br /&gt;
&lt;br /&gt;
== What gets reviewed? ==&lt;br /&gt;
&lt;br /&gt;
Every single change is a candidate for review, no matter how small. Most review will happen in a pull request, but you can be reviewing code by reading the commit history or even by reading code as you're working on it.&lt;br /&gt;
&lt;br /&gt;
Here are some good things to look out for:&lt;br /&gt;
&lt;br /&gt;
* Bugs, logical errors, mathematical errors, typos (any simple, isolated code error). These are easy. If you find a bug during testing or by looking at the code, either fix it or tell the submitter to fix it. It's easy because everyone agrees that bugs need to be fixed.&lt;br /&gt;
&lt;br /&gt;
* Uncertainty about some code logic or behaviour (&amp;quot;Is this maths right?&amp;quot; &amp;quot;Did the submitter intend this weird behaviour?&amp;quot;). These are easy: Ask the submitter (obviously). Explanatory comments are usually the &amp;quot;fix&amp;quot; here.&lt;br /&gt;
&lt;br /&gt;
* Code style errors (braces, whitespace, naming conventions, etc). Same as bugs: fix it, or tell the submitter fix it. Not everyone agrees about the importance of code style, or perhaps even what style we should be using (particularly since the existing codebase is not totally consistent), but we have a [[Code_style code style guide]] and we want everything to conform to it. If there is some aspect of style not covered by the code style guide on the wiki, amend the guide and tell the submitter to fix their style. Yes, style is subjective, and it's not the submitter's fault that they didn't use the &amp;quot;correct&amp;quot; style, since it may not have been clear what was the &amp;quot;correct&amp;quot; style when they made the PR, but its not worth arguing about - the time and energy to discuss it costs more than just fixing the code.&lt;br /&gt;
&lt;br /&gt;
* Messy git history. Fix it or ignore it. The trouble with telling the submitter to fix it is that many of our contributors don't have enough confidence wth git to do it right and the ones that do tend not to submit messy histories in the first place. So its not worth arguing about.  Just do the best you can to keep your own history tidy, but if its not working out don't stress too much about. If you really need help, talk to someone that can drive Git well; they can help you out.&lt;br /&gt;
&lt;br /&gt;
* Game design uncertainty (&amp;quot;Do we want this feature?&amp;quot;, &amp;quot;Do we want it to behave this way?&amp;quot;). For the most part you should choose what you think is best. You should be paying attention to what the other developers and the players are asking for and be aware of what other developments are happening, and from there be able to make a reasonable decision. If you don't know, ask someone who does. But remember that you should not reject an idea simply because you prefer it a different way. Of course your opinion matters, but try to balance everyone's needs as much as possible. (This is hard. Please ask for help).&lt;br /&gt;
&lt;br /&gt;
* Code structure problems (&amp;quot;We want the feature, but not implemented like this&amp;quot;). Structural problems can take a significant effort to fix and they make future code maintenance harder. They're the ones that often end up needing to be ripped out or rewritten later. The difficulty is that its often a ridiculous amount of effort to do something the &amp;quot;right&amp;quot; way, especially if it relates to a very old piece of code. The rule of thumb then is to permit mess if its necessary, but do the best you can to keep it contained. Remember that you're now adding to the cleanup work that someone else will have to do in the future.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2274</id>
		<title>Code review</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2274"/>
		<updated>2014-01-15T11:34:22Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why do code review? ==&lt;br /&gt;
&lt;br /&gt;
Code review is simply getting someone to check your code before you it gets included in the Pioneer code proper to make sure that the code is of a good quality, is consistent with the rest of the codebase and takes Pioneer in the direction that the community wants it to go.&lt;br /&gt;
&lt;br /&gt;
== When does it happen? ==&lt;br /&gt;
&lt;br /&gt;
Code review can happen at any time, whenever you like. For small items of work it will get at least one review when it is submitted for inclusion (via a pull request). For a large development you may wish to find to someone to review your code periodically, to make sure you're on the right track. If you're starting to feel a bit unsure about what you're doing, that's probably a good time to ask someone!&lt;br /&gt;
&lt;br /&gt;
You don't have to do this of course, but be aware that the reviewers don't particularly being asked to review hundreds or thousands of lines of code changes that appear out of nowhere. You face a good chance of having your code rejected outright or ignored completely, and that sucks. So if you're going to do something massive, at least check in at the start to make sure someone knows about it.&lt;br /&gt;
&lt;br /&gt;
== Who can review code? ==&lt;br /&gt;
&lt;br /&gt;
Anyone that wants to! Anyone can use the review tools on Github to read and comment on code while its under development or test pull requests.&lt;br /&gt;
&lt;br /&gt;
In the case of a pull request, someone with commit access needs to do the final sign-off (typically, but not necessarily, at the same time as merging).  If you don't have commit access you can still help make life easier for that person by leaving comments and working with the original submitter.&lt;br /&gt;
&lt;br /&gt;
== I have commit access, does my code need to be reviewed? ==&lt;br /&gt;
&lt;br /&gt;
No, you have commit access for a reason - you've proven that you can be trusted to be a good steward for the project. You should feel free to change whatever you want or need to, but as you do you should be considering all the points normally covered by a review. Self-review, if you like.&lt;br /&gt;
&lt;br /&gt;
That said, no person is an island. Be sure to ask for help if you need it, even if its just a feeling that something isn't right.&lt;br /&gt;
&lt;br /&gt;
== What gets reviewed? ==&lt;br /&gt;
&lt;br /&gt;
Every single change is a candidate for review, no matter how small. Most review will happen in a pull request, but you can be reviewing code by reading the commit history or even by reading code as you're working on it.&lt;br /&gt;
&lt;br /&gt;
Here are some good things to look out for:&lt;br /&gt;
&lt;br /&gt;
* Bugs, logical errors, mathematical errors, typos (any simple, isolated code error). These are easy. If you find a bug during testing or by looking at the code, either fix it or tell the submitter to fix it. It's easy because everyone agrees that bugs need to be fixed.&lt;br /&gt;
&lt;br /&gt;
* Uncertainty about some code logic or behaviour (&amp;quot;Is this maths right?&amp;quot; &amp;quot;Did the submitter intend this weird behaviour?&amp;quot;). These are easy: Ask the submitter (obviously). Explanatory comments are usually the &amp;quot;fix&amp;quot; here.&lt;br /&gt;
&lt;br /&gt;
* Code style errors (braces, whitespace, naming conventions, etc). Same as bugs: fix it, or tell the submitter fix it. Not everyone agrees about the importance of code style, or perhaps even what style we should be using (particularly since the existing codebase is not totally consistent), but we have a [Code_style code style guide] and we want everything to conform to it. If there is some aspect of style not covered by the code style guide on the wiki, amend the guide and tell the submitter to fix their style. Yes, style is subjective, and it's not the submitter's fault that they didn't use the &amp;quot;correct&amp;quot; style, since it may not have been clear what was the &amp;quot;correct&amp;quot; style when they made the PR, but its not worth arguing about - the time and energy to discuss it costs more than just fixing the code.&lt;br /&gt;
&lt;br /&gt;
* Messy git history. Fix it or ignore it. The trouble with telling the submitter to fix it is that many of our contributors don't have enough confidence wth git to do it right and the ones that do tend not to submit messy histories in the first place. So its not worth arguing about.  Just do the best you can to keep your own history tidy, but if its not working out don't stress too much about. If you really need help, talk to someone that can drive Git well; they can help you out.&lt;br /&gt;
&lt;br /&gt;
* Game design uncertainty (&amp;quot;Do we want this feature?&amp;quot;, &amp;quot;Do we want it to behave this way?&amp;quot;). For the most part you should choose what you think is best. You should be paying attention to what the other developers and the players are asking for and be aware of what other developments are happening, and from there be able to make a reasonable decision. If you don't know, ask someone who does. But remember that you should not reject an idea simply because you prefer it a different way. Of course your opinion matters, but try to balance everyone's needs as much as possible. (This is hard. Please ask for help).&lt;br /&gt;
&lt;br /&gt;
* Code structure problems (&amp;quot;We want the feature, but not implemented like this&amp;quot;). Structural problems can take a significant effort to fix and they make future code maintenance harder. They're the ones that often end up needing to be ripped out or rewritten later. The difficulty is that its often a ridiculous amount of effort to do something the &amp;quot;right&amp;quot; way, especially if it relates to a very old piece of code. The rule of thumb then is to permit mess if its necessary, but do the best you can to keep it contained. Remember that you're now adding to the cleanup work that someone else will have to do in the future.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2272</id>
		<title>Code review</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2272"/>
		<updated>2014-01-15T10:17:58Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why do code review? ==&lt;br /&gt;
&lt;br /&gt;
Code review is simply getting someone to check your code before you it gets included in the Pioneer code proper to make sure that the code is of a good quality, is consistent with the rest of the codebase and takes Pioneer in the direction that the community wants it to go.&lt;br /&gt;
&lt;br /&gt;
== When does it happen? ==&lt;br /&gt;
&lt;br /&gt;
Code review can happy at any time, whenever you like. For small items of work it will get at least one review when it is submitted for inclusion (via a pull request). For a large development you may wish to find to someone to review your code periodically, to make sure you're on the right track. If you're starting to feel a bit unsure about what you're doing, that's probably a good time to ask someone!&lt;br /&gt;
&lt;br /&gt;
You don't have to do this of course, but be aware that the reviewers don't particularly being asked to review hundreds or thousands of lines of code changes that appear out of nowhere. You face a good chance of having your code rejected outright or ignored completely, and that sucks. So if you're going to do something massive, at least check in at the start to make sure someone knows about it.&lt;br /&gt;
&lt;br /&gt;
== Who can review code? ==&lt;br /&gt;
&lt;br /&gt;
Anyone that wants to! Anyone can use the review tools on Github to read and comment on code while its under development or test pull requests.&lt;br /&gt;
&lt;br /&gt;
In the case of a pull request, someone with commit access needs to do the final sign-off (typically, but not necessarily, at the same time as merging).  If you don't have commit access you can still help make life easier for that person by leaving comments and working with the original submitter.&lt;br /&gt;
&lt;br /&gt;
== I have commit access, does my code need to be reviewed? ==&lt;br /&gt;
&lt;br /&gt;
No, you have commit access for a reason - you've proven that you can be trusted to be a good steward for the project. You should feel free to change whatever you want or need to, but as you do you should be considering all the points normally covered by a review. Self-review, if you like.&lt;br /&gt;
&lt;br /&gt;
That said, no person is an island. Be sure to ask for help if you need it, even if its just a feeling that something isn't right.&lt;br /&gt;
&lt;br /&gt;
== What gets reviewed? ==&lt;br /&gt;
&lt;br /&gt;
Every single change is a candidate for review, no matter how small. Most review will happen in a pull request, but you can be reviewing code by reading the commit history or even by reading code as you're working on it.&lt;br /&gt;
&lt;br /&gt;
Here are some good things to look out for:&lt;br /&gt;
&lt;br /&gt;
* Bugs, logical errors, mathematical errors, typos (any simple, isolated code error). These are easy. If you find a bug during testing or by looking at the code, either fix it or tell the submitter to fix it. It's easy because everyone agrees that bugs need to be fixed.&lt;br /&gt;
&lt;br /&gt;
* Uncertainty about some code logic or behaviour (&amp;quot;Is this maths right?&amp;quot; &amp;quot;Did the submitter intend this weird behaviour?&amp;quot;). These are easy: Ask the submitter (obviously). Explanatory comments are usually the &amp;quot;fix&amp;quot; here.&lt;br /&gt;
&lt;br /&gt;
* Code style errors (braces, whitespace, naming conventions, etc). Same as bugs: fix it, or tell the submitter fix it. Not everyone agrees about the importance of code style, or perhaps even what style we should be using (particularly since the existing codebase is not totally consistent), but we have a code style guide and we want everything to conform to it. If there is some aspect of style not covered by the code style guide on the wiki, amend the guide and tell the submitter to fix their style. Yes, style is subjective, and it's not the submitter's fault that they didn't use the &amp;quot;correct&amp;quot; style, since it may not have been clear what was the &amp;quot;correct&amp;quot; style when they made the PR, but its not worth arguing about - the time and energy to discuss it costs more than just fixing the code.&lt;br /&gt;
&lt;br /&gt;
* Messy git history. Fix it or ignore it. The trouble with telling the submitter to fix it is that many of our contributors don't have enough confidence wth git to do it right and the ones that do tend not to submit messy histories in the first place. So its not worth arguing about.  Just do the best you can to keep your own history tidy, but if its not working out don't stress too much about. If you really need help, talk to someone that can drive Git well; they can help you out.&lt;br /&gt;
&lt;br /&gt;
* Game design uncertainty (&amp;quot;Do we want this feature?&amp;quot;, &amp;quot;Do we want it to behave this way?&amp;quot;). For the most part you should choose what you think is best. You should be paying attention to what the other developers and the players are asking for and be aware of what other developments are happening, and from there be able to make a reasonable decision. If you don't know, ask someone who does. But remember that you should not reject an idea simply because you prefer it a different way. Of course your opinion matters, but try to balance everyone's needs as much as possible. (This is hard. Please ask for help).&lt;br /&gt;
&lt;br /&gt;
* Code structure problems (&amp;quot;We want the feature, but not implemented like this&amp;quot;). Structural problems can take a significant effort to fix and they make future code maintenance harder. They're the ones that often end up needing to be ripped out or rewritten later. The difficulty is that its often a ridiculous amount of effort to do something the &amp;quot;right&amp;quot; way, especially if it relates to a very old piece of code. The rule of thumb then is to permit mess if its necessary, but do the best you can to keep it contained. Remember that you're now adding to the cleanup work that someone else will have to do in the future.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2271</id>
		<title>Code review</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_review&amp;diff=2271"/>
		<updated>2014-01-15T10:17:17Z</updated>

		<summary type="html">&lt;p&gt;RobN: Created page with &amp;quot;== Why do code review?  Code review is simply getting someone to check your code before you it gets included in the Pioneer code proper to make sure that the code is of a good...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Why do code review?&lt;br /&gt;
&lt;br /&gt;
Code review is simply getting someone to check your code before you it gets included in the Pioneer code proper to make sure that the code is of a good quality, is consistent with the rest of the codebase and takes Pioneer in the direction that the community wants it to go.&lt;br /&gt;
&lt;br /&gt;
== When does it happen?&lt;br /&gt;
&lt;br /&gt;
Code review can happy at any time, whenever you like. For small items of work it will get at least one review when it is submitted for inclusion (via a pull request). For a large development you may wish to find to someone to review your code periodically, to make sure you're on the right track. If you're starting to feel a bit unsure about what you're doing, that's probably a good time to ask someone!&lt;br /&gt;
&lt;br /&gt;
You don't have to do this of course, but be aware that the reviewers don't particularly being asked to review hundreds or thousands of lines of code changes that appear out of nowhere. You face a good chance of having your code rejected outright or ignored completely, and that sucks. So if you're going to do something massive, at least check in at the start to make sure someone knows about it.&lt;br /&gt;
&lt;br /&gt;
== Who can review code?&lt;br /&gt;
&lt;br /&gt;
Anyone that wants to! Anyone can use the review tools on Github to read and comment on code while its under development or test pull requests.&lt;br /&gt;
&lt;br /&gt;
In the case of a pull request, someone with commit access needs to do the final sign-off (typically, but not necessarily, at the same time as merging).  If you don't have commit access you can still help make life easier for that person by leaving comments and working with the original submitter.&lt;br /&gt;
&lt;br /&gt;
== I have commit access, does my code need to be reviewed?&lt;br /&gt;
&lt;br /&gt;
No, you have commit access for a reason - you've proven that you can be trusted to be a good steward for the project. You should feel free to change whatever you want or need to, but as you do you should be considering all the points normally covered by a review. Self-review, if you like.&lt;br /&gt;
&lt;br /&gt;
That said, no person is an island. Be sure to ask for help if you need it, even if its just a feeling that something isn't right.&lt;br /&gt;
&lt;br /&gt;
== What gets reviewed?&lt;br /&gt;
&lt;br /&gt;
Every single change is a candidate for review, no matter how small. Most review will happen in a pull request, but you can be reviewing code by reading the commit history or even by reading code as you're working on it.&lt;br /&gt;
&lt;br /&gt;
== Here are some good things to look out for:&lt;br /&gt;
&lt;br /&gt;
* Bugs, logical errors, mathematical errors, typos (any simple, isolated code error). These are easy. If you find a bug during testing or by looking at the code, either fix it or tell the submitter to fix it. It's easy because everyone agrees that bugs need to be fixed.&lt;br /&gt;
&lt;br /&gt;
* Uncertainty about some code logic or behaviour (&amp;quot;Is this maths right?&amp;quot; &amp;quot;Did the submitter intend this weird behaviour?&amp;quot;). These are easy: Ask the submitter (obviously). Explanatory comments are usually the &amp;quot;fix&amp;quot; here.&lt;br /&gt;
&lt;br /&gt;
* Code style errors (braces, whitespace, naming conventions, etc). Same as bugs: fix it, or tell the submitter fix it. Not everyone agrees about the importance of code style, or perhaps even what style we should be using (particularly since the existing codebase is not totally consistent), but we have a code style guide and we want everything to conform to it. If there is some aspect of style not covered by the code style guide on the wiki, amend the guide and tell the submitter to fix their style. Yes, style is subjective, and it's not the submitter's fault that they didn't use the &amp;quot;correct&amp;quot; style, since it may not have been clear what was the &amp;quot;correct&amp;quot; style when they made the PR, but its not worth arguing about - the time and energy to discuss it costs more than just fixing the code.&lt;br /&gt;
&lt;br /&gt;
* Messy git history. Fix it or ignore it. The trouble with telling the submitter to fix it is that many of our contributors don't have enough confidence wth git to do it right and the ones that do tend not to submit messy histories in the first place. So its not worth arguing about.  Just do the best you can to keep your own history tidy, but if its not working out don't stress too much about. If you really need help, talk to someone that can drive Git well; they can help you out.&lt;br /&gt;
&lt;br /&gt;
* Game design uncertainty (&amp;quot;Do we want this feature?&amp;quot;, &amp;quot;Do we want it to behave this way?&amp;quot;). For the most part you should choose what you think is best. You should be paying attention to what the other developers and the players are asking for and be aware of what other developments are happening, and from there be able to make a reasonable decision. If you don't know, ask someone who does. But remember that you should not reject an idea simply because you prefer it a different way. Of course your opinion matters, but try to balance everyone's needs as much as possible. (This is hard. Please ask for help).&lt;br /&gt;
&lt;br /&gt;
* Code structure problems (&amp;quot;We want the feature, but not implemented like this&amp;quot;). Structural problems can take a significant effort to fix and they make future code maintenance harder. They're the ones that often end up needing to be ripped out or rewritten later. The difficulty is that its often a ridiculous amount of effort to do something the &amp;quot;right&amp;quot; way, especially if it relates to a very old piece of code. The rule of thumb then is to permit mess if its necessary, but do the best you can to keep it contained. Remember that you're now adding to the cleanup work that someone else will have to do in the future.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=2245</id>
		<title>Translations</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=2245"/>
		<updated>2014-01-07T06:22:33Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* For mod developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All text in Pioneer is translatable, and the game ships with several translations. Here's everything you need to know.&lt;br /&gt;
&lt;br /&gt;
== For translators ==&lt;br /&gt;
&lt;br /&gt;
All our translations are managed through [http://transifex.com Transifex], a web-based translation service. To start writing translations, sign up there, and then take a look at the [https://www.transifex.com/projects/p/pioneer/ Pioneer project].&lt;br /&gt;
&lt;br /&gt;
Changes to translations are automatically pulled into the master git repo twice per day, and from there to the builds when they're next run.&lt;br /&gt;
&lt;br /&gt;
In Transifex you can subscribe to notifications for the languages or resources you're interested in. When new strings are added or modified, you'll be told about it.&lt;br /&gt;
&lt;br /&gt;
If you want to translate Pioneer to an entirely new language, please [https://pioneerspacesim.net/issues open an issue] on the tracker and someone will create the translation for you.&lt;br /&gt;
&lt;br /&gt;
English is the canonical language for Pioneer. As such, you can't directly modify the english strings through Transifex. If you want to change those, you'll need to make the change in git and submit a pull request like normal.&lt;br /&gt;
&lt;br /&gt;
Untranslated strings will use the value from the English version.&lt;br /&gt;
&lt;br /&gt;
You can leave comments in Transifex to help out other translators. You'll also see any notes left by the developers to help you translate a particular string.&lt;br /&gt;
&lt;br /&gt;
If you're a new translator and you'd like your name included in AUTHORS.txt, please let us know!&lt;br /&gt;
&lt;br /&gt;
== For mod developers ==&lt;br /&gt;
&lt;br /&gt;
Each module gets its own translation resource, called &amp;lt;tt&amp;gt;module-foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To get at the strings for your module, do something like:&lt;br /&gt;
&lt;br /&gt;
    local Lang = import(&amp;quot;Lang&amp;quot;)&lt;br /&gt;
    local l = Lang.GetResource(&amp;quot;module-foo&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Then you can get at the string by its token:&lt;br /&gt;
&lt;br /&gt;
    print(l.SOME_TRANSLATED_STRING)&lt;br /&gt;
&lt;br /&gt;
While its possible to load multiple translation resources to share strings, its highly recommended that you don't do that. Stick to your own strings so that you don't have to track changes in other modules. Duplicates across resources are fine. Note that code that uses multiple resources won't be accepted into the main Pioneer repository unless you've checked it with a core developer first and it has a good reason.&lt;br /&gt;
&lt;br /&gt;
Translations are [https://developer.chrome.com/extensions/i18n.html &amp;lt;tt&amp;gt;chrome.i18n&amp;lt;/tt&amp;gt; JSON] files. The format is fairly simple - an table of tokens as keys, with values of a table with two keys, &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; is the text that will appear in the game, while &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt; provides instructions for the translator that will be displayed in Transifex.&lt;br /&gt;
&lt;br /&gt;
If you're submitting code that requires a new language resource, please make a note of it in your pull request, and only include &amp;lt;tt&amp;gt;en.json&amp;lt;/tt&amp;gt; in your patch.&lt;br /&gt;
&lt;br /&gt;
== For core developers ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;core&amp;lt;/tt&amp;gt; resource is magical. If you add a string to it, you also need to add it to &amp;lt;tt&amp;gt;LangStrings.inc.h&amp;lt;/tt&amp;gt; and recompile. It will then be available as &amp;lt;tt&amp;gt;Lang::SOME_TRANSLATED_STRING&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=2244</id>
		<title>Translations</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=2244"/>
		<updated>2014-01-07T06:22:02Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* For mod developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All text in Pioneer is translatable, and the game ships with several translations. Here's everything you need to know.&lt;br /&gt;
&lt;br /&gt;
== For translators ==&lt;br /&gt;
&lt;br /&gt;
All our translations are managed through [http://transifex.com Transifex], a web-based translation service. To start writing translations, sign up there, and then take a look at the [https://www.transifex.com/projects/p/pioneer/ Pioneer project].&lt;br /&gt;
&lt;br /&gt;
Changes to translations are automatically pulled into the master git repo twice per day, and from there to the builds when they're next run.&lt;br /&gt;
&lt;br /&gt;
In Transifex you can subscribe to notifications for the languages or resources you're interested in. When new strings are added or modified, you'll be told about it.&lt;br /&gt;
&lt;br /&gt;
If you want to translate Pioneer to an entirely new language, please [https://pioneerspacesim.net/issues open an issue] on the tracker and someone will create the translation for you.&lt;br /&gt;
&lt;br /&gt;
English is the canonical language for Pioneer. As such, you can't directly modify the english strings through Transifex. If you want to change those, you'll need to make the change in git and submit a pull request like normal.&lt;br /&gt;
&lt;br /&gt;
Untranslated strings will use the value from the English version.&lt;br /&gt;
&lt;br /&gt;
You can leave comments in Transifex to help out other translators. You'll also see any notes left by the developers to help you translate a particular string.&lt;br /&gt;
&lt;br /&gt;
If you're a new translator and you'd like your name included in AUTHORS.txt, please let us know!&lt;br /&gt;
&lt;br /&gt;
== For mod developers ==&lt;br /&gt;
&lt;br /&gt;
Each module gets its own translation resource, called &amp;lt;tt&amp;gt;module-foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To get at the strings for your module, do something like:&lt;br /&gt;
&lt;br /&gt;
    local Lang = import(&amp;quot;Lang&amp;quot;)&lt;br /&gt;
    local l = Lang.GetResource(&amp;quot;module-foo&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Then you can get at the string by its token:&lt;br /&gt;
&lt;br /&gt;
    print(l.SOME_TRANSLATED_STRING)&lt;br /&gt;
&lt;br /&gt;
While its possible to load multiple translation resources to share strings, its highly recommended that you don't do that. Stick to your own strings so that you don't have to track changes in other modules. Duplicates across resources are fine. Note that code that uses multiple resources won't be accepted into the main Pioneer repository unless you've checked it with a core developer first and it has a good reason.&lt;br /&gt;
&lt;br /&gt;
Translations are [https://developer.chrome.com/extensions/i18n.html &amp;lt;tt&amp;gt;chrome.i18n&amp;lt;/tt&amp;gt; JSON] files. The format is fairly simple - an tables of tokens as keys, with values of a table with two keys, &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; is the text that will appear in the game, while &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt; provides instructions for the translator that will be displayed in Transifex.&lt;br /&gt;
&lt;br /&gt;
If you're submitting code that requires a new language resource, please make a note of it in your pull request, and only include &amp;lt;tt&amp;gt;en.json&amp;lt;/tt&amp;gt; in your patch.&lt;br /&gt;
&lt;br /&gt;
== For core developers ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;core&amp;lt;/tt&amp;gt; resource is magical. If you add a string to it, you also need to add it to &amp;lt;tt&amp;gt;LangStrings.inc.h&amp;lt;/tt&amp;gt; and recompile. It will then be available as &amp;lt;tt&amp;gt;Lang::SOME_TRANSLATED_STRING&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=2243</id>
		<title>Translations</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=2243"/>
		<updated>2014-01-07T06:12:42Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* For translators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All text in Pioneer is translatable, and the game ships with several translations. Here's everything you need to know.&lt;br /&gt;
&lt;br /&gt;
== For translators ==&lt;br /&gt;
&lt;br /&gt;
All our translations are managed through [http://transifex.com Transifex], a web-based translation service. To start writing translations, sign up there, and then take a look at the [https://www.transifex.com/projects/p/pioneer/ Pioneer project].&lt;br /&gt;
&lt;br /&gt;
Changes to translations are automatically pulled into the master git repo twice per day, and from there to the builds when they're next run.&lt;br /&gt;
&lt;br /&gt;
In Transifex you can subscribe to notifications for the languages or resources you're interested in. When new strings are added or modified, you'll be told about it.&lt;br /&gt;
&lt;br /&gt;
If you want to translate Pioneer to an entirely new language, please [https://pioneerspacesim.net/issues open an issue] on the tracker and someone will create the translation for you.&lt;br /&gt;
&lt;br /&gt;
English is the canonical language for Pioneer. As such, you can't directly modify the english strings through Transifex. If you want to change those, you'll need to make the change in git and submit a pull request like normal.&lt;br /&gt;
&lt;br /&gt;
Untranslated strings will use the value from the English version.&lt;br /&gt;
&lt;br /&gt;
You can leave comments in Transifex to help out other translators. You'll also see any notes left by the developers to help you translate a particular string.&lt;br /&gt;
&lt;br /&gt;
If you're a new translator and you'd like your name included in AUTHORS.txt, please let us know!&lt;br /&gt;
&lt;br /&gt;
== For mod developers ==&lt;br /&gt;
&lt;br /&gt;
Each module gets its own translation resource, called &amp;lt;tt&amp;gt;module-foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To get at the strings for your module, do something like:&lt;br /&gt;
&lt;br /&gt;
    local Lang = import(&amp;quot;Lang&amp;quot;)&lt;br /&gt;
    local l = Lang.GetResource(&amp;quot;module-foo&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Then you can get at the string by its token:&lt;br /&gt;
&lt;br /&gt;
    print(l.SOME_TRANSLATED_STRING)&lt;br /&gt;
&lt;br /&gt;
While its possible to load multiple translation resources to share strings, its highly recommended that you don't do that. Stick to your own strings so that you don't have to track changes in other modules. Duplicates across resources are fine. Note that code that uses multiple resources won't be accepted into the main Pioneer repository.&lt;br /&gt;
&lt;br /&gt;
Translations are [https://developer.chrome.com/extensions/i18n.html &amp;lt;tt&amp;gt;chrome.i18n&amp;lt;/tt&amp;gt; JSON] files. The format is fairly simple - an tables of tokens as keys, with values of a table with two keys, &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; is the text that will appear in the game, while &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt; provides instructions for the translator that will be displayed in Transifex.&lt;br /&gt;
&lt;br /&gt;
If you're submitting code that requires a new language resource, please make a note of it in your pull request, and only include &amp;lt;tt&amp;gt;en.json&amp;lt;/tt&amp;gt; in your patch.&lt;br /&gt;
&lt;br /&gt;
== For core developers ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;core&amp;lt;/tt&amp;gt; resource is magical. If you add a string to it, you also need to add it to &amp;lt;tt&amp;gt;LangStrings.inc.h&amp;lt;/tt&amp;gt; and recompile. It will then be available as &amp;lt;tt&amp;gt;Lang::SOME_TRANSLATED_STRING&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Media_Coverage&amp;diff=2042</id>
		<title>Media Coverage</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Media_Coverage&amp;diff=2042"/>
		<updated>2014-01-02T21:10:42Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following websites or publications have mentioned or featured Pioneer.&lt;br /&gt;
&lt;br /&gt;
* [http://www.cnet.com.au/amazing-dad-builds-his-son-a-spaceship-simulator-339343918.htm CNET Australia] article about a &amp;quot;real&amp;quot; space ship simulator than runs Pioneer.&lt;br /&gt;
* [http://www.bbc.co.uk/news/technology-20165344 BBC] article about funding for the new Elite game mentions Pioneer in a list of alternatives.&lt;br /&gt;
* [http://www.rockpapershotgun.com/2011/12/06/back-to-frontier-pioneer/ Rock Paper Shotgun] interviews the development team.&lt;br /&gt;
* [http://github.com/blog/1228-game-bytes-2/ Github Game Bytes] blog entry featuring Pioneer.&lt;br /&gt;
* [http://www.pcgamer.com/2014/01/01/ten-top-fan-remade-classics-you-can-play-for-free-right-now/ PC Gamer] include Pioneer in their list of top game remakes.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Mods&amp;diff=1970</id>
		<title>Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Mods&amp;diff=1970"/>
		<updated>2013-12-30T02:37:01Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* List of known Mods */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Available Mods ==&lt;br /&gt;
&lt;br /&gt;
=== How to install Mods ===&lt;br /&gt;
&lt;br /&gt;
Since Alpha 22, Pioneer has had support for modding. This is done by allowing core game data to be added to or given preference by data in your userdir (that is, &amp;lt;code&amp;gt;'My Docs/Pioneer/mods'&amp;lt;/code&amp;gt; for Windows, &amp;lt;code&amp;gt;'~/.pioneer/mods'&amp;lt;/code&amp;gt; for Linux, and &amp;lt;code&amp;gt;'~/Library/Application Support/Pioneer/mods'&amp;lt;/code&amp;gt; for OSX).&lt;br /&gt;
&lt;br /&gt;
Once you have downloaded a mod, you simply place the .zip file in the /mods folder described above. There is no need to extract the files.&lt;br /&gt;
&lt;br /&gt;
If a file in a .zip  is identically named with one found in the Main pioneer/data directory, the version in the .zip will be used. You can use this fact to easily modify the core game files of Pioneer&lt;br /&gt;
&lt;br /&gt;
This method can be used for any file under the main Pioneer/data directory and applies to ships, buildings and stations, systems, music, fonts, textures, whatever.&lt;br /&gt;
&lt;br /&gt;
However, there are still some mods not packaged in the mod format (.zip). Overtime these are being repackaged by members of the Pioneer community, but in case you have a mod that is not in the correct format then the data in these style of mods must be placed in the correct folder within your main Pioneer/data directory and not in the mods directory described above. But be warned, make a back up of the files you are about to overwrite as this can not be undone and if you do want to return to a 'vanilla' Pioneer, you will have to re-install Pioneer.&lt;br /&gt;
&lt;br /&gt;
== List of known Mods ==&lt;br /&gt;
&lt;br /&gt;
Overtime all the mods here can also be found on the Pioneer Mods page at sourceforge https://sourceforge.net/projects/modsforpioneer/files/Alpha%2030%20mods/&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Current known Mod Packages&lt;br /&gt;
|-&lt;br /&gt;
!Mod Name&lt;br /&gt;
!Mod Description&lt;br /&gt;
!Author(s)&lt;br /&gt;
!Version&lt;br /&gt;
!Tested with Pioneer*&lt;br /&gt;
!Size&lt;br /&gt;
!Download link&lt;br /&gt;
|-&lt;br /&gt;
|Graveyard&lt;br /&gt;
|Example of bundling multiple files in a mod. Adds a custom system &amp;quot;Graveyard&amp;quot; (up and to the right of Sol) and a script that does something when you jump there.&lt;br /&gt;
|[[User:RobN|RobN]]&lt;br /&gt;
|1.0&lt;br /&gt;
|20131229&lt;br /&gt;
|1kb&lt;br /&gt;
|[http://eatenbyagrue.org/f/pioneer/graveyard.zip graveyard.zip]&lt;br /&gt;
|-&lt;br /&gt;
|RedSol&lt;br /&gt;
|Example of replacing a core file. Replaces the system def for Sol with one that has a red star. &lt;br /&gt;
|[[User:RobN|RobN]]&lt;br /&gt;
|1.0&lt;br /&gt;
|Alpha22&lt;br /&gt;
|1kb&lt;br /&gt;
|[http://eatenbyagrue.org/f/pioneer/redsol.zip redsol.zip]&lt;br /&gt;
|-&lt;br /&gt;
|Moon Heightmap&lt;br /&gt;
|Higher res heightmap which replaces the 2mb default heightmap.&lt;br /&gt;
|Ae-2222&lt;br /&gt;
|1.0&lt;br /&gt;
|Alpha26-30&lt;br /&gt;
|33Mb&lt;br /&gt;
|[http://wikisend.com/download/359748/moon-hi-res-heightmap.zip moon-hi-res-heightmap.zip]&lt;br /&gt;
|-&lt;br /&gt;
|Apollo LEM Lunar orbit save file for Alpha26&lt;br /&gt;
|Low fuel LEM landing challenge (-w- cargo to jettison) 3 saves with Lunar lander in unpowered orbit over moon with low fuel(requires HighRes.Moon_Apollo.LEM.a26Mod)&lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|1.0&lt;br /&gt;
|Alpha26&lt;br /&gt;
|520kb&lt;br /&gt;
|[http://www.mediafire.com/?sy5d6i4n8vz10c4]&lt;br /&gt;
|-&lt;br /&gt;
|Interstellar Shuttle 1700&lt;br /&gt;
|Adds a modified version of the standard shuttle to the ship roster with hyperdrive capability, ecm, missile, cargo/fuel scoop options and more cargo space.(includes a new shuttle skin and solar array for bottom of existing standard shuttle (readme inside zip file)&lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|1.3&lt;br /&gt;
|Alpha 30&lt;br /&gt;
|3560kb&lt;br /&gt;
|[http://www.mediafire.com/?46ci6m4677y5wg3]&lt;br /&gt;
|-&lt;br /&gt;
|I,S. Shuttle 1700&lt;br /&gt;
|see above ^&lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|1.1&lt;br /&gt;
|Alpha27 &amp;amp; 28&lt;br /&gt;
|3560kb&lt;br /&gt;
|[http://www.mediafire.com/?xw5ns1xprj8wmju]&lt;br /&gt;
|-&lt;br /&gt;
|Enterprise 1701a (static ship)&lt;br /&gt;
|Replaces the Long Range Cruiser (static Ship) with the NCC 1701a &amp;quot;Enterprise&amp;quot; at realistic scale. (readme inside zip file)&lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|1.2&lt;br /&gt;
|Alpha 30&lt;br /&gt;
|1.78mb&lt;br /&gt;
|[http://www.mediafire.com/?g4ng4dk46kdns8v]&lt;br /&gt;
|-&lt;br /&gt;
|Enterprise 1701a static&lt;br /&gt;
|see above ^&lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|1.1&lt;br /&gt;
|Alpha 27 &amp;amp; 28&lt;br /&gt;
|1.78mb&lt;br /&gt;
|[http://www.mediafire.com/?008oidsj5cro9v6]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Enterprise 1701a static&lt;br /&gt;
|see above ^&lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|1.1&lt;br /&gt;
|Alpha 27 &amp;amp; 28&lt;br /&gt;
|1.78mb&lt;br /&gt;
|[http://www.mediafire.com/?008oidsj5cro9v6]&lt;br /&gt;
|-&lt;br /&gt;
|Ship Decals Mod 256x256&lt;br /&gt;
|This is version 4.0 - includes 8 ship decals.           IMAGE here: http://img708.imageshack.us/img708/7146/decalsversion4.png &lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|4.0&lt;br /&gt;
|Alpha 27-30&lt;br /&gt;
|3mb&lt;br /&gt;
|[http://www.mediafire.com/?14bchs29dn06nn2]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Controller Templates&lt;br /&gt;
|Not really a Mod - This is for people who have - or are familiar with either Xpadder, 3D Pro Joystick or the G-13 Gameboard. Extreme 3D Pro Joystick Xpadder profile and G-13 gameboard Basic Template - printable key &amp;amp; joystick button reference. Version 3  (More info see above)&lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|3.0&lt;br /&gt;
|Most Alphas up to 26&lt;br /&gt;
|4490kb&lt;br /&gt;
|[https://docs.google.com/open?id=0B5dK9aniVGUnM09GRU1qVFJWemM]   [http://www.mediafire.com/?ncnh6bpdvna34n2]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|3DPro Joystick Profile&lt;br /&gt;
|This is an update supporting the new view keys, for Extreme 3D Pro Joystick Xpadder profile with Template - printable joystick button reference. Version 5  (see pic: http://imageshack.us/a/img822/864/ztf.png )&lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|5.0&lt;br /&gt;
|Alphas after 28 (all current versions)&lt;br /&gt;
|2.31mb&lt;br /&gt;
|[http://www.mediafire.com/?btgkn3sjx0ianuu]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Pioneer default keyboard reference&lt;br /&gt;
|In pdf printable format(see PNG pic: http://img203.imageshack.us/img203/2079/5dh.png )&lt;br /&gt;
|[[User:baobobafet|baobobafet]]&lt;br /&gt;
|v201305.93bao&lt;br /&gt;
|Alphas after 28(all current versions)&lt;br /&gt;
|7.3mb&lt;br /&gt;
|[http://www.mediafire.com/?y5a2sapya7vfhhr]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'' Version number represents what the module was tested/built against. There is no guarantee that it will work for later versions.''&lt;br /&gt;
&lt;br /&gt;
== List of known Mod Compilations ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Current known Mod Compilation Packages&lt;br /&gt;
|-&lt;br /&gt;
!Mod Name&lt;br /&gt;
!Mod Description&lt;br /&gt;
!Author(s)&lt;br /&gt;
!Version&lt;br /&gt;
!Tested with Pioneer*&lt;br /&gt;
!Size&lt;br /&gt;
!Download link&lt;br /&gt;
|-&lt;br /&gt;
|HiRes Moon &amp;amp; Apollo LEM Mod&lt;br /&gt;
|High res Moon heightmap &amp;amp; flyable Apollo Eagle Lander with docs &amp;amp; nav maps.&lt;br /&gt;
|contrib by Ae-2222 &amp;amp; [[User:baobobafet|baobobafet]]&lt;br /&gt;
|2.0&lt;br /&gt;
|Alpha 30&lt;br /&gt;
|35.3Mb&lt;br /&gt;
|[https://docs.google.com/open?id=0B4TOJEZxkYiVUGZqVklKVEE0WUE]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*'' Version number represents what the module compilation was tested/built against. There is no guarantee that it will work for later versions.''&lt;br /&gt;
&lt;br /&gt;
'''''The who/when/where for mod storage/testing/package compilation is still to be established. As with all things concerning Pioneer it is up to interested parties to resolve this. There is the beginnings of a discussion on the [[Talk:Mods|discussion page]] as not everyone is on the mailing list yet (another could be started on a specific task page if anyone wants to). You need to register to edit pages and contribute.'''''&lt;br /&gt;
&lt;br /&gt;
== Creating A New Ship Mod ==&lt;br /&gt;
This is in response to the couple of people who are interested in doing art, perhaps even leading the direction it can go in.&lt;br /&gt;
&lt;br /&gt;
For programmers there's a path which involves creating a GitHub account, forking the Pioneer repository, creating branches, configuring remotes, making commits and submitting Pull Requests.&lt;br /&gt;
&lt;br /&gt;
For Artists and scripters there's another way which is hopefully preferrable for everyone! &lt;br /&gt;
&lt;br /&gt;
To follow this &amp;quot;tutorial&amp;quot; you'll need at least a way of creating &amp;quot;.zip&amp;quot; files, on Windows I use the 7-zip program.&lt;br /&gt;
&lt;br /&gt;
This example is being written for Windows but the ideas are broadly transferrable even if the exact file paths and locations aren't.&lt;br /&gt;
&lt;br /&gt;
=== MyFirstShip mod ===&lt;br /&gt;
There's links to a few existing mods above but they're very simple things:&lt;br /&gt;
* They're just zip files containing some directories and files,&lt;br /&gt;
* Their contents are &amp;quot;Added&amp;quot; to Pioneer unless replace something like a script, ship, texture, etc,&lt;br /&gt;
* They use the same directory structure as Pioneer.&lt;br /&gt;
The example that most players are enthusiastic about is adding a new ship which is the first step on the long road to a total conversion! &lt;br /&gt;
 &lt;br /&gt;
To start with we want to make this task easy for ourselves so lets try the following to create a &amp;quot;mod&amp;quot; called &amp;quot;myfirstship&amp;quot;:&lt;br /&gt;
* Go to wherever you've extracted your Pioneer download to,&lt;br /&gt;
* Open the folder &amp;quot;data&amp;quot; and look down the folder names as there's two we're interested in,&lt;br /&gt;
** &amp;quot;ships&amp;quot; and &amp;quot;models&amp;quot;,&lt;br /&gt;
* open the &amp;quot;ships&amp;quot; folder,&lt;br /&gt;
** copy and rename the file &amp;quot;wave.lua&amp;quot; to &amp;quot;myfirstship.lua&amp;quot;,&lt;br /&gt;
** open the file in a text editor and change the following lines like so&lt;br /&gt;
*** from: name='Wave Heavy Hypersonic Fighter'&lt;br /&gt;
*** from: model='wave',&lt;br /&gt;
*** To: name='My First Ship Tutorial'&lt;br /&gt;
*** To: model='myfirstship',&lt;br /&gt;
*** save your changes to the &amp;quot;myfirstship.lua&amp;quot; file,&lt;br /&gt;
*** now go back up to the data folder,&lt;br /&gt;
* open the &amp;quot;models&amp;quot; folder, then the &amp;quot;ships&amp;quot; folder,&lt;br /&gt;
** copy and rename the folder &amp;quot;wave&amp;quot; to &amp;quot;myfirstship&amp;quot;,&lt;br /&gt;
** open the &amp;quot;myfirstship&amp;quot; folder,&lt;br /&gt;
*** rename the file &amp;quot;wave.model&amp;quot; to &amp;quot;myfirstships.model&amp;quot;,&lt;br /&gt;
Now run Pioneer with the parameter &amp;quot;-mv myfirstship&amp;quot; so the command line should look like &amp;quot;pioneer.exe -mv myfirstship&amp;quot; this will open it in the modelviewer mode so you can see if everything has worked.&lt;br /&gt;
&lt;br /&gt;
If you run Pioneer as usual then you should be able to go to the ship yard and buy your very own &amp;quot;My First Ship Tutorial&amp;quot; spaceship. Of course it will look like the Wave heavy Hypersonic Fighter, and it will handle like it and be like it in every possible way because it's a perfect copy of it &lt;br /&gt;
 &lt;br /&gt;
If you want to make it look different so it's easier to spot then a quick thing you can do is edit the texture &amp;quot;wave.png&amp;quot; in your &amp;quot;/data/models/ships/myfirstship/&amp;quot; folder, perhaps just paint the white a bright red or something which will make it easy to tell that you've changed it.&lt;br /&gt;
 &lt;br /&gt;
Obviously we're not done turning all this effort into a mod yet, we've just copied a ship definition (&amp;quot;myfirstship.lua&amp;quot;) and the model data for it.&lt;br /&gt;
&lt;br /&gt;
So lets open a new folder window (if on Windows) and:&lt;br /&gt;
* Create a new folder somewhere you won't lose it, &amp;quot;My Documents&amp;quot; for windows users or the home folder on Linux etc, call it &amp;quot;tutorial&amp;quot; this time (to avoid confusion),&lt;br /&gt;
* In this folder create two more called &amp;quot;ships&amp;quot; and &amp;quot;models&amp;quot;,&lt;br /&gt;
* With the &amp;quot;models&amp;quot; folder create another folder called &amp;quot;ships&amp;quot;,&lt;br /&gt;
* by now you should have something that looks like:&lt;br /&gt;
** /tutorial/ships/&lt;br /&gt;
** /tutorial/models/ships/&lt;br /&gt;
* now you're going to _move_ the &amp;quot;myfirstships.lua&amp;quot; file you edited earlier out of the &amp;quot;/pioneer/data/ships/&amp;quot; into the folder &amp;quot;/tutorial/ships/&amp;quot; folder,&lt;br /&gt;
* next you must _move_ the folder &amp;quot;myfirstship&amp;quot; from &amp;quot;/pioneer/data/models/ships/&amp;quot; to &amp;quot;/tutorial/models/ships/&amp;quot;,&lt;br /&gt;
* now create a &amp;quot;readme.txt&amp;quot; file in the &amp;quot;tutorial&amp;quot; folder and add your name to it for now,&lt;br /&gt;
* Add everything inside the &amp;quot;tutorial&amp;quot; folder to a zip archive - to do this with 7-zip just selected everything inside the tutorial folder, right-click, open the 7-zip submenu and choose the &amp;quot;Add to archive&amp;quot;,&lt;br /&gt;
* Make sure that you choose to use &amp;quot;zip&amp;quot; compression and call the archive &amp;quot;myfirstship.zip&amp;quot;.&lt;br /&gt;
* Finally, put the file &amp;quot;myfirstship.zip&amp;quot; into the &amp;quot;mods&amp;quot; directory - this IS NOT usually where you extracted the Pioneer download.&lt;br /&gt;
** On Windows it will be in a folder under your &amp;quot;My Documents&amp;quot;/&amp;quot;Documents&amp;quot; directory for example:&lt;br /&gt;
*** &amp;quot;/My Documents/Pioneer/mods/&amp;quot;&lt;br /&gt;
* Now double check that you really did MOVE the files and folders, i.e; go back to where you first copied the wave files and folders and make sure that there aren't any &amp;quot;myfirsthip&amp;quot; files or folder there because they should now all be inside the zip file (and safely backed up in the &amp;quot;tutorial&amp;quot; folder).&lt;br /&gt;
** The reason this step is important is that you might have made a mistake with the zipping process and the mod is actually now broken, however it will look like it works because the original files are still being found by Pioneer in it's own data directory.&lt;br /&gt;
* Finally, the mod should have been packaged up into a zip, it should be in the &amp;quot;mods&amp;quot; directory, and you've made sure the Pioneer data folder is clean.&lt;br /&gt;
* Run Pioneer and make sure your mod works.&lt;br /&gt;
 &lt;br /&gt;
There are many steps that take just a second or two and lots of bits you can skip once you know what you're doing.&lt;br /&gt;
 &lt;br /&gt;
You can have as many ships within a single mod as you like, this technique just gives you a copy of the Wave to edit and play with.&lt;br /&gt;
&lt;br /&gt;
You can, and should, replace it with your own mesh and edit the parameters it uses for thrust and equipment etc.&lt;br /&gt;
&lt;br /&gt;
=== So how does this get my ships into the Pioneer download? ===&lt;br /&gt;
Easy, you create your mod, test it, try it out, share it via this forums download area so that others can play it, respond to criticisms to improve it and then ask the Core Team to include it in the main distribution.&lt;br /&gt;
&lt;br /&gt;
This is basically the same process that we go through for programmers submissions but without having to understand Git and GitHub.&lt;br /&gt;
&lt;br /&gt;
It's also more direct to players and fans of the game who often use several mods together to make Pioneer play how they want it too.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1942</id>
		<title>Code style</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1942"/>
		<updated>2013-12-10T09:17:56Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Name style */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes some of the code style used in Pioneer. Its probably incomplete, but it should be correct. If you see something in the code that doesn't match what's described here, this guide takes precedence (and please submit a patch to fix it!)&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
Engine and Lua code is [http://www.gnu.org/licenses/gpl.html GPL 3]. Assets (include Lua-based data files like ship defs) are [http://creativecommons.org/licenses/by-sa/3.0/ CC-BY-SA 3]&lt;br /&gt;
&lt;br /&gt;
Include these two lines at the top of each file (suitably commented):&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of the GPL v3. See licenses/GPL-3.txt&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of CC-BY-SA 3.0. See licenses/CC-BY-SA-3.0.txt&lt;br /&gt;
&lt;br /&gt;
== Tabs &amp;amp; spacing ==&lt;br /&gt;
&lt;br /&gt;
* Hard tabs, 4-space aligned.&lt;br /&gt;
* Inner spaces after tabs to align arguments on multiple lines, etc&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
* Prefer &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt; over &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; wherever possible&lt;br /&gt;
&lt;br /&gt;
== Name style ==&lt;br /&gt;
&lt;br /&gt;
* Classes: FooBar&lt;br /&gt;
* Methods: FooBar&lt;br /&gt;
* Class members: m_fooBar&lt;br /&gt;
* Static members: s_fooBar&lt;br /&gt;
* Constants (defines and &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt;): FOO_BAR&lt;br /&gt;
&lt;br /&gt;
Names should generally be chosen for what the thing represents. It shouldn't have type or qualifier information embedded in the name (the so-called [http://en.wikipedia.org/wiki/Hungarian_notation Systems Hungarian] notation). Just name it so its crystal clear what it is.&lt;br /&gt;
&lt;br /&gt;
(Exception: member variables have a &amp;lt;tt&amp;gt;m_&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;s_&amp;lt;/tt&amp;gt; to disambiguate them from local names and to match C++ conventions).&lt;br /&gt;
&lt;br /&gt;
There's also a few abbreviated names that are commonly used throughout the codebase, eg &amp;lt;tt&amp;gt;Renderer *r&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;lua_State *l&amp;lt;/tt&amp;gt;, etc. Try to prefer them where appropriate.&lt;br /&gt;
&lt;br /&gt;
== Include guards ==&lt;br /&gt;
&lt;br /&gt;
Header include guards should be named for the filename of the header, capitalised, with slashes converted to underscores:&lt;br /&gt;
&lt;br /&gt;
* Ship.h&lt;br /&gt;
    #ifndef SHIP_H&lt;br /&gt;
&lt;br /&gt;
* WorldView.h&lt;br /&gt;
    #ifndef WORLDVIEW_H&lt;br /&gt;
&lt;br /&gt;
* graphics/Renderer.h&lt;br /&gt;
    #ifndef GRAPHICS_RENDERER_H&lt;br /&gt;
&lt;br /&gt;
== Enum types ==&lt;br /&gt;
&lt;br /&gt;
Enums are effectively global constants, so should be in full caps. They're prefixed with the name of the enum.&lt;br /&gt;
&lt;br /&gt;
Avoid assigning explicit integer values. Also avoid values that aren't actually valid for whatever the enum is (though *_MAX to mark the last valid value is usually acceptable). If these don't work, chances are what you're trying to do would be better served by multiple enums or even a whole class.&lt;br /&gt;
&lt;br /&gt;
    enum Thing {&lt;br /&gt;
        THING_FOO,&lt;br /&gt;
        THING_BAR,&lt;br /&gt;
        THING_BAZ,&lt;br /&gt;
        &lt;br /&gt;
        THING_MAX&lt;br /&gt;
    };&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1941</id>
		<title>Code style</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1941"/>
		<updated>2013-12-10T09:16:01Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Name style */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes some of the code style used in Pioneer. Its probably incomplete, but it should be correct. If you see something in the code that doesn't match what's described here, this guide takes precedence (and please submit a patch to fix it!)&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
Engine and Lua code is [http://www.gnu.org/licenses/gpl.html GPL 3]. Assets (include Lua-based data files like ship defs) are [http://creativecommons.org/licenses/by-sa/3.0/ CC-BY-SA 3]&lt;br /&gt;
&lt;br /&gt;
Include these two lines at the top of each file (suitably commented):&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of the GPL v3. See licenses/GPL-3.txt&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of CC-BY-SA 3.0. See licenses/CC-BY-SA-3.0.txt&lt;br /&gt;
&lt;br /&gt;
== Tabs &amp;amp; spacing ==&lt;br /&gt;
&lt;br /&gt;
* Hard tabs, 4-space aligned.&lt;br /&gt;
* Inner spaces after tabs to align arguments on multiple lines, etc&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
* Prefer &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt; over &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; wherever possible&lt;br /&gt;
&lt;br /&gt;
== Name style ==&lt;br /&gt;
&lt;br /&gt;
* Classes: FooBar&lt;br /&gt;
* Methods: FooBar&lt;br /&gt;
* Class members: m_fooBar&lt;br /&gt;
* Static members: s_fooBar&lt;br /&gt;
* Constants: FOO_BAR&lt;br /&gt;
&lt;br /&gt;
Names should generally be chosen for what the thing represents. It shouldn't have type or qualifier information embedded in the name (the so-called [http://en.wikipedia.org/wiki/Hungarian_notation Systems Hungarian] notation). Just name it so its crystal clear what it is.&lt;br /&gt;
&lt;br /&gt;
There's also a few abbreviated names that are commonly used throughout the codebase, eg &amp;lt;tt&amp;gt;Renderer *r&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;lua_State *l&amp;lt;/tt&amp;gt;, etc. Try to prefer them where appropriate.&lt;br /&gt;
&lt;br /&gt;
== Include guards ==&lt;br /&gt;
&lt;br /&gt;
Header include guards should be named for the filename of the header, capitalised, with slashes converted to underscores:&lt;br /&gt;
&lt;br /&gt;
* Ship.h&lt;br /&gt;
    #ifndef SHIP_H&lt;br /&gt;
&lt;br /&gt;
* WorldView.h&lt;br /&gt;
    #ifndef WORLDVIEW_H&lt;br /&gt;
&lt;br /&gt;
* graphics/Renderer.h&lt;br /&gt;
    #ifndef GRAPHICS_RENDERER_H&lt;br /&gt;
&lt;br /&gt;
== Enum types ==&lt;br /&gt;
&lt;br /&gt;
Enums are effectively global constants, so should be in full caps. They're prefixed with the name of the enum.&lt;br /&gt;
&lt;br /&gt;
Avoid assigning explicit integer values. Also avoid values that aren't actually valid for whatever the enum is (though *_MAX to mark the last valid value is usually acceptable). If these don't work, chances are what you're trying to do would be better served by multiple enums or even a whole class.&lt;br /&gt;
&lt;br /&gt;
    enum Thing {&lt;br /&gt;
        THING_FOO,&lt;br /&gt;
        THING_BAR,&lt;br /&gt;
        THING_BAZ,&lt;br /&gt;
        &lt;br /&gt;
        THING_MAX&lt;br /&gt;
    };&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=1930</id>
		<title>Translations</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=1930"/>
		<updated>2013-11-03T01:39:32Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* For translators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All text in Pioneer is translatable, and the game ships with several translations. Here's everything you need to know.&lt;br /&gt;
&lt;br /&gt;
== For translators ==&lt;br /&gt;
&lt;br /&gt;
All our translations are managed through [http://transifex.com Transifex], a web-based translation service. To start writing translations, sign up there, and then take a look at the [https://www.transifex.com/projects/p/pioneer/ Pioneer project].&lt;br /&gt;
&lt;br /&gt;
Changes to translations are automatically pulled into the master git repo once per day, and from there to the builds when they're next run.&lt;br /&gt;
&lt;br /&gt;
In Transifex you can subscribe to notifications for the languages or resources you're interested in. When new strings are added or modified, you'll be told about it.&lt;br /&gt;
&lt;br /&gt;
If you want to translate Pioneer to an entirely new language, please [https://pioneerspacesim.net/issues open an issue] on the tracker and someone will create the translation for you.&lt;br /&gt;
&lt;br /&gt;
English is the canonical language for Pioneer. As such, you can't directly modify the english strings through Transifex. If you want to change those, you'll need to make the change in git and submit a pull request like normal.&lt;br /&gt;
&lt;br /&gt;
Untranslated strings will use the value from the English version.&lt;br /&gt;
&lt;br /&gt;
You can leave comments in Transifex to help out other translators. You'll also see any notes left by the developers to help you translate a particular string.&lt;br /&gt;
&lt;br /&gt;
If you're a new translator and you'd like your name included in AUTHORS.txt, please let us know!&lt;br /&gt;
&lt;br /&gt;
== For mod developers ==&lt;br /&gt;
&lt;br /&gt;
Each module gets its own translation resource, called &amp;lt;tt&amp;gt;module-foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To get at the strings for your module, do something like:&lt;br /&gt;
&lt;br /&gt;
    local Lang = import(&amp;quot;Lang&amp;quot;)&lt;br /&gt;
    local l = Lang.GetResource(&amp;quot;module-foo&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Then you can get at the string by its token:&lt;br /&gt;
&lt;br /&gt;
    print(l.SOME_TRANSLATED_STRING)&lt;br /&gt;
&lt;br /&gt;
While its possible to load multiple translation resources to share strings, its highly recommended that you don't do that. Stick to your own strings so that you don't have to track changes in other modules. Duplicates across resources are fine. Note that code that uses multiple resources won't be accepted into the main Pioneer repository.&lt;br /&gt;
&lt;br /&gt;
Translations are [https://developer.chrome.com/extensions/i18n.html &amp;lt;tt&amp;gt;chrome.i18n&amp;lt;/tt&amp;gt; JSON] files. The format is fairly simple - an tables of tokens as keys, with values of a table with two keys, &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; is the text that will appear in the game, while &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt; provides instructions for the translator that will be displayed in Transifex.&lt;br /&gt;
&lt;br /&gt;
If you're submitting code that requires a new language resource, please make a note of it in your pull request, and only include &amp;lt;tt&amp;gt;en.json&amp;lt;/tt&amp;gt; in your patch.&lt;br /&gt;
&lt;br /&gt;
== For core developers ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;core&amp;lt;/tt&amp;gt; resource is magical. If you add a string to it, you also need to add it to &amp;lt;tt&amp;gt;LangStrings.inc.h&amp;lt;/tt&amp;gt; and recompile. It will then be available as &amp;lt;tt&amp;gt;Lang::SOME_TRANSLATED_STRING&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=1929</id>
		<title>Translations</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Translations&amp;diff=1929"/>
		<updated>2013-11-03T00:57:56Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All text in Pioneer is translatable, and the game ships with several translations. Here's everything you need to know.&lt;br /&gt;
&lt;br /&gt;
== For translators ==&lt;br /&gt;
&lt;br /&gt;
All our translations are managed through [http://transifex.com Transifex], a web-based translation service. To start writing translations, sign up there, and then take a look at the [https://www.transifex.com/projects/p/pioneer/ Pioneer project].&lt;br /&gt;
&lt;br /&gt;
Changes to translations are automatically pulled into the master git repo once per day, and from there to the builds when they're next run.&lt;br /&gt;
&lt;br /&gt;
In Transifex you can subscribe to notifications for the languages or resources you're interested in. When new strings are added or modified, you'll be told about it.&lt;br /&gt;
&lt;br /&gt;
If you want to translate Pioneer to an entirely new language, please [https://pioneerspacesim.net/issues open an issue] on the tracker and someone will create the translation for you.&lt;br /&gt;
&lt;br /&gt;
English is the canonical language for Pioneer. As such, you can't directly modify the english strings through Transifex. If you want to change those, you'll need to make the change in git and submit a pull request like normal.&lt;br /&gt;
&lt;br /&gt;
Untranslated strings will use the value from the English version.&lt;br /&gt;
&lt;br /&gt;
You can leave comments in Transifex to help out other translators. You'll also see any notes left by the developers to help you translate a particular string.&lt;br /&gt;
&lt;br /&gt;
== For mod developers ==&lt;br /&gt;
&lt;br /&gt;
Each module gets its own translation resource, called &amp;lt;tt&amp;gt;module-foo&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To get at the strings for your module, do something like:&lt;br /&gt;
&lt;br /&gt;
    local Lang = import(&amp;quot;Lang&amp;quot;)&lt;br /&gt;
    local l = Lang.GetResource(&amp;quot;module-foo&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Then you can get at the string by its token:&lt;br /&gt;
&lt;br /&gt;
    print(l.SOME_TRANSLATED_STRING)&lt;br /&gt;
&lt;br /&gt;
While its possible to load multiple translation resources to share strings, its highly recommended that you don't do that. Stick to your own strings so that you don't have to track changes in other modules. Duplicates across resources are fine. Note that code that uses multiple resources won't be accepted into the main Pioneer repository.&lt;br /&gt;
&lt;br /&gt;
Translations are [https://developer.chrome.com/extensions/i18n.html &amp;lt;tt&amp;gt;chrome.i18n&amp;lt;/tt&amp;gt; JSON] files. The format is fairly simple - an tables of tokens as keys, with values of a table with two keys, &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;message&amp;lt;/tt&amp;gt; is the text that will appear in the game, while &amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt; provides instructions for the translator that will be displayed in Transifex.&lt;br /&gt;
&lt;br /&gt;
If you're submitting code that requires a new language resource, please make a note of it in your pull request, and only include &amp;lt;tt&amp;gt;en.json&amp;lt;/tt&amp;gt; in your patch.&lt;br /&gt;
&lt;br /&gt;
== For core developers ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;core&amp;lt;/tt&amp;gt; resource is magical. If you add a string to it, you also need to add it to &amp;lt;tt&amp;gt;LangStrings.inc.h&amp;lt;/tt&amp;gt; and recompile. It will then be available as &amp;lt;tt&amp;gt;Lang::SOME_TRANSLATED_STRING&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=1874</id>
		<title>Model system</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=1874"/>
		<updated>2013-09-24T13:15:52Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Tag points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
tl;dr: a simple scenegraph-based approach that has nothing to do with the old system or Lua, focus is on easy importing, supports some animation.&lt;br /&gt;
&lt;br /&gt;
== Importing models ==&lt;br /&gt;
&lt;br /&gt;
The import system theoretically supports [http://assimp.sourceforge.net/main_features_formats.html many different formats] but you are expected to use only some:&lt;br /&gt;
&lt;br /&gt;
* When node structure, node names and animations matter, use '''Collada (.dae).'''&lt;br /&gt;
* For static geometry, such as buildings, OBJ is recommended, this may allow for some optimizations&lt;br /&gt;
&lt;br /&gt;
The only officially tested 3D modelling program at the moment is [http://www.blender.org/ Blender 2.64]. For blender, a quick checklist is:&lt;br /&gt;
&lt;br /&gt;
* Coordinates: X right, Y forward, Z up&lt;br /&gt;
* Always generate UV coordinates for the model&lt;br /&gt;
* Versions downloaded from blender.org support Collada out of the box, while the version distributed with some Linux distros doesn't&lt;br /&gt;
&lt;br /&gt;
The [[Model viewer]] is supplied with the game.&lt;br /&gt;
&lt;br /&gt;
=== Model definition file ===&lt;br /&gt;
&lt;br /&gt;
Models must be placed under '''data/models'''&lt;br /&gt;
&lt;br /&gt;
To define a model, create a simple &amp;lt;code&amp;gt;name_here.model&amp;lt;/code&amp;gt; text file along with your exported meshes:&lt;br /&gt;
&lt;br /&gt;
 #Comments can be written like this&lt;br /&gt;
 #Define all used materials first&lt;br /&gt;
 Material some-material&lt;br /&gt;
 tex_diff some_texture.png&lt;br /&gt;
 diffuse 0.8 0.7 0.7&lt;br /&gt;
 &lt;br /&gt;
 #Meshes to be imported into this model, should be in the current folder&lt;br /&gt;
 #Mixing different formats should be OK&lt;br /&gt;
 mesh part1.obj&lt;br /&gt;
 mesh part2.obj&lt;br /&gt;
&lt;br /&gt;
== Materials ==&lt;br /&gt;
&lt;br /&gt;
Only material names are imported from 3D models, to set material properties use a small definition like this:&lt;br /&gt;
&lt;br /&gt;
 material CobraI_body&lt;br /&gt;
 tex_diff CobraI_diff.png&lt;br /&gt;
 tex_glow CobraI_emit.png&lt;br /&gt;
 tex_spec CobraI_spec.png&lt;br /&gt;
 diffuse 1.0 1.0 1.0&lt;br /&gt;
 specular 1.0 1.0 1.0&lt;br /&gt;
 shininess 150&lt;br /&gt;
&lt;br /&gt;
=== Material properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| material || Name. Mandatory! Note, some exporters modify the names from what is visible in the modeling program, for example the Blender 2.6 Collada exporter adds &amp;quot;-material&amp;quot; to each name. You'll have to use this final name. If in doubt, note that both .obj and .dae files are human readable, and you can find the assigned names in them with a text editor.&lt;br /&gt;
|-&lt;br /&gt;
| diffuse|| Diffuse colour RGB. Default white.&lt;br /&gt;
|-&lt;br /&gt;
| specular|| Colour of specular highlights, RGB. Default white. Set to black to disable highlights.&lt;br /&gt;
|-&lt;br /&gt;
| emissive|| Self-illumination colour, RGB. Default black.&lt;br /&gt;
|-&lt;br /&gt;
| shininess|| Sharpness/size of specular highlights, 0 - 128. Default 100.&lt;br /&gt;
|-&lt;br /&gt;
| opacity|| 0-100, controls transparency of the material. A node with a material opacity less than 100 is treated as transparent, otherwise opaque.&lt;br /&gt;
|-&lt;br /&gt;
| tex_diff || Diffuse texture, file name (in the same folder). If you don't specify this, a white dummy texture is generated.&lt;br /&gt;
|-&lt;br /&gt;
| tex_glow||Self-illumination texture, overrides emissive colour parameter. Default none.&lt;br /&gt;
|-&lt;br /&gt;
| tex_spec||Specular highlight colour/intensity texture. Default none. Multiplied by specular colour parameter, so set it to white to leave control entirely to the texture.&lt;br /&gt;
|-&lt;br /&gt;
| use_patterns||This material will use the pattern/colour system. Read more below.&lt;br /&gt;
|-&lt;br /&gt;
| unlit||No lighting, diffuse value can still be used to tint the result&lt;br /&gt;
|-&lt;br /&gt;
| two_sided||Self-explanatory, however normals on the other side are not automatically inversed (no good way to do this) so the usefulness is limited&lt;br /&gt;
|-&lt;br /&gt;
| alpha_test||Pixels with alpha value &amp;lt; 0.5 are discarded, this is good for fences and such. It produces sharp edges but the geometry does not need to be sorted.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_specularmap.png]]&lt;br /&gt;
Flat specular lighting improved by a specular map&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_glowmap.png]]&lt;br /&gt;
A model lit only by the self-illumination texture&lt;br /&gt;
&lt;br /&gt;
=== Patterns ===&lt;br /&gt;
&lt;br /&gt;
A system to mark customizable color areas on a model without splitting it to separate materials.&lt;br /&gt;
&lt;br /&gt;
Patterns are small grayscale textures placed in the model folder, named pattern*.png. Using gray or white colour you can mark the areas tinted by one of the customizable colours (black marks unaffected areas). The colours are set by the game (faction-specific ship colours, shipyard UI for the player).&lt;br /&gt;
&lt;br /&gt;
The value ranges are: &lt;br /&gt;
* 0-63: not affecting (black)&lt;br /&gt;
* 64-127: first color (dark gray)&lt;br /&gt;
* 128-191: second color (mid gray)&lt;br /&gt;
* 192-255: third color (light gray/white)&lt;br /&gt;
You can set all three channels to these in RGB, or only the L channel in HSL (Hue, Saturation, Level) to get the needed gray.&lt;br /&gt;
&lt;br /&gt;
Antialiasing (which generates small gradients) can cause artifacts, especially at black-white boundaries. To avoid it, try lowering the contrast on problematic places. Even different grays can be used from the same range, they will indicate the same color.&lt;br /&gt;
&lt;br /&gt;
The system has several limitations: it is not meant to do fine details, transitioning from one color to another is sharp and it works best with white/light textures. You'll have to experiment.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_patterns_asp.png]]&lt;br /&gt;
&lt;br /&gt;
== Detail levels ==&lt;br /&gt;
&lt;br /&gt;
Meshes can be grouped into detail levels using the &amp;lt;code&amp;gt;lod pixelsize&amp;lt;/code&amp;gt; directive:&lt;br /&gt;
&lt;br /&gt;
 lod 100&lt;br /&gt;
 mesh hull_low.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 200&lt;br /&gt;
 mesh hull_med.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 1000&lt;br /&gt;
 mesh hull_hi.dae&lt;br /&gt;
 mesh landing_gear.dae&lt;br /&gt;
&lt;br /&gt;
A detail level will be picked if the approximate radius of the model on screen is less than &amp;lt;code&amp;gt;pixelsize&amp;lt;/code&amp;gt; (for the highest level it does not matter as long as it's larger than the others). Use the modelviewer to find optimal sizes.&lt;br /&gt;
&lt;br /&gt;
You may specify any number of detail levels in any order, they will be sorted according to size.&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
&lt;br /&gt;
Position, rotation and scale keyframe animation is supported. Since the Blender 2.6 Collada exporter cannot export multiple animations in one file, you will have to put it all in one timeline and split it at the import stage (this is also the only reliable way to get named animations). An animation is defined after all the meshes in format &amp;lt;code&amp;gt;anim name startframe endframe&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 anim gear_down 0 10&lt;br /&gt;
 anim something_else 12 25&lt;br /&gt;
&lt;br /&gt;
Note, Collada uses seconds instead of frame numbers. For the conversion to work, you should create the animations at '''24FPS'''.&lt;br /&gt;
&lt;br /&gt;
The game will recognize animations by name, the list of supported animations is to be decided.&lt;br /&gt;
&lt;br /&gt;
There is no animation blending, so two animations shouldn't be directly controlling the same node.&lt;br /&gt;
&lt;br /&gt;
== Attachments ==&lt;br /&gt;
&lt;br /&gt;
Models may have special &amp;quot;tag point&amp;quot; nodes where other models may be attached. You may define a tag point in Blender by placing an Empty object and giving it one of the predefined names.&lt;br /&gt;
&lt;br /&gt;
The system is meant for attaching equipment: guns, cargo pods, turrets...&lt;br /&gt;
&lt;br /&gt;
Example: A generic gun model attached to a point &amp;quot;tag_gun_right&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_tagpoints01.png]]&lt;br /&gt;
&lt;br /&gt;
Tag points have not been fully implemented. If you want to use this feature, please content the devs.&lt;br /&gt;
&lt;br /&gt;
=== Tag points ===&lt;br /&gt;
&lt;br /&gt;
As at 23 September 2013.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera_front&amp;lt;br /&amp;gt;tag_camera_rear&amp;lt;br /&amp;gt;tag_camera_left&amp;lt;br /&amp;gt;tag_camera_right&amp;lt;br /&amp;gt;tag_camera_top&amp;lt;br /&amp;gt;tag_camera_bottom&lt;br /&gt;
|| Position and orientation for the six internal view cameras. X right, Y down, Z &amp;quot;out&amp;quot; of the ship (in the direction the camera is facing). If one is missing, tag_camera will be used with its orientation adjusted for the appropriate direction.&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera || Fallback for the specific camera tags. Useful if you don't want to specify all points. Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
| tag_gunmount_N || Gun positions, X right, Y down, Z &amp;quot;out&amp;quot; of the ship (in the fire direction). Note at this time, only N = 0 or 1 will work, and they correspond to &amp;quot;front&amp;quot; and &amp;quot;rear&amp;quot; guns in the UI. The &amp;quot;max_lasers&amp;quot; ship definition field still takes precedence (ie if max_lasers = 1, tag_gunmount_1 will never be used). Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Collisions ==&lt;br /&gt;
&lt;br /&gt;
By default, the collision mesh of a model is the bounding box of all the meshes.&lt;br /&gt;
&lt;br /&gt;
For more control, name objects with the prefix &amp;quot;collision_&amp;quot; and they will be added to form a collision mesh (these objects will not be visible geometry, and the bounding box will not be generated).&lt;br /&gt;
&lt;br /&gt;
Note, these names are reserved for station collision trigger surfaces:&lt;br /&gt;
&lt;br /&gt;
* collision_pad1&lt;br /&gt;
* collision_pad2&lt;br /&gt;
* collision_pad3&lt;br /&gt;
* collision_pad4&lt;br /&gt;
&lt;br /&gt;
You can also import a separate mesh using the &amp;lt;code&amp;gt;collision&amp;lt;/code&amp;gt; directive in the model definition:&lt;br /&gt;
&lt;br /&gt;
 collision collision.obj&lt;br /&gt;
&lt;br /&gt;
The collision meshis separate from all detail levels, so it should be only defined once.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_collmesh01.png]]&lt;br /&gt;
&lt;br /&gt;
== Decals ==&lt;br /&gt;
&lt;br /&gt;
Decals are meant for customizable insignia on spaceships and changing advertisements on space stations. Up to four unique decals are available for a model (multiple identical decals are allowed). Place a piece of geometry, usually a flat quad, with proper UV coordinates and name it decal_01, 02, 03 or 04. The game will then use a special material on the geometry, or make it invisible if no decal is to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_decals01.png]]&lt;br /&gt;
&lt;br /&gt;
== Labels ==&lt;br /&gt;
&lt;br /&gt;
Dynamic 3D labels are meant for naming ships and space stations. Put an empty node in the model and give it a name beginning with &amp;quot;label&amp;quot;. The text is set by the game at runtime if supported.&lt;br /&gt;
&lt;br /&gt;
Node scale can be used as usual but the text is not constrained to the node bounds or anything like that, so some trial will be required.&lt;br /&gt;
&lt;br /&gt;
You can use multiple label nodes but they will all show the same text.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_labels01.png]]&lt;br /&gt;
&lt;br /&gt;
== Minor features ==&lt;br /&gt;
&lt;br /&gt;
Note, these special nodes are only imported from the most detailed LOD, there is no need to duplicate them. They are rendered outside the detail level system.&lt;br /&gt;
&lt;br /&gt;
=== Billboard lights ===&lt;br /&gt;
&lt;br /&gt;
Simple light sprites placed using empty nodes with special naming (navlight_*). This feature will be more customizable someday, but for now the following name prefixes are recognized:&lt;br /&gt;
&lt;br /&gt;
* navlight_red: blinking red light, with ships when landing gear is down, with stations constantly&lt;br /&gt;
* navlight_green: blinking green light when landing gear is down&lt;br /&gt;
any other navlight_ is blue, on when landing gear is down.&lt;br /&gt;
* space stations, navlight_pad&amp;lt;number&amp;gt; lights change according to landing pad reservation status&lt;br /&gt;
&lt;br /&gt;
=== Thrusters ===&lt;br /&gt;
&lt;br /&gt;
Thrusters are marked with dummy objects. In Blender, create an &amp;quot;Empty&amp;quot; object and point its Z-axis (change the object display type to &amp;quot;arrows&amp;quot; or &amp;quot;single arrow&amp;quot; to visualize this) where the thruster should point. Thruster size is taken from the object scale. Begin the object name with either &amp;lt;code&amp;gt;thruster_&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;thruster_linear&amp;lt;/code&amp;gt; so the importer can recognize them (linear thrusters light up only when moving up/down/left/right/forward/backward, not when turning).&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
&lt;br /&gt;
You can find some testcase models at git://github.com/Luomu/newmodels.git.&lt;br /&gt;
&lt;br /&gt;
The internal scene graph consists of several of these nodes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Node|| Base class. A node can have a name and one or more parents.&lt;br /&gt;
|-&lt;br /&gt;
| Group|| A group is a Node that can have several children.&lt;br /&gt;
|-&lt;br /&gt;
| MatrixTransform|| A Group that applies a transformation to its child nodes when rendering.&lt;br /&gt;
|-&lt;br /&gt;
| StaticGeometry|| Contains one or more StaticMeshes.&lt;br /&gt;
|-&lt;br /&gt;
| LOD|| Detail level control node, picks one of the child nodes based on the approximate size of the model on screen.&lt;br /&gt;
|-&lt;br /&gt;
| ModelNode || Can be used to attach another Model as a submodel. Use case: dynamic equipment on ships.&lt;br /&gt;
|-&lt;br /&gt;
| More!||Some marginal nodes that exist at the moment are:&lt;br /&gt;
&lt;br /&gt;
* Thruster: spaceship thruster&lt;br /&gt;
* Billboard: can be used for light sprites (navlights on ships)&lt;br /&gt;
* Label3D: dynamic 2d text, meant for labeling ships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MatrixTransform nodes are the most commonly used, if a geometry is rotated or scaled it will be parented to a MatrixTransform. A simple form of instancing can be achieved by adding a geometry as the child of several separate MatrixTransforms.&lt;br /&gt;
&lt;br /&gt;
During rendering, the graph is traversed twice. Once for opaque objects, and once for transparent objects (which includes decals, thrusters). The model system does not perform any depth sorting, this improvement job needs to be done elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
An animation consists of Channels. Each channel controls one node (always a MatrixTransform) and has a list of position and rotation Keys. Each key has a time and value. Keys are always linearly interpolated.&lt;br /&gt;
&lt;br /&gt;
At first the animations had proper play/pause/loop functionality but right now it is not so. Animation progress (and fun things like serialization) needs to be controlled directly by whatever feature uses the animation (see: landing gear).&lt;br /&gt;
&lt;br /&gt;
=== Export settings ===&lt;br /&gt;
&lt;br /&gt;
Collada (.dae) export settings for Blender 2.6:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_exportsettings01.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=1873</id>
		<title>Model system</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=1873"/>
		<updated>2013-09-24T13:10:50Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Tag points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
tl;dr: a simple scenegraph-based approach that has nothing to do with the old system or Lua, focus is on easy importing, supports some animation.&lt;br /&gt;
&lt;br /&gt;
== Importing models ==&lt;br /&gt;
&lt;br /&gt;
The import system theoretically supports [http://assimp.sourceforge.net/main_features_formats.html many different formats] but you are expected to use only some:&lt;br /&gt;
&lt;br /&gt;
* When node structure, node names and animations matter, use '''Collada (.dae).'''&lt;br /&gt;
* For static geometry, such as buildings, OBJ is recommended, this may allow for some optimizations&lt;br /&gt;
&lt;br /&gt;
The only officially tested 3D modelling program at the moment is [http://www.blender.org/ Blender 2.64]. For blender, a quick checklist is:&lt;br /&gt;
&lt;br /&gt;
* Coordinates: X right, Y forward, Z up&lt;br /&gt;
* Always generate UV coordinates for the model&lt;br /&gt;
* Versions downloaded from blender.org support Collada out of the box, while the version distributed with some Linux distros doesn't&lt;br /&gt;
&lt;br /&gt;
The [[Model viewer]] is supplied with the game.&lt;br /&gt;
&lt;br /&gt;
=== Model definition file ===&lt;br /&gt;
&lt;br /&gt;
Models must be placed under '''data/models'''&lt;br /&gt;
&lt;br /&gt;
To define a model, create a simple &amp;lt;code&amp;gt;name_here.model&amp;lt;/code&amp;gt; text file along with your exported meshes:&lt;br /&gt;
&lt;br /&gt;
 #Comments can be written like this&lt;br /&gt;
 #Define all used materials first&lt;br /&gt;
 Material some-material&lt;br /&gt;
 tex_diff some_texture.png&lt;br /&gt;
 diffuse 0.8 0.7 0.7&lt;br /&gt;
 &lt;br /&gt;
 #Meshes to be imported into this model, should be in the current folder&lt;br /&gt;
 #Mixing different formats should be OK&lt;br /&gt;
 mesh part1.obj&lt;br /&gt;
 mesh part2.obj&lt;br /&gt;
&lt;br /&gt;
== Materials ==&lt;br /&gt;
&lt;br /&gt;
Only material names are imported from 3D models, to set material properties use a small definition like this:&lt;br /&gt;
&lt;br /&gt;
 material CobraI_body&lt;br /&gt;
 tex_diff CobraI_diff.png&lt;br /&gt;
 tex_glow CobraI_emit.png&lt;br /&gt;
 tex_spec CobraI_spec.png&lt;br /&gt;
 diffuse 1.0 1.0 1.0&lt;br /&gt;
 specular 1.0 1.0 1.0&lt;br /&gt;
 shininess 150&lt;br /&gt;
&lt;br /&gt;
=== Material properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| material || Name. Mandatory! Note, some exporters modify the names from what is visible in the modeling program, for example the Blender 2.6 Collada exporter adds &amp;quot;-material&amp;quot; to each name. You'll have to use this final name. If in doubt, note that both .obj and .dae files are human readable, and you can find the assigned names in them with a text editor.&lt;br /&gt;
|-&lt;br /&gt;
| diffuse|| Diffuse colour RGB. Default white.&lt;br /&gt;
|-&lt;br /&gt;
| specular|| Colour of specular highlights, RGB. Default white. Set to black to disable highlights.&lt;br /&gt;
|-&lt;br /&gt;
| emissive|| Self-illumination colour, RGB. Default black.&lt;br /&gt;
|-&lt;br /&gt;
| shininess|| Sharpness/size of specular highlights, 0 - 128. Default 100.&lt;br /&gt;
|-&lt;br /&gt;
| opacity|| 0-100, controls transparency of the material. A node with a material opacity less than 100 is treated as transparent, otherwise opaque.&lt;br /&gt;
|-&lt;br /&gt;
| tex_diff || Diffuse texture, file name (in the same folder). If you don't specify this, a white dummy texture is generated.&lt;br /&gt;
|-&lt;br /&gt;
| tex_glow||Self-illumination texture, overrides emissive colour parameter. Default none.&lt;br /&gt;
|-&lt;br /&gt;
| tex_spec||Specular highlight colour/intensity texture. Default none. Multiplied by specular colour parameter, so set it to white to leave control entirely to the texture.&lt;br /&gt;
|-&lt;br /&gt;
| use_patterns||This material will use the pattern/colour system. Read more below.&lt;br /&gt;
|-&lt;br /&gt;
| unlit||No lighting, diffuse value can still be used to tint the result&lt;br /&gt;
|-&lt;br /&gt;
| two_sided||Self-explanatory, however normals on the other side are not automatically inversed (no good way to do this) so the usefulness is limited&lt;br /&gt;
|-&lt;br /&gt;
| alpha_test||Pixels with alpha value &amp;lt; 0.5 are discarded, this is good for fences and such. It produces sharp edges but the geometry does not need to be sorted.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_specularmap.png]]&lt;br /&gt;
Flat specular lighting improved by a specular map&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_glowmap.png]]&lt;br /&gt;
A model lit only by the self-illumination texture&lt;br /&gt;
&lt;br /&gt;
=== Patterns ===&lt;br /&gt;
&lt;br /&gt;
A system to mark customizable color areas on a model without splitting it to separate materials.&lt;br /&gt;
&lt;br /&gt;
Patterns are small grayscale textures placed in the model folder, named pattern*.png. Using gray or white colour you can mark the areas tinted by one of the customizable colours (black marks unaffected areas). The colours are set by the game (faction-specific ship colours, shipyard UI for the player).&lt;br /&gt;
&lt;br /&gt;
The value ranges are: &lt;br /&gt;
* 0-63: not affecting (black)&lt;br /&gt;
* 64-127: first color (dark gray)&lt;br /&gt;
* 128-191: second color (mid gray)&lt;br /&gt;
* 192-255: third color (light gray/white)&lt;br /&gt;
You can set all three channels to these in RGB, or only the L channel in HSL (Hue, Saturation, Level) to get the needed gray.&lt;br /&gt;
&lt;br /&gt;
Antialiasing (which generates small gradients) can cause artifacts, especially at black-white boundaries. To avoid it, try lowering the contrast on problematic places. Even different grays can be used from the same range, they will indicate the same color.&lt;br /&gt;
&lt;br /&gt;
The system has several limitations: it is not meant to do fine details, transitioning from one color to another is sharp and it works best with white/light textures. You'll have to experiment.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_patterns_asp.png]]&lt;br /&gt;
&lt;br /&gt;
== Detail levels ==&lt;br /&gt;
&lt;br /&gt;
Meshes can be grouped into detail levels using the &amp;lt;code&amp;gt;lod pixelsize&amp;lt;/code&amp;gt; directive:&lt;br /&gt;
&lt;br /&gt;
 lod 100&lt;br /&gt;
 mesh hull_low.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 200&lt;br /&gt;
 mesh hull_med.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 1000&lt;br /&gt;
 mesh hull_hi.dae&lt;br /&gt;
 mesh landing_gear.dae&lt;br /&gt;
&lt;br /&gt;
A detail level will be picked if the approximate radius of the model on screen is less than &amp;lt;code&amp;gt;pixelsize&amp;lt;/code&amp;gt; (for the highest level it does not matter as long as it's larger than the others). Use the modelviewer to find optimal sizes.&lt;br /&gt;
&lt;br /&gt;
You may specify any number of detail levels in any order, they will be sorted according to size.&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
&lt;br /&gt;
Position, rotation and scale keyframe animation is supported. Since the Blender 2.6 Collada exporter cannot export multiple animations in one file, you will have to put it all in one timeline and split it at the import stage (this is also the only reliable way to get named animations). An animation is defined after all the meshes in format &amp;lt;code&amp;gt;anim name startframe endframe&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 anim gear_down 0 10&lt;br /&gt;
 anim something_else 12 25&lt;br /&gt;
&lt;br /&gt;
Note, Collada uses seconds instead of frame numbers. For the conversion to work, you should create the animations at '''24FPS'''.&lt;br /&gt;
&lt;br /&gt;
The game will recognize animations by name, the list of supported animations is to be decided.&lt;br /&gt;
&lt;br /&gt;
There is no animation blending, so two animations shouldn't be directly controlling the same node.&lt;br /&gt;
&lt;br /&gt;
== Attachments ==&lt;br /&gt;
&lt;br /&gt;
Models may have special &amp;quot;tag point&amp;quot; nodes where other models may be attached. You may define a tag point in Blender by placing an Empty object and giving it one of the predefined names.&lt;br /&gt;
&lt;br /&gt;
The system is meant for attaching equipment: guns, cargo pods, turrets...&lt;br /&gt;
&lt;br /&gt;
Example: A generic gun model attached to a point &amp;quot;tag_gun_right&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_tagpoints01.png]]&lt;br /&gt;
&lt;br /&gt;
Tag points have not been fully implemented. If you want to use this feature, please content the devs.&lt;br /&gt;
&lt;br /&gt;
=== Tag points ===&lt;br /&gt;
&lt;br /&gt;
As at 23 September 2013.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera_front&amp;lt;br /&amp;gt;tag_camera_rear&amp;lt;br /&amp;gt;tag_camera_left&amp;lt;br /&amp;gt;tag_camera_right&amp;lt;br /&amp;gt;tag_camera_top&amp;lt;br /&amp;gt;tag_camera_bottom&lt;br /&gt;
|| Position and orientation for the six internal view cameras. X right, Y down, Z &amp;quot;out&amp;quot; of the ship (in the direction the camera is facing). If one is missing, tag_camera will be used with its orientation adjusted for the appropriate direction.&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera || Fallback for the specific camera tags. Useful if you don't want to specify all points. Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
| tag_gunpoint_N || Gun positions, X right, Y down, Z &amp;quot;out&amp;quot; of the ship (in the fire direction). Note at this time, only N = 0 or 1 will work, and they correspond to &amp;quot;front&amp;quot; and &amp;quot;rear&amp;quot; guns in the UI. The &amp;quot;max_lasers&amp;quot; ship definition field still takes precedence (ie if max_lasers = 1, tag_gunpoint_1 will never be used). Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Collisions ==&lt;br /&gt;
&lt;br /&gt;
By default, the collision mesh of a model is the bounding box of all the meshes.&lt;br /&gt;
&lt;br /&gt;
For more control, name objects with the prefix &amp;quot;collision_&amp;quot; and they will be added to form a collision mesh (these objects will not be visible geometry, and the bounding box will not be generated).&lt;br /&gt;
&lt;br /&gt;
Note, these names are reserved for station collision trigger surfaces:&lt;br /&gt;
&lt;br /&gt;
* collision_pad1&lt;br /&gt;
* collision_pad2&lt;br /&gt;
* collision_pad3&lt;br /&gt;
* collision_pad4&lt;br /&gt;
&lt;br /&gt;
You can also import a separate mesh using the &amp;lt;code&amp;gt;collision&amp;lt;/code&amp;gt; directive in the model definition:&lt;br /&gt;
&lt;br /&gt;
 collision collision.obj&lt;br /&gt;
&lt;br /&gt;
The collision meshis separate from all detail levels, so it should be only defined once.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_collmesh01.png]]&lt;br /&gt;
&lt;br /&gt;
== Decals ==&lt;br /&gt;
&lt;br /&gt;
Decals are meant for customizable insignia on spaceships and changing advertisements on space stations. Up to four unique decals are available for a model (multiple identical decals are allowed). Place a piece of geometry, usually a flat quad, with proper UV coordinates and name it decal_01, 02, 03 or 04. The game will then use a special material on the geometry, or make it invisible if no decal is to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_decals01.png]]&lt;br /&gt;
&lt;br /&gt;
== Labels ==&lt;br /&gt;
&lt;br /&gt;
Dynamic 3D labels are meant for naming ships and space stations. Put an empty node in the model and give it a name beginning with &amp;quot;label&amp;quot;. The text is set by the game at runtime if supported.&lt;br /&gt;
&lt;br /&gt;
Node scale can be used as usual but the text is not constrained to the node bounds or anything like that, so some trial will be required.&lt;br /&gt;
&lt;br /&gt;
You can use multiple label nodes but they will all show the same text.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_labels01.png]]&lt;br /&gt;
&lt;br /&gt;
== Minor features ==&lt;br /&gt;
&lt;br /&gt;
Note, these special nodes are only imported from the most detailed LOD, there is no need to duplicate them. They are rendered outside the detail level system.&lt;br /&gt;
&lt;br /&gt;
=== Billboard lights ===&lt;br /&gt;
&lt;br /&gt;
Simple light sprites placed using empty nodes with special naming (navlight_*). This feature will be more customizable someday, but for now the following name prefixes are recognized:&lt;br /&gt;
&lt;br /&gt;
* navlight_red: blinking red light, with ships when landing gear is down, with stations constantly&lt;br /&gt;
* navlight_green: blinking green light when landing gear is down&lt;br /&gt;
any other navlight_ is blue, on when landing gear is down.&lt;br /&gt;
* space stations, navlight_pad&amp;lt;number&amp;gt; lights change according to landing pad reservation status&lt;br /&gt;
&lt;br /&gt;
=== Thrusters ===&lt;br /&gt;
&lt;br /&gt;
Thrusters are marked with dummy objects. In Blender, create an &amp;quot;Empty&amp;quot; object and point its Z-axis (change the object display type to &amp;quot;arrows&amp;quot; or &amp;quot;single arrow&amp;quot; to visualize this) where the thruster should point. Thruster size is taken from the object scale. Begin the object name with either &amp;lt;code&amp;gt;thruster_&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;thruster_linear&amp;lt;/code&amp;gt; so the importer can recognize them (linear thrusters light up only when moving up/down/left/right/forward/backward, not when turning).&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
&lt;br /&gt;
You can find some testcase models at git://github.com/Luomu/newmodels.git.&lt;br /&gt;
&lt;br /&gt;
The internal scene graph consists of several of these nodes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Node|| Base class. A node can have a name and one or more parents.&lt;br /&gt;
|-&lt;br /&gt;
| Group|| A group is a Node that can have several children.&lt;br /&gt;
|-&lt;br /&gt;
| MatrixTransform|| A Group that applies a transformation to its child nodes when rendering.&lt;br /&gt;
|-&lt;br /&gt;
| StaticGeometry|| Contains one or more StaticMeshes.&lt;br /&gt;
|-&lt;br /&gt;
| LOD|| Detail level control node, picks one of the child nodes based on the approximate size of the model on screen.&lt;br /&gt;
|-&lt;br /&gt;
| ModelNode || Can be used to attach another Model as a submodel. Use case: dynamic equipment on ships.&lt;br /&gt;
|-&lt;br /&gt;
| More!||Some marginal nodes that exist at the moment are:&lt;br /&gt;
&lt;br /&gt;
* Thruster: spaceship thruster&lt;br /&gt;
* Billboard: can be used for light sprites (navlights on ships)&lt;br /&gt;
* Label3D: dynamic 2d text, meant for labeling ships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MatrixTransform nodes are the most commonly used, if a geometry is rotated or scaled it will be parented to a MatrixTransform. A simple form of instancing can be achieved by adding a geometry as the child of several separate MatrixTransforms.&lt;br /&gt;
&lt;br /&gt;
During rendering, the graph is traversed twice. Once for opaque objects, and once for transparent objects (which includes decals, thrusters). The model system does not perform any depth sorting, this improvement job needs to be done elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
An animation consists of Channels. Each channel controls one node (always a MatrixTransform) and has a list of position and rotation Keys. Each key has a time and value. Keys are always linearly interpolated.&lt;br /&gt;
&lt;br /&gt;
At first the animations had proper play/pause/loop functionality but right now it is not so. Animation progress (and fun things like serialization) needs to be controlled directly by whatever feature uses the animation (see: landing gear).&lt;br /&gt;
&lt;br /&gt;
=== Export settings ===&lt;br /&gt;
&lt;br /&gt;
Collada (.dae) export settings for Blender 2.6:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_exportsettings01.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=1872</id>
		<title>Model system</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Model_system&amp;diff=1872"/>
		<updated>2013-09-23T00:10:58Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
tl;dr: a simple scenegraph-based approach that has nothing to do with the old system or Lua, focus is on easy importing, supports some animation.&lt;br /&gt;
&lt;br /&gt;
== Importing models ==&lt;br /&gt;
&lt;br /&gt;
The import system theoretically supports [http://assimp.sourceforge.net/main_features_formats.html many different formats] but you are expected to use only some:&lt;br /&gt;
&lt;br /&gt;
* When node structure, node names and animations matter, use '''Collada (.dae).'''&lt;br /&gt;
* For static geometry, such as buildings, OBJ is recommended, this may allow for some optimizations&lt;br /&gt;
&lt;br /&gt;
The only officially tested 3D modelling program at the moment is [http://www.blender.org/ Blender 2.64]. For blender, a quick checklist is:&lt;br /&gt;
&lt;br /&gt;
* Coordinates: X right, Y forward, Z up&lt;br /&gt;
* Always generate UV coordinates for the model&lt;br /&gt;
* Versions downloaded from blender.org support Collada out of the box, while the version distributed with some Linux distros doesn't&lt;br /&gt;
&lt;br /&gt;
The [[Model viewer]] is supplied with the game.&lt;br /&gt;
&lt;br /&gt;
=== Model definition file ===&lt;br /&gt;
&lt;br /&gt;
Models must be placed under '''data/models'''&lt;br /&gt;
&lt;br /&gt;
To define a model, create a simple &amp;lt;code&amp;gt;name_here.model&amp;lt;/code&amp;gt; text file along with your exported meshes:&lt;br /&gt;
&lt;br /&gt;
 #Comments can be written like this&lt;br /&gt;
 #Define all used materials first&lt;br /&gt;
 Material some-material&lt;br /&gt;
 tex_diff some_texture.png&lt;br /&gt;
 diffuse 0.8 0.7 0.7&lt;br /&gt;
 &lt;br /&gt;
 #Meshes to be imported into this model, should be in the current folder&lt;br /&gt;
 #Mixing different formats should be OK&lt;br /&gt;
 mesh part1.obj&lt;br /&gt;
 mesh part2.obj&lt;br /&gt;
&lt;br /&gt;
== Materials ==&lt;br /&gt;
&lt;br /&gt;
Only material names are imported from 3D models, to set material properties use a small definition like this:&lt;br /&gt;
&lt;br /&gt;
 material CobraI_body&lt;br /&gt;
 tex_diff CobraI_diff.png&lt;br /&gt;
 tex_glow CobraI_emit.png&lt;br /&gt;
 tex_spec CobraI_spec.png&lt;br /&gt;
 diffuse 1.0 1.0 1.0&lt;br /&gt;
 specular 1.0 1.0 1.0&lt;br /&gt;
 shininess 150&lt;br /&gt;
&lt;br /&gt;
=== Material properties ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| material || Name. Mandatory! Note, some exporters modify the names from what is visible in the modeling program, for example the Blender 2.6 Collada exporter adds &amp;quot;-material&amp;quot; to each name. You'll have to use this final name. If in doubt, note that both .obj and .dae files are human readable, and you can find the assigned names in them with a text editor.&lt;br /&gt;
|-&lt;br /&gt;
| diffuse|| Diffuse colour RGB. Default white.&lt;br /&gt;
|-&lt;br /&gt;
| specular|| Colour of specular highlights, RGB. Default white. Set to black to disable highlights.&lt;br /&gt;
|-&lt;br /&gt;
| emissive|| Self-illumination colour, RGB. Default black.&lt;br /&gt;
|-&lt;br /&gt;
| shininess|| Sharpness/size of specular highlights, 0 - 128. Default 100.&lt;br /&gt;
|-&lt;br /&gt;
| opacity|| 0-100, controls transparency of the material. A node with a material opacity less than 100 is treated as transparent, otherwise opaque.&lt;br /&gt;
|-&lt;br /&gt;
| tex_diff || Diffuse texture, file name (in the same folder). If you don't specify this, a white dummy texture is generated.&lt;br /&gt;
|-&lt;br /&gt;
| tex_glow||Self-illumination texture, overrides emissive colour parameter. Default none.&lt;br /&gt;
|-&lt;br /&gt;
| tex_spec||Specular highlight colour/intensity texture. Default none. Multiplied by specular colour parameter, so set it to white to leave control entirely to the texture.&lt;br /&gt;
|-&lt;br /&gt;
| use_patterns||This material will use the pattern/colour system. Read more below.&lt;br /&gt;
|-&lt;br /&gt;
| unlit||No lighting, diffuse value can still be used to tint the result&lt;br /&gt;
|-&lt;br /&gt;
| two_sided||Self-explanatory, however normals on the other side are not automatically inversed (no good way to do this) so the usefulness is limited&lt;br /&gt;
|-&lt;br /&gt;
| alpha_test||Pixels with alpha value &amp;lt; 0.5 are discarded, this is good for fences and such. It produces sharp edges but the geometry does not need to be sorted.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_specularmap.png]]&lt;br /&gt;
Flat specular lighting improved by a specular map&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_glowmap.png]]&lt;br /&gt;
A model lit only by the self-illumination texture&lt;br /&gt;
&lt;br /&gt;
=== Patterns ===&lt;br /&gt;
&lt;br /&gt;
A system to mark customizable color areas on a model without splitting it to separate materials.&lt;br /&gt;
&lt;br /&gt;
Patterns are small grayscale textures placed in the model folder, named pattern*.png. Using gray or white colour you can mark the areas tinted by one of the customizable colours (black marks unaffected areas). The colours are set by the game (faction-specific ship colours, shipyard UI for the player).&lt;br /&gt;
&lt;br /&gt;
The value ranges are: &lt;br /&gt;
* 0-63: not affecting (black)&lt;br /&gt;
* 64-127: first color (dark gray)&lt;br /&gt;
* 128-191: second color (mid gray)&lt;br /&gt;
* 192-255: third color (light gray/white)&lt;br /&gt;
You can set all three channels to these in RGB, or only the L channel in HSL (Hue, Saturation, Level) to get the needed gray.&lt;br /&gt;
&lt;br /&gt;
Antialiasing (which generates small gradients) can cause artifacts, especially at black-white boundaries. To avoid it, try lowering the contrast on problematic places. Even different grays can be used from the same range, they will indicate the same color.&lt;br /&gt;
&lt;br /&gt;
The system has several limitations: it is not meant to do fine details, transitioning from one color to another is sharp and it works best with white/light textures. You'll have to experiment.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_patterns_asp.png]]&lt;br /&gt;
&lt;br /&gt;
== Detail levels ==&lt;br /&gt;
&lt;br /&gt;
Meshes can be grouped into detail levels using the &amp;lt;code&amp;gt;lod pixelsize&amp;lt;/code&amp;gt; directive:&lt;br /&gt;
&lt;br /&gt;
 lod 100&lt;br /&gt;
 mesh hull_low.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 200&lt;br /&gt;
 mesh hull_med.dae&lt;br /&gt;
 &lt;br /&gt;
 lod 1000&lt;br /&gt;
 mesh hull_hi.dae&lt;br /&gt;
 mesh landing_gear.dae&lt;br /&gt;
&lt;br /&gt;
A detail level will be picked if the approximate radius of the model on screen is less than &amp;lt;code&amp;gt;pixelsize&amp;lt;/code&amp;gt; (for the highest level it does not matter as long as it's larger than the others). Use the modelviewer to find optimal sizes.&lt;br /&gt;
&lt;br /&gt;
You may specify any number of detail levels in any order, they will be sorted according to size.&lt;br /&gt;
&lt;br /&gt;
== Animations ==&lt;br /&gt;
&lt;br /&gt;
Position, rotation and scale keyframe animation is supported. Since the Blender 2.6 Collada exporter cannot export multiple animations in one file, you will have to put it all in one timeline and split it at the import stage (this is also the only reliable way to get named animations). An animation is defined after all the meshes in format &amp;lt;code&amp;gt;anim name startframe endframe&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 anim gear_down 0 10&lt;br /&gt;
 anim something_else 12 25&lt;br /&gt;
&lt;br /&gt;
Note, Collada uses seconds instead of frame numbers. For the conversion to work, you should create the animations at '''24FPS'''.&lt;br /&gt;
&lt;br /&gt;
The game will recognize animations by name, the list of supported animations is to be decided.&lt;br /&gt;
&lt;br /&gt;
There is no animation blending, so two animations shouldn't be directly controlling the same node.&lt;br /&gt;
&lt;br /&gt;
== Attachments ==&lt;br /&gt;
&lt;br /&gt;
Models may have special &amp;quot;tag point&amp;quot; nodes where other models may be attached. You may define a tag point in Blender by placing an Empty object and giving it one of the predefined names.&lt;br /&gt;
&lt;br /&gt;
The system is meant for attaching equipment: guns, cargo pods, turrets...&lt;br /&gt;
&lt;br /&gt;
Example: A generic gun model attached to a point &amp;quot;tag_gun_right&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_tagpoints01.png]]&lt;br /&gt;
&lt;br /&gt;
Tag points have not been fully implemented. If you want to use this feature, please content the devs.&lt;br /&gt;
&lt;br /&gt;
=== Tag points ===&lt;br /&gt;
&lt;br /&gt;
As at 23 September 2013.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera_front&amp;lt;br /&amp;gt;tag_camera_rear&amp;lt;br /&amp;gt;tag_camera_left&amp;lt;br /&amp;gt;tag_camera_right&amp;lt;br /&amp;gt;tag_camera_top&amp;lt;br /&amp;gt;tag_camera_bottom&lt;br /&gt;
|| Position and orientation for the six internal view cameras. X left, Y up, Z &amp;quot;out&amp;quot; of the ship (in the direction the camera is facing). If one is missing, tag_camera will be used with its orientation adjusted for the appropriate direction.&lt;br /&gt;
|-&lt;br /&gt;
| tag_camera || Fallback for the specific camera tags. Useful if you don't want to specify all points. Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
| tag_gunpoint_N || Gun positions, X left, Y up, Z &amp;quot;out&amp;quot; of the ship (in the fire direction). Note at this time, only N = 0 or 1 will work, and they correspond to &amp;quot;front&amp;quot; and &amp;quot;rear&amp;quot; guns in the UI. The &amp;quot;max_lasers&amp;quot; ship definition field still takes precedence (ie if max_lasers = 1, tag_gunpoint_1 will never be used). Defaults to the ship origin.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Collisions ==&lt;br /&gt;
&lt;br /&gt;
By default, the collision mesh of a model is the bounding box of all the meshes.&lt;br /&gt;
&lt;br /&gt;
For more control, name objects with the prefix &amp;quot;collision_&amp;quot; and they will be added to form a collision mesh (these objects will not be visible geometry, and the bounding box will not be generated).&lt;br /&gt;
&lt;br /&gt;
Note, these names are reserved for station collision trigger surfaces:&lt;br /&gt;
&lt;br /&gt;
* collision_pad1&lt;br /&gt;
* collision_pad2&lt;br /&gt;
* collision_pad3&lt;br /&gt;
* collision_pad4&lt;br /&gt;
&lt;br /&gt;
You can also import a separate mesh using the &amp;lt;code&amp;gt;collision&amp;lt;/code&amp;gt; directive in the model definition:&lt;br /&gt;
&lt;br /&gt;
 collision collision.obj&lt;br /&gt;
&lt;br /&gt;
The collision meshis separate from all detail levels, so it should be only defined once.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_collmesh01.png]]&lt;br /&gt;
&lt;br /&gt;
== Decals ==&lt;br /&gt;
&lt;br /&gt;
Decals are meant for customizable insignia on spaceships and changing advertisements on space stations. Up to four unique decals are available for a model (multiple identical decals are allowed). Place a piece of geometry, usually a flat quad, with proper UV coordinates and name it decal_01, 02, 03 or 04. The game will then use a special material on the geometry, or make it invisible if no decal is to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_decals01.png]]&lt;br /&gt;
&lt;br /&gt;
== Labels ==&lt;br /&gt;
&lt;br /&gt;
Dynamic 3D labels are meant for naming ships and space stations. Put an empty node in the model and give it a name beginning with &amp;quot;label&amp;quot;. The text is set by the game at runtime if supported.&lt;br /&gt;
&lt;br /&gt;
Node scale can be used as usual but the text is not constrained to the node bounds or anything like that, so some trial will be required.&lt;br /&gt;
&lt;br /&gt;
You can use multiple label nodes but they will all show the same text.&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_labels01.png]]&lt;br /&gt;
&lt;br /&gt;
== Minor features ==&lt;br /&gt;
&lt;br /&gt;
Note, these special nodes are only imported from the most detailed LOD, there is no need to duplicate them. They are rendered outside the detail level system.&lt;br /&gt;
&lt;br /&gt;
=== Billboard lights ===&lt;br /&gt;
&lt;br /&gt;
Simple light sprites placed using empty nodes with special naming (navlight_*). This feature will be more customizable someday, but for now the following name prefixes are recognized:&lt;br /&gt;
&lt;br /&gt;
* navlight_red: blinking red light, with ships when landing gear is down, with stations constantly&lt;br /&gt;
* navlight_green: blinking green light when landing gear is down&lt;br /&gt;
any other navlight_ is blue, on when landing gear is down.&lt;br /&gt;
* space stations, navlight_pad&amp;lt;number&amp;gt; lights change according to landing pad reservation status&lt;br /&gt;
&lt;br /&gt;
=== Thrusters ===&lt;br /&gt;
&lt;br /&gt;
Thrusters are marked with dummy objects. In Blender, create an &amp;quot;Empty&amp;quot; object and point its Z-axis (change the object display type to &amp;quot;arrows&amp;quot; or &amp;quot;single arrow&amp;quot; to visualize this) where the thruster should point. Thruster size is taken from the object scale. Begin the object name with either &amp;lt;code&amp;gt;thruster_&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;thruster_linear&amp;lt;/code&amp;gt; so the importer can recognize them (linear thrusters light up only when moving up/down/left/right/forward/backward, not when turning).&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
&lt;br /&gt;
You can find some testcase models at git://github.com/Luomu/newmodels.git.&lt;br /&gt;
&lt;br /&gt;
The internal scene graph consists of several of these nodes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Node|| Base class. A node can have a name and one or more parents.&lt;br /&gt;
|-&lt;br /&gt;
| Group|| A group is a Node that can have several children.&lt;br /&gt;
|-&lt;br /&gt;
| MatrixTransform|| A Group that applies a transformation to its child nodes when rendering.&lt;br /&gt;
|-&lt;br /&gt;
| StaticGeometry|| Contains one or more StaticMeshes.&lt;br /&gt;
|-&lt;br /&gt;
| LOD|| Detail level control node, picks one of the child nodes based on the approximate size of the model on screen.&lt;br /&gt;
|-&lt;br /&gt;
| ModelNode || Can be used to attach another Model as a submodel. Use case: dynamic equipment on ships.&lt;br /&gt;
|-&lt;br /&gt;
| More!||Some marginal nodes that exist at the moment are:&lt;br /&gt;
&lt;br /&gt;
* Thruster: spaceship thruster&lt;br /&gt;
* Billboard: can be used for light sprites (navlights on ships)&lt;br /&gt;
* Label3D: dynamic 2d text, meant for labeling ships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MatrixTransform nodes are the most commonly used, if a geometry is rotated or scaled it will be parented to a MatrixTransform. A simple form of instancing can be achieved by adding a geometry as the child of several separate MatrixTransforms.&lt;br /&gt;
&lt;br /&gt;
During rendering, the graph is traversed twice. Once for opaque objects, and once for transparent objects (which includes decals, thrusters). The model system does not perform any depth sorting, this improvement job needs to be done elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
An animation consists of Channels. Each channel controls one node (always a MatrixTransform) and has a list of position and rotation Keys. Each key has a time and value. Keys are always linearly interpolated.&lt;br /&gt;
&lt;br /&gt;
At first the animations had proper play/pause/loop functionality but right now it is not so. Animation progress (and fun things like serialization) needs to be controlled directly by whatever feature uses the animation (see: landing gear).&lt;br /&gt;
&lt;br /&gt;
=== Export settings ===&lt;br /&gt;
&lt;br /&gt;
Collada (.dae) export settings for Blender 2.6:&lt;br /&gt;
&lt;br /&gt;
[[File:newmodel_exportsettings01.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Natrix&amp;diff=1476</id>
		<title>Natrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Natrix&amp;diff=1476"/>
		<updated>2013-08-17T10:47:34Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox_Ship&lt;br /&gt;
|name= Natrix&lt;br /&gt;
|type= Starter &lt;br /&gt;
|image = [[File:Natrixshape.png|center|300px]][[File:Natrix.png|center|300px]]&lt;br /&gt;
|manufacturer = OPLI-Barnard Inc.&lt;br /&gt;
|forward_thrust = 124e5&lt;br /&gt;
|reverse_thrust = 21e5&lt;br /&gt;
|up_thrust = 21e5&lt;br /&gt;
|down_thrust = 21e5&lt;br /&gt;
|left_thrust = 21e5&lt;br /&gt;
|right_thrust = 21e5&lt;br /&gt;
|angular_thrust = 195e5&lt;br /&gt;
|gun_mounts = 1&lt;br /&gt;
|max_atmoshield = 0&lt;br /&gt;
|max_cargo = 40&lt;br /&gt;
|max_laser = 1&lt;br /&gt;
|max_missile = 0&lt;br /&gt;
|max_cargoscoop = 0&lt;br /&gt;
|max_fuelscoop = 0&lt;br /&gt;
|max_engine = yes&lt;br /&gt;
|min_crew = 1&lt;br /&gt;
|max_crew = 1&lt;br /&gt;
|capacity = 40&lt;br /&gt;
|hull_mass = 15&lt;br /&gt;
|fuel_tank_mass = 36&lt;br /&gt;
|effective_exhaust_velocity = 62143e3&lt;br /&gt;
|price = 50000&lt;br /&gt;
|hyperdrive_class = 2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
The Natrix is a small multi-role craft. As a cheap vessel with limited cargo space, it is most often used by first-time pilots hoping to eke out a living as interstellar traders.  The more ambitious often hope to begin with this small craft, and earn their fortune over time.  A few may even hope to abandon the trading life, in search of some grand interstellar adventure.&lt;br /&gt;
&lt;br /&gt;
[[Category:Ships]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Pioneer_Wiki&amp;diff=1407</id>
		<title>Pioneer Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Pioneer_Wiki&amp;diff=1407"/>
		<updated>2013-07-04T08:47:20Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pioneer is a space adventure game set in the milkyway galaxy at the turn of the 31st century. The game is open-ended, and you are free to explore the millions of star systems in the game. You can land on planets, slingshot past gas giants, and burn yourself to a crisp flying between binary star systems.&lt;br /&gt;
&lt;br /&gt;
If you are new to pioneer you may want to know [[How to start| how to start]].&lt;br /&gt;
&lt;br /&gt;
* [http://pioneerspacesim.net/download Download Pioneer] for Windows, Linux and Mac OSX&lt;br /&gt;
&lt;br /&gt;
Please make this wiki nice. Add stuff about mods, dev, whatever. Be awesome! [[Getting started|How to get started]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{|width=100%&lt;br /&gt;
|width=&amp;quot;33%&amp;quot; style=&amp;quot;background:#bbffbb; border:2px solid #99ee99;  padding:2px 2px 4px 4px; vertical-align: top&amp;quot;|&lt;br /&gt;
===Community===&lt;br /&gt;
* [http://pioneerspacesim.net/ Pioneer Space Sim Homepage]&lt;br /&gt;
* [http://pioneerspacesim.net/forum Forums]&lt;br /&gt;
* [http://webchat.freenode.net/?channels=#pioneer Pioneer Space Sim on IRC]&lt;br /&gt;
* [http://pioneerspacesim.net/+ Pioneer Space Sim] on Google+&lt;br /&gt;
* [http://twitter.com/pioneerspacesim @pioneerspacesim] on Twitter&lt;br /&gt;
----&lt;br /&gt;
* [[Tutorials]](Outdated and WIP)&lt;br /&gt;
* [[Keyboard and mouse controls]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* [[Media Coverage]]&lt;br /&gt;
&lt;br /&gt;
|width=&amp;quot;33%&amp;quot; style=&amp;quot;background:#fff9b1; border:2px solid #f0fe66;  padding:2px 2px 4px 4px; vertical-align: top&amp;quot;|&lt;br /&gt;
===The Pioneer universe===&lt;br /&gt;
* [[Story]]&lt;br /&gt;
* [http://pioneerwiki.com/wiki/Category:Ships Ships] (work in progress)&lt;br /&gt;
* [[Places of interest]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|width=100%&lt;br /&gt;
|width=&amp;quot;33%&amp;quot; style=&amp;quot;background:#f0f0ff; border:2px solid #c6c9ff; padding:2px 2px 4px 4px; vertical-align: top&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
===Content Creation===&lt;br /&gt;
* [[Mods]]&lt;br /&gt;
* [[Introduction to Mission Scripting]]&lt;br /&gt;
** [[Interacting with the game: Event-based programming]]&lt;br /&gt;
** [[Interacting with the player: BBS forms]]&lt;br /&gt;
** [[Lua-based equipment]] (NOT YET MERGED!)&lt;br /&gt;
** [[Surviving a reload]]&lt;br /&gt;
* [http://eatenbyagrue.org/f/pioneer/codedoc/ Lua API Reference]&lt;br /&gt;
* Ships and stations&lt;br /&gt;
** [[Making your first ship]]&lt;br /&gt;
** [[Creating Ships and Stations]]&lt;br /&gt;
* Models&lt;br /&gt;
** [[Model system]]&lt;br /&gt;
** [[Model viewer]]&lt;br /&gt;
** [[Transitioning to the new model system]]&lt;br /&gt;
** Making models&lt;br /&gt;
*** [[Textures]]&lt;br /&gt;
*** [[Transparency]]&lt;br /&gt;
*** [[Optimising geometry]]&lt;br /&gt;
*** [[Modelling stations]]&lt;br /&gt;
** [[3DS Max]]&lt;br /&gt;
** [[:Category:Blender|Blender]]&lt;br /&gt;
*** [[Blender Tips]]&lt;br /&gt;
*** [[UV coordinates in Blender]]&lt;br /&gt;
*** [[Asteroids and rocks in Blender]]&lt;br /&gt;
*** [[Scripting Blender]]&lt;br /&gt;
** [[:Category:GIMP|GIMP]]&lt;br /&gt;
*** [[GIMP Tips]]&lt;br /&gt;
*** [[Cutaway panels in GIMP]]&lt;br /&gt;
* [[Music]]&lt;br /&gt;
* [[Sound Effects]]&lt;br /&gt;
* [[Translations]]&lt;br /&gt;
* [[Licensing]]&lt;br /&gt;
&lt;br /&gt;
|width=&amp;quot;33%&amp;quot; style=&amp;quot;background:#fff3e3; border:2px solid #ffc9c9; padding:2px 2px 4px 4px; vertical-align: top&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
===Development===&lt;br /&gt;
* [[Design Scope|Game Scope]]&lt;br /&gt;
* [[Getting Started with Development]]&lt;br /&gt;
** [[How to communicate]]&lt;br /&gt;
** [[Using git and GitHub]] (work in progress)&lt;br /&gt;
** [[Core Team]]&lt;br /&gt;
* [[Development Model]]&lt;br /&gt;
* [[Design_Workflow|Design and Project Management Workflow]]&lt;br /&gt;
* [https://github.com/pioneerspacesim/pioneer/issues Issue tracker]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pioneer is brung to you by a flock of [https://github.com/pioneerspacesim/pioneer/blob/master/AUTHORS.txt opensource beardy-weirdies], and is [http://www.gnu.org/licenses/gpl.html Free Software]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1405</id>
		<title>Code style</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1405"/>
		<updated>2013-07-02T23:00:28Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Enum types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes some of the code style used in Pioneer. Its probably incomplete, but it should be correct. If you see something in the code that doesn't match what's described here, this guide takes precedence (and please submit a patch to fix it!)&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
Engine and Lua code is [http://www.gnu.org/licenses/gpl.html GPL 3]. Assets (include Lua-based data files like ship defs) are [http://creativecommons.org/licenses/by-sa/3.0/ CC-BY-SA 3]&lt;br /&gt;
&lt;br /&gt;
Include these two lines at the top of each file (suitably commented):&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of the GPL v3. See licenses/GPL-3.txt&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of CC-BY-SA 3.0. See licenses/CC-BY-SA-3.0.txt&lt;br /&gt;
&lt;br /&gt;
== Tabs &amp;amp; spacing ==&lt;br /&gt;
&lt;br /&gt;
* Hard tabs, 4-space aligned.&lt;br /&gt;
* Inner spaces after tabs to align arguments on multiple lines, etc&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
* Prefer &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt; over &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; wherever possible&lt;br /&gt;
&lt;br /&gt;
== Name style ==&lt;br /&gt;
&lt;br /&gt;
* Classes: FooBar&lt;br /&gt;
* Methods: FooBar&lt;br /&gt;
* Class members: m_fooBar&lt;br /&gt;
* Static members: s_fooBar&lt;br /&gt;
* Constants: FOO_BAR&lt;br /&gt;
&lt;br /&gt;
== Include guards ==&lt;br /&gt;
&lt;br /&gt;
Header include guards should be named for the filename of the header, capitalised, with slashes converted to underscores:&lt;br /&gt;
&lt;br /&gt;
* Ship.h&lt;br /&gt;
    #ifndef SHIP_H&lt;br /&gt;
&lt;br /&gt;
* WorldView.h&lt;br /&gt;
    #ifndef WORLDVIEW_H&lt;br /&gt;
&lt;br /&gt;
* graphics/Renderer.h&lt;br /&gt;
    #ifndef GRAPHICS_RENDERER_H&lt;br /&gt;
&lt;br /&gt;
== Enum types ==&lt;br /&gt;
&lt;br /&gt;
Enums are effectively global constants, so should be in full caps. They're prefixed with the name of the enum.&lt;br /&gt;
&lt;br /&gt;
Avoid assigning explicit integer values. Also avoid values that aren't actually valid for whatever the enum is (though *_MAX to mark the last valid value is usually acceptable). If these don't work, chances are what you're trying to do would be better served by multiple enums or even a whole class.&lt;br /&gt;
&lt;br /&gt;
    enum Thing {&lt;br /&gt;
        THING_FOO,&lt;br /&gt;
        THING_BAR,&lt;br /&gt;
        THING_BAZ,&lt;br /&gt;
        &lt;br /&gt;
        THING_MAX&lt;br /&gt;
    };&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1404</id>
		<title>Code style</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1404"/>
		<updated>2013-07-02T22:59:59Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes some of the code style used in Pioneer. Its probably incomplete, but it should be correct. If you see something in the code that doesn't match what's described here, this guide takes precedence (and please submit a patch to fix it!)&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
Engine and Lua code is [http://www.gnu.org/licenses/gpl.html GPL 3]. Assets (include Lua-based data files like ship defs) are [http://creativecommons.org/licenses/by-sa/3.0/ CC-BY-SA 3]&lt;br /&gt;
&lt;br /&gt;
Include these two lines at the top of each file (suitably commented):&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of the GPL v3. See licenses/GPL-3.txt&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of CC-BY-SA 3.0. See licenses/CC-BY-SA-3.0.txt&lt;br /&gt;
&lt;br /&gt;
== Tabs &amp;amp; spacing ==&lt;br /&gt;
&lt;br /&gt;
* Hard tabs, 4-space aligned.&lt;br /&gt;
* Inner spaces after tabs to align arguments on multiple lines, etc&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
* Prefer &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt; over &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; wherever possible&lt;br /&gt;
&lt;br /&gt;
== Name style ==&lt;br /&gt;
&lt;br /&gt;
* Classes: FooBar&lt;br /&gt;
* Methods: FooBar&lt;br /&gt;
* Class members: m_fooBar&lt;br /&gt;
* Static members: s_fooBar&lt;br /&gt;
* Constants: FOO_BAR&lt;br /&gt;
&lt;br /&gt;
== Include guards ==&lt;br /&gt;
&lt;br /&gt;
Header include guards should be named for the filename of the header, capitalised, with slashes converted to underscores:&lt;br /&gt;
&lt;br /&gt;
* Ship.h&lt;br /&gt;
    #ifndef SHIP_H&lt;br /&gt;
&lt;br /&gt;
* WorldView.h&lt;br /&gt;
    #ifndef WORLDVIEW_H&lt;br /&gt;
&lt;br /&gt;
* graphics/Renderer.h&lt;br /&gt;
    #ifndef GRAPHICS_RENDERER_H&lt;br /&gt;
&lt;br /&gt;
== Enum types ==&lt;br /&gt;
&lt;br /&gt;
Enums are effectively global constants, so should be in full caps. They're prefixed with the name of the enum.&lt;br /&gt;
&lt;br /&gt;
Avoid assigning explicit integer values. Also avoid values that aren't actually valid for whatever the enum is (though *_MAX to mark the last valid value is usually acceptable). If these don't work, chances are what you're trying to do would be better served by multiple enums or even a whole class.&lt;br /&gt;
&lt;br /&gt;
    enum Thing {&lt;br /&gt;
        THING_FOO,&lt;br /&gt;
        THING_BAR,&lt;br /&gt;
        THING_BAZ,&lt;br /&gt;
&lt;br /&gt;
        THING_MAX&lt;br /&gt;
    };&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1400</id>
		<title>Code style</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1400"/>
		<updated>2013-07-02T02:46:30Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes some of the code style used in Pioneer. Its probably incomplete, but it should be correct. If you see something in the code that doesn't match what's described here, this guide takes precedence (and please submit a patch to fix it!)&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
Engine and Lua code is [http://www.gnu.org/licenses/gpl.html GPL 3]. Assets (include Lua-based data files like ship defs) are [http://creativecommons.org/licenses/by-sa/3.0/ CC-BY-SA 3]&lt;br /&gt;
&lt;br /&gt;
Include these two lines at the top of each file (suitably commented):&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of the GPL v3. See licenses/GPL-3.txt&lt;br /&gt;
&lt;br /&gt;
    Copyright © 2008-2013 Pioneer Developers. See AUTHORS.txt for details&lt;br /&gt;
    Licensed under the terms of CC-BY-SA 3.0. See licenses/CC-BY-SA-3.0.txt&lt;br /&gt;
&lt;br /&gt;
== Tabs &amp;amp; spacing ==&lt;br /&gt;
&lt;br /&gt;
* Hard tabs, 4-space aligned.&lt;br /&gt;
* Inner spaces after tabs to align arguments on multiple lines, etc&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
* Prefer &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt; over &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; wherever possible&lt;br /&gt;
&lt;br /&gt;
== Name style ==&lt;br /&gt;
&lt;br /&gt;
* Classes: FooBar&lt;br /&gt;
* Methods: FooBar&lt;br /&gt;
* Class members: m_fooBar&lt;br /&gt;
* Static members: s_fooBar&lt;br /&gt;
* Constants: FOO_BAR&lt;br /&gt;
&lt;br /&gt;
== Include guards ==&lt;br /&gt;
&lt;br /&gt;
Header include guards should be named for the filename of the header, capitalised, with slashes converted to underscores:&lt;br /&gt;
&lt;br /&gt;
* Ship.h&lt;br /&gt;
    #ifndef SHIP_H&lt;br /&gt;
&lt;br /&gt;
* WorldView.h&lt;br /&gt;
    #ifndef WORLDVIEW_H&lt;br /&gt;
&lt;br /&gt;
* graphics/Renderer.h&lt;br /&gt;
    #ifndef GRAPHICS_RENDERER_H&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Roadmap&amp;diff=1390</id>
		<title>Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Roadmap&amp;diff=1390"/>
		<updated>2013-06-28T11:55:46Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== First milestone ==&lt;br /&gt;
&lt;br /&gt;
Basically we want external interfaces to be stable.&lt;br /&gt;
&lt;br /&gt;
* New save file format&lt;br /&gt;
* Separate Player from Ship (breaks Lua)&lt;br /&gt;
* Turn Missiles into guided Projectiles&lt;br /&gt;
* Lua equipment&lt;br /&gt;
* Module manifest&lt;br /&gt;
* Convert to new UI (but not redesigned HUD)&lt;br /&gt;
* JSON data files (ship defs)&lt;br /&gt;
* Starsystem generation rewrite (plus custom systems)&lt;br /&gt;
&lt;br /&gt;
== Second milestone ==&lt;br /&gt;
&lt;br /&gt;
Gameplay stuff, redesigned UI. Dunno yet.&lt;br /&gt;
&lt;br /&gt;
== Older stuff ==&lt;br /&gt;
&lt;br /&gt;
Pioneer version 1.0 will be the first &amp;quot;stable&amp;quot; release. This will not be the final state of the game: development will continue, particularly adding a lot more content and game-play features, but features present in version 1.0 are expected to be supported for a long time.&lt;br /&gt;
&lt;br /&gt;
Things that must be done before we can release version 1.0:&lt;br /&gt;
&lt;br /&gt;
'''''Warning:''' This list is incomplete - and under active discussion so subject to change''&lt;br /&gt;
=== Technical features ===&lt;br /&gt;
* The save system will be changed to allow future versions to be made without breaking all prior saved games.&lt;br /&gt;
* Equipment control will be moved to Lua.&lt;br /&gt;
* All user-interface will be converted to use the new-ui system and be driven by Lua.&lt;br /&gt;
* Star system generation will be rewritten to allow partially custom systems, and to allow some types of changes to be made without having knock-on effects through the entire galaxy or system.&lt;br /&gt;
&lt;br /&gt;
=== Gameplay features ===&lt;br /&gt;
* Military progression / treason.&lt;br /&gt;
* Something like the Scout missions the walterar has done, exploration jobs.&lt;br /&gt;
* No hypersace from in atmosphere / or too close to a planet surface.&lt;br /&gt;
* In-system hyperspace jumps to make assassination missions and piracy actually possible.&lt;br /&gt;
* Alternatively a Fast-As-Light drive, Shadmar has taken a hacked one I (fluffyfreak) wrote and updated it for Paragon.&lt;br /&gt;
&lt;br /&gt;
=== More proposed stuff ===&lt;br /&gt;
&lt;br /&gt;
From [[User:Luomu|Luomu]] ([[User talk:Luomu|talk]]) 17:09, 1 May 2013 (PDT)&lt;br /&gt;
&lt;br /&gt;
* New, fault tolerant save system: this is the most important thing ever&lt;br /&gt;
* Rewrite the HUD&lt;br /&gt;
** Gather a list of components before doing any visual design&lt;br /&gt;
* Controls&lt;br /&gt;
** New input system: do we need one, or can the current one be fixed?&lt;br /&gt;
** Current problems: conflicting binds, cannot bind multiple inputs per action&lt;br /&gt;
** Remove rarely used buttons?&lt;br /&gt;
* Camera&lt;br /&gt;
** Add chase camera, padlock&lt;br /&gt;
* Weapons&lt;br /&gt;
** goals: allow more than just laser bolts (beams, missiles), auto-tracking guns and turrets&lt;br /&gt;
** rewrite, basically&lt;br /&gt;
** turn missiles into guided projectiles instead of ships&lt;br /&gt;
** conflicts with lua trade goods/equipment?&lt;br /&gt;
* Star views and navigation&lt;br /&gt;
** combine system (orbit) view into star map&lt;br /&gt;
** maybe other streamlining as well?&lt;br /&gt;
** bookmarks, travel log&lt;br /&gt;
* Separate Player from Ships&lt;br /&gt;
** to enable shuttlecraft and remote drones&lt;br /&gt;
** must be done during alpha, not sensible afterwards (breaks modules)&lt;br /&gt;
* Hitpoints: use generic HP value instead of mass&lt;br /&gt;
* Cargo: use kg instead of tons&lt;br /&gt;
* AI&lt;br /&gt;
** needs more higher level stuff like basic self preservation, modules must not have to implement their own (like tradeships...)&lt;br /&gt;
** formations, anyone?&lt;br /&gt;
* Ship visual customization&lt;br /&gt;
* Space stations&lt;br /&gt;
** external docking&lt;br /&gt;
** traffic rules (don't allow modules to let ships idle forever)&lt;br /&gt;
* JSON for data files (ship defs etc)&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1389</id>
		<title>Code style</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1389"/>
		<updated>2013-06-27T21:16:45Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tabs &amp;amp; spacing ==&lt;br /&gt;
&lt;br /&gt;
* Hard tabs, 4-space aligned.&lt;br /&gt;
* Inner spaces after tabs to align arguments on multiple lines, etc&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
* Prefer &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt; over &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; wherever possible&lt;br /&gt;
&lt;br /&gt;
== Name style ==&lt;br /&gt;
&lt;br /&gt;
* Classes: FooBar&lt;br /&gt;
* Methods: FooBar&lt;br /&gt;
* Class members: m_fooBar&lt;br /&gt;
* Static members: s_fooBar&lt;br /&gt;
* Constants: FOO_BAR&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1388</id>
		<title>Code style</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Code_style&amp;diff=1388"/>
		<updated>2013-06-26T22:41:01Z</updated>

		<summary type="html">&lt;p&gt;RobN: Created page with &amp;quot;== Tabs &amp;amp; spacing ==  * Hard tabs, 4-space aligned. * Inner spaces after tabs to align arguments on multiple lines, etc  == Constants ==  * Prefer &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt; over &amp;lt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tabs &amp;amp; spacing ==&lt;br /&gt;
&lt;br /&gt;
* Hard tabs, 4-space aligned.&lt;br /&gt;
* Inner spaces after tabs to align arguments on multiple lines, etc&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
* Prefer &amp;lt;tt&amp;gt;static const&amp;lt;/tt&amp;gt; over &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; wherever possible&lt;br /&gt;
&lt;br /&gt;
== Name style ==&lt;br /&gt;
&lt;br /&gt;
* Classes: FooBar&lt;br /&gt;
* Methods: FooBar&lt;br /&gt;
* Class members: m_fooBar&lt;br /&gt;
* Static members: s_fooBar&lt;br /&gt;
* Constants: FOOBAR&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Media_Coverage&amp;diff=1317</id>
		<title>Media Coverage</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Media_Coverage&amp;diff=1317"/>
		<updated>2013-04-16T00:03:39Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following websites or publications have mentioned or featured Pioneer.&lt;br /&gt;
&lt;br /&gt;
* [http://www.cnet.com.au/amazing-dad-builds-his-son-a-spaceship-simulator-339343918.htm CNET Australia] article about a &amp;quot;real&amp;quot; space ship simulator than runs Pioneer.&lt;br /&gt;
* [http://www.bbc.co.uk/news/technology-20165344 BBC] article about funding for the new Elite game mentions Pioneer in a list of alternatives.&lt;br /&gt;
* [http://www.rockpapershotgun.com/2011/12/06/back-to-frontier-pioneer/ Rock Paper Shotgun] interviews the development team.&lt;br /&gt;
* [http://github.com/blog/1228-game-bytes-2/ Github Game Bytes] blog entry featuring Pioneer.&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Asset_List&amp;diff=802</id>
		<title>Asset List</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Asset_List&amp;diff=802"/>
		<updated>2013-02-12T11:06:34Z</updated>

		<summary type="html">&lt;p&gt;RobN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of models that we have/want/need in the core game.&lt;br /&gt;
&lt;br /&gt;
== Ships ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
!Model&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
| Shuttle || Small shuttlecraft for in-system trips, package deliveries, etc. Not hyperspace-capable. || ip_shuttle || Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Starter || Small multirole craft, capable of hyperspace and atmospheric flight. || natrix || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/2033 #2033]&lt;br /&gt;
|-&lt;br /&gt;
| Medium || Medium/large multirole craft, for cargo runs, exploration, etc. || lanner, wave || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/1957 #1957] [https://github.com/pioneerspacesim/pioneer/pull/2022 #2022]&lt;br /&gt;
|-&lt;br /&gt;
| Freighter || Large hyperspace-capable cargo ship || dsminer || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/2023 #2023]&lt;br /&gt;
|-&lt;br /&gt;
| Fighter || Small, fast short-range fighter, not hyperspace-capable. For use by police/pirates. || kanara || '''In progress''' [https://github.com/pioneerspacesim/pioneer/pull/2037 #2037]&lt;br /&gt;
|-&lt;br /&gt;
| Bulk || Enormous supply ship, for positioning near stations (and later convoys etc). Non-playable || lrc, lynx || Needs to be replaced or converted from LMR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Stations ==&lt;br /&gt;
&lt;br /&gt;
Surface and spacestations.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
!Model&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
| Orbital || Ring-type space station with internal docking space for four ships. || big_crappy_spacestation || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/1964 #1964], updates in progress [https://github.com/pioneerspacesim/pioneer/pull/2046 #2046]&lt;br /&gt;
|-&lt;br /&gt;
| Surface || Open-air surface station with four 100x100m landing pads || ground_station_4 || Placeholder. Needs conversion from LMR or recreation. See [https://github.com/pioneerspacesim/pioneer/pull/1932 #1932]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Buildings ==&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
|-&lt;br /&gt;
| Cargo container || A generic container, should be well visible&lt;br /&gt;
|-&lt;br /&gt;
| Gun || Ship weapon model, used for all types for now&lt;br /&gt;
|-&lt;br /&gt;
| Missile launcher || Weapon model attached to ships that carry missiles&lt;br /&gt;
|-&lt;br /&gt;
| Missile || Fired missile model, used for all types&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Asset_List&amp;diff=764</id>
		<title>Asset List</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Asset_List&amp;diff=764"/>
		<updated>2013-02-04T03:40:22Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Ships */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of models that we have/want/need in the core game.&lt;br /&gt;
&lt;br /&gt;
== Ships ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
!Model&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
| Shuttle || Small shuttlecraft for in-system trips, package deliveries, etc. Not hyperspace-capable. || ip_shuttle || Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Starter || Small multirole craft, capable of hyperspace and atmospheric flight. || natrix || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/2033 #2033]&lt;br /&gt;
|-&lt;br /&gt;
| Medium || Medium/large multirole craft, for cargo runs, exploration, etc. || lanner, wave || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/1957 #1957] [https://github.com/pioneerspacesim/pioneer/pull/2022 #2022]&lt;br /&gt;
|-&lt;br /&gt;
| Freighter || Large hyperspace-capable cargo ship || dsminer || '''Done''' Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Fighter || Small, fast short-range fighter, not hyperspace-capable. For use by police/pirates. || talon? || Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Bulk || Enormous supply ship, for positioning near stations (and later convoys etc). Non-playable || lrc, lynx || Needs to be replaced or converted from LMR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Stations ==&lt;br /&gt;
&lt;br /&gt;
Surface and spacestations.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
!Model&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
| Orbital || Ring-type space station with internal docking space for four ships. || big_crappy_spacestation || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/1964 #1964]&lt;br /&gt;
|-&lt;br /&gt;
| Surface || Open-air surface station with four 100x100m landing pads || ground_station_4 || Placeholder. Needs conversion from LMR or recreation. See [https://github.com/pioneerspacesim/pioneer/pull/1932 #1932]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Buildings ==&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
|-&lt;br /&gt;
| Cargo container || A generic container, should be well visible&lt;br /&gt;
|-&lt;br /&gt;
| Gun || Ship weapon model, used for all types for now&lt;br /&gt;
|-&lt;br /&gt;
| Missile launcher || Weapon model attached to ships that carry missiles&lt;br /&gt;
|-&lt;br /&gt;
| Missile || Fired missile model, used for all types&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Asset_List&amp;diff=763</id>
		<title>Asset List</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Asset_List&amp;diff=763"/>
		<updated>2013-02-04T03:39:50Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Ships */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of models that we have/want/need in the core game.&lt;br /&gt;
&lt;br /&gt;
== Ships ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
!Model&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
| Shuttle || Small shuttlecraft for in-system trips, package deliveries, etc. Not hyperspace-capable. || ip_shuttle || Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Starter || Small multirole craft, capable of hyperspace and atmospheric flight. || natrix || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/2033 #2033]&lt;br /&gt;
|-&lt;br /&gt;
| Medium || Medium/large multirole craft, for cargo runs, exploration, etc. || lanner, wave || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/1957 #1957]&lt;br /&gt;
 [https://github.com/pioneerspacesim/pioneer/pull/2022 #2022]|-&lt;br /&gt;
| Freighter || Large hyperspace-capable cargo ship || dsminer || '''Done''' Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Fighter || Small, fast short-range fighter, not hyperspace-capable. For use by police/pirates. || talon? || Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Bulk || Enormous supply ship, for positioning near stations (and later convoys etc). Non-playable || lrc, lynx || Needs to be replaced or converted from LMR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Stations ==&lt;br /&gt;
&lt;br /&gt;
Surface and spacestations.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
!Model&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
| Orbital || Ring-type space station with internal docking space for four ships. || big_crappy_spacestation || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/1964 #1964]&lt;br /&gt;
|-&lt;br /&gt;
| Surface || Open-air surface station with four 100x100m landing pads || ground_station_4 || Placeholder. Needs conversion from LMR or recreation. See [https://github.com/pioneerspacesim/pioneer/pull/1932 #1932]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Buildings ==&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
|-&lt;br /&gt;
| Cargo container || A generic container, should be well visible&lt;br /&gt;
|-&lt;br /&gt;
| Gun || Ship weapon model, used for all types for now&lt;br /&gt;
|-&lt;br /&gt;
| Missile launcher || Weapon model attached to ships that carry missiles&lt;br /&gt;
|-&lt;br /&gt;
| Missile || Fired missile model, used for all types&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Asset_List&amp;diff=762</id>
		<title>Asset List</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Asset_List&amp;diff=762"/>
		<updated>2013-02-04T03:37:26Z</updated>

		<summary type="html">&lt;p&gt;RobN: /* Stations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A list of models that we have/want/need in the core game.&lt;br /&gt;
&lt;br /&gt;
== Ships ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
!Model&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
| Shuttle || Small shuttlecraft for in-system trips, package deliveries, etc. Not hyperspace-capable. || ip_shuttle || Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Starter || Small multirole craft, capable of hyperspace and atmospheric flight. || eagle_lrf || Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Medium || Medium/large multirole craft, for cargo runs, exploration, etc. || lanner || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/1957 #1957]&lt;br /&gt;
|-&lt;br /&gt;
| Freighter || Large hyperspace-capable cargo ship || caribou? hammerhead? || Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Fighter || Small, fast short-range fighter, not hyperspace-capable. For use by police/pirates. || talon? || Needs to be replaced or converted from LMR&lt;br /&gt;
|-&lt;br /&gt;
| Bulk || Enormous supply ship, for positioning near stations (and later convoys etc). Non-playable || lrc, lynx || Needs to be replaced or converted from LMR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Stations ==&lt;br /&gt;
&lt;br /&gt;
Surface and spacestations.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
!Model&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
| Orbital || Ring-type space station with internal docking space for four ships. || big_crappy_spacestation || '''Done''' [https://github.com/pioneerspacesim/pioneer/pull/1964 #1964]&lt;br /&gt;
|-&lt;br /&gt;
| Surface || Open-air surface station with four 100x100m landing pads || ground_station_4 || Placeholder. Needs conversion from LMR or recreation. See [https://github.com/pioneerspacesim/pioneer/pull/1932 #1932]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Buildings ==&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Type&lt;br /&gt;
!Purpose&lt;br /&gt;
|-&lt;br /&gt;
| Cargo container || A generic container, should be well visible&lt;br /&gt;
|-&lt;br /&gt;
| Gun || Ship weapon model, used for all types for now&lt;br /&gt;
|-&lt;br /&gt;
| Missile launcher || Weapon model attached to ships that carry missiles&lt;br /&gt;
|-&lt;br /&gt;
| Missile || Fired missile model, used for all types&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>RobN</name></author>
		
	</entry>
</feed>