<?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=TaylorT</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=TaylorT"/>
	<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/wiki/Special:Contributions/TaylorT"/>
	<updated>2026-05-26T05:15:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Pioneer_Wiki&amp;diff=3989</id>
		<title>Pioneer Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Pioneer_Wiki&amp;diff=3989"/>
		<updated>2021-02-05T17:10:01Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Pioneer is a space adventure game set in the Milkyway galaxy at the turn of the 33rd 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 and Linux &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;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#bbffbb; border:2px solid #99ee99; padding:2px 2px 4px 4px; vertical-align: top&amp;quot; width=&amp;quot;33%&amp;quot; | &lt;br /&gt;
=== Community ===&lt;br /&gt;
&lt;br /&gt;
*[http://pioneerspacesim.net/ Pioneer Space Sim Homepage]&lt;br /&gt;
*[https://github.com/pioneerspacesim/pioneer/ Main Github repository]&lt;br /&gt;
*[http://spacesimcentral.com/community/pioneer/ Community forum] &lt;br /&gt;
*[http://pioneerspacesim.net/forum Developer forum] &lt;br /&gt;
*[https://reddit.com/r/pioneerspacesim Pioneer Space Sim on Reddit]&lt;br /&gt;
*[https://pioneerspacesim.itch.io/pioneer Pioneer Space Sim on itch]&lt;br /&gt;
*[http://webchat.freenode.net/?channels=#pioneer Pioneer Space Sim on IRC] (where devs hang out)&lt;br /&gt;
*[http://twitter.com/pioneerspacesim @pioneerspacesim] on Twitter &lt;br /&gt;
*[https://discord.gg/RQQe3A7 discord]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
*[[Manual|Basic Manual]] &lt;br /&gt;
*[[Flight_UI|Flight UI]] &lt;br /&gt;
*[[Keyboard_and_mouse_controls|Keyboard and mouse controls]] &lt;br /&gt;
*[[Tutorials|Tutorials]] (Outdated and WIP) &lt;br /&gt;
*[[Mission_Types_and_BBS|Mission Types and BBS]] &lt;br /&gt;
*[[Settings_Menu|Settings Menu]] &lt;br /&gt;
*[[FAQ|FAQ]] &lt;br /&gt;
*[[Media_Coverage|Media Coverage]] &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;background:#fff9b1; border:2px solid #f0fe66; padding:2px 2px 4px 4px; vertical-align: top&amp;quot; width=&amp;quot;33%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== The Pioneer Universe ===&lt;br /&gt;
&lt;br /&gt;
*[[Pioneer_Universe|Pioneer Universe]] &lt;br /&gt;
*[[:Category:Ships| Ships]] (work in progress) &lt;br /&gt;
*[[:Category:Manufacturers| Manufacturers]] (work in progress) &lt;br /&gt;
*[[Places_of_interest|Places of interest]] &lt;br /&gt;
*[[Ship_Equipment|Ship Equipment]] (work in progress) &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#f0f0ff; border:2px solid #c6c9ff; padding:2px 2px 4px 4px; vertical-align: top&amp;quot; width=&amp;quot;33%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Content Creation ===&lt;br /&gt;
&lt;br /&gt;
*[[Mods|Mods]]&lt;br /&gt;
*[[Scripting_and_Mission_Creation|Scripting and Mission Creation]] &lt;br /&gt;
*[[Custom_Systems|Custom Systems]] &lt;br /&gt;
*[[Design_and_Concept_art|Design and Concept art]] &lt;br /&gt;
*[[Modeling,_Texturing,_Graphics_Design|Modeling, Texturing, Graphics Design]] &lt;br /&gt;
*[[Music_and_Sound|Music and Sound]] &lt;br /&gt;
*[[Translations|Translations]] &lt;br /&gt;
*[[Licensing|Licensing]] &lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;background:#fff3e3; border:2px solid #ffc9c9; padding:2px 2px 4px 4px; vertical-align: top&amp;quot; width=&amp;quot;33%&amp;quot; | &lt;br /&gt;
=== Development ===&lt;br /&gt;
&lt;br /&gt;
*[[Design_Scope|Game Scope]] &lt;br /&gt;
*[[How_you_can_contribute|How you can contribute]] &lt;br /&gt;
*[[Getting_Started_with_Development|Getting Started with Development]] &lt;br /&gt;
**[[How_to_communicate|How to communicate]] &lt;br /&gt;
**[[Using_git_and_GitHub|Using git and GitHub]] &lt;br /&gt;
**[[Coding Conventions]]&lt;br /&gt;
**[[Development_team|Development team]]  &lt;br /&gt;
**[[Engine_Overview|Engine internals overview]] &lt;br /&gt;
**[[Development_Tools| Development tools]]&lt;br /&gt;
*[[Development_Model|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;
*[[Roadmap|Roadmap]] &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pioneer is brought 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>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Surviving_a_reload&amp;diff=3975</id>
		<title>Surviving a reload</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Surviving_a_reload&amp;diff=3975"/>
		<updated>2020-12-09T19:20:09Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{outdated}}&lt;br /&gt;
When a game is saved, a script is responsible for informing Pioneer exactly which of its data need to be saved. If nothing is specified, nothing will be saved at all. Similarly, after a game is loaded, a script is responsible for restoring all of its saved data; re-creating bulletin board adverts, the player's mission details, and any run-time state.&lt;br /&gt;
&lt;br /&gt;
Here is a simple form. If a new game is started, you will see this on every bulletin board that you visit:&lt;br /&gt;
&lt;br /&gt;
 local onChat = function (form, ref, option)&lt;br /&gt;
     form:Clear()&lt;br /&gt;
     form:SetMessage(&amp;quot;Hello!&amp;quot;)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local onCreateBB = function (station)&lt;br /&gt;
     station:AddAdvert('Click here for a greeting',)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 EventQueue.onCreateBB:Connect(onCreateBB)&lt;br /&gt;
&lt;br /&gt;
If, however, you save the game, then reload, you will not see it on any bulletin board that had been created in the current system before you saved. onCreateBB will be triggered for any subsequently created bulletin boards, but not for those that already existed. It isn't appropriate to have scripts create new adverts just because a player has loaded; instead, it's the responsibility of the script to tell Pioneer what to save, and to use those saved data to restore all adverts after the game is loaded. The same goes for player missions, and any working data that the script is using.&lt;br /&gt;
&lt;br /&gt;
There are two things we need to do to achieve all of this.&lt;br /&gt;
&lt;br /&gt;
* We need to track everything that the script is doing.&lt;br /&gt;
* We need to be able to pack this away for saving, and bring it back after loading.&lt;br /&gt;
&lt;br /&gt;
==Tracking everything that we are doing==&lt;br /&gt;
&lt;br /&gt;
Any local table that is declared in file scope is visible to the entire script, without affecting any other scripts. Essential data should be kept in such tables.&lt;br /&gt;
&lt;br /&gt;
==Tracking adverts==&lt;br /&gt;
&lt;br /&gt;
It's important to be able to re-create an advert, so part of the process of making one should be storing that information. Your script will need to make a note of in which station the advert was placed, which flavour was used (if you have flavours), the face data that was used on the form and any unique information that was used, such as specific mission details, reward, etc. The simplest way to keep all of this together is in a table, gathering up the variables by name into keys of the same name:&lt;br /&gt;
&lt;br /&gt;
 local advert = {&lt;br /&gt;
     station = station,&lt;br /&gt;
     flavour = flavour,   -- This will be a table&lt;br /&gt;
     facedata = facedata, -- This will be a table&lt;br /&gt;
     target = target,&lt;br /&gt;
     destination = destination,&lt;br /&gt;
     reward = reward,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Remember, the &amp;lt;code&amp;gt;AddAdvert()&amp;lt;/code&amp;gt; method takes three arguments: The advert text, the &amp;lt;code&amp;gt;onChat&amp;lt;/code&amp;gt; function and the &amp;lt;code&amp;gt;onDelete&amp;lt;/code&amp;gt; function. It also returns a unique number, which lends itself nicely to storing the information away. That same unique number is passed to the onChat function, allowing onChat to check that stored information.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;onDelete()&amp;lt;/code&amp;gt; function (again, we call it that by convention only) also accepts this reference as its argument, and is called whenever an advert is destroyed, whether that destruction be explicit (&amp;lt;code&amp;gt;RemoveAdvert()&amp;lt;/code&amp;gt;) or implicit (the player hyperspaces away).&lt;br /&gt;
&lt;br /&gt;
So, we can track adverts that have been created, and stop tracking any that have gone away. I'll do that using the reference returned by &amp;lt;code&amp;gt;AddAvert()&amp;lt;/code&amp;gt; as the key to a file-scoped local table:&lt;br /&gt;
&lt;br /&gt;
 local all_flavours = Translate:GetFlavours('TestModule')&lt;br /&gt;
 local all_adverts = {}&lt;br /&gt;
 &lt;br /&gt;
 local onChat = function (form, ref, option)&lt;br /&gt;
     form:Clear()&lt;br /&gt;
     form:SetFace(all_adverts[ref].facedata)&lt;br /&gt;
     form:SetMessage(all_adverts[ref].flavour.title)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local onDelete = function (advert_ref)&lt;br /&gt;
     all_adverts[advert_ref] = nil&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local onCreateBB = function (station)&lt;br /&gt;
     local flavour = all_flavours[Engine.rand:Integer(1,#all_flavours)]&lt;br /&gt;
     advert_ref = station:AddAdvert(flavour.title,onChat,onDelete)&lt;br /&gt;
     local female = Engine.rand:Integer(1) == 1&lt;br /&gt;
     all_adverts[advert_ref] = {&lt;br /&gt;
         station = station,&lt;br /&gt;
         flavour = flavour,&lt;br /&gt;
         facedata = {&lt;br /&gt;
             female = female,&lt;br /&gt;
             name = NameGen.FullName(female),&lt;br /&gt;
             seed = Engine.rand:Integer()&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 EventQueue.onCreateBB:Connect(onCreateBB)&lt;br /&gt;
&lt;br /&gt;
==Tracking missions==&lt;br /&gt;
&lt;br /&gt;
This is less of a challenge. Whenever &amp;lt;code&amp;gt;Player.AddMission()&amp;lt;/code&amp;gt; is called, it returns a reference to the mission. That reference can be stored in a file-local table, and that table can be iterated through, and &amp;lt;code&amp;gt;Player.GetMission()&amp;lt;/code&amp;gt; called on each one. We can wrap these functions up:&lt;br /&gt;
&lt;br /&gt;
 local missionrefs = {}&lt;br /&gt;
 &lt;br /&gt;
 local AddMission = function(mission)&lt;br /&gt;
     table.insert(missionrefs,Game.player:AddMission(mission))&lt;br /&gt;
     return missionrefs[#missionrefs]&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local RemoveMission = function(mref)&lt;br /&gt;
     for i,m in ipairs(missionrefs) do&lt;br /&gt;
         if m == mref then&lt;br /&gt;
             table.remove(missionrefs,i)&lt;br /&gt;
         end&lt;br /&gt;
     end&lt;br /&gt;
     Game.player:RemoveMission(mref)&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
Now, instead of calling &amp;lt;code&amp;gt;Game.player:AddMission()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Game.Player:RemoveMission()&amp;lt;/code&amp;gt;, we just directly call our local functions, &amp;lt;code&amp;gt;AddMission()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;RemoveMission()&amp;lt;/code&amp;gt;. They will send their argument on to the instance in &amp;lt;code&amp;gt;Game.player&amp;lt;/code&amp;gt;, and also store or remove the mission ref in the missionrefs table. There is now a record of which missions belong to this script.&lt;br /&gt;
&lt;br /&gt;
==Serializing: Packing away for saving and loading==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Serializer&amp;lt;/code&amp;gt; object provides one method: &amp;lt;code&amp;gt;Register&amp;lt;/code&amp;gt;. It takes three arguments. The first is a name; a simple string with which to uniquely identify this script. It's probably sensible to re-use the name that was used for the &amp;lt;code&amp;gt;Translate&amp;lt;/code&amp;gt; object's flavour methods. The second argument is the name of a function which will return a single table. The third argument is a function that will accept a single table.&lt;br /&gt;
&lt;br /&gt;
The second argument is your '''serializer''' function. The third is your '''unserializer''' function. By convention, we name these &amp;lt;code&amp;gt;serialize&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;unserialize&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;serialize&amp;lt;/code&amp;gt; must return a table. This table must contain everything that you need to store to get your script working after a reload. It will be run when the player saves the game. The table can contain any pure-lua types, and SystemPath, Body and SceneGraph.ModelSkin core types, anything else will explode, like a ShipDef/EquipDef or a StarSystem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unserialize&amp;lt;/code&amp;gt; accepts a table, and does something with it. It will be run by the serializer after the game is loaded, immediately before the &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; event is triggered. It is passed the data that serialize returned at save time.&lt;br /&gt;
&lt;br /&gt;
The most common way to deal with this is as follows (and this is very cut down):&lt;br /&gt;
&lt;br /&gt;
 local table_stuff_this_script_uses = {}&lt;br /&gt;
 local loaded_data&lt;br /&gt;
 &lt;br /&gt;
 -- The rest of the script goes here!&lt;br /&gt;
 &lt;br /&gt;
 local onGameStart&lt;br /&gt;
     if loaded_data then&lt;br /&gt;
         for k,v in loaded_data.table_stuff_this_script_uses do&lt;br /&gt;
             table_stuff_this_script_uses[k] = v&lt;br /&gt;
         end&lt;br /&gt;
         loaded_data = nil&lt;br /&gt;
     else&lt;br /&gt;
         -- New game; do other stuff here perhaps&lt;br /&gt;
     end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local serialize = function ()&lt;br /&gt;
     return {table_stuff_this_script_uses = table_stuff_this_script_uses}&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local unserialize = function (data)&lt;br /&gt;
 	loaded_data = data&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 EventQueue.onGameStart:Connect(onGameStart)&lt;br /&gt;
 Serializer:Register(&amp;quot;TestModule&amp;quot;, serialize, unserialize)&lt;br /&gt;
&lt;br /&gt;
Now, combining that with the examples above, we get the following, which will save and load both the adverts and the missions that the script created:&lt;br /&gt;
&lt;br /&gt;
 local all_flavours = Translate:GetFlavours('TestModule')&lt;br /&gt;
 local all_adverts = {}&lt;br /&gt;
 local missionrefs = {}&lt;br /&gt;
 &lt;br /&gt;
 local onGameStart = function ()&lt;br /&gt;
 	all_adverts = {}&lt;br /&gt;
 	missions = {}&lt;br /&gt;
 &lt;br /&gt;
 	if not loaded_data then return end&lt;br /&gt;
 &lt;br /&gt;
 	for k,ad in pairs(loaded_data.all_adverts) do&lt;br /&gt;
 		local ref = ad.station:AddAdvert(ad.flavour.title, onChat, onDelete)&lt;br /&gt;
 		all_adverts[ref] = ad&lt;br /&gt;
 	end&lt;br /&gt;
 	for k,mission in pairs(loaded_data.missions) do&lt;br /&gt;
 		local mref = Game.player:AddMission(mission)&lt;br /&gt;
 		table.insert(missions,mref)&lt;br /&gt;
 	end&lt;br /&gt;
 &lt;br /&gt;
 	loaded_data = nil&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local onChat = function (form, ref, option)&lt;br /&gt;
     form:Clear()&lt;br /&gt;
     form:SetFace(all_adverts[ref].facedata)&lt;br /&gt;
     form:SetMessage(all_adverts[ref].flavour.title)&lt;br /&gt;
     -- some selective code here that will add missions, etc.&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 -- Other event handlers here that might change or remove missions or adverts&lt;br /&gt;
 &lt;br /&gt;
 local onDelete = function (advert_ref)&lt;br /&gt;
     all_adverts[advert_ref] = nil&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local onCreateBB = function (station)&lt;br /&gt;
     local flavour = all_flavours[Engine.rand:Integer(1,#all_flavours)]&lt;br /&gt;
     advert_ref = station:AddAdvert(flavour.title,onChat,onDelete)&lt;br /&gt;
     local female = Engine.rand:Integer(1) == 1&lt;br /&gt;
     all_adverts[advert_ref] = {&lt;br /&gt;
         station = station,&lt;br /&gt;
         flavour = flavour,&lt;br /&gt;
         facedata = {&lt;br /&gt;
             female = female,&lt;br /&gt;
             name = NameGen.FullName(female),&lt;br /&gt;
             seed = Engine.rand:Integer()&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local AddMission = function(mission)&lt;br /&gt;
     table.insert(missionrefs,Game.player:AddMission(mission))&lt;br /&gt;
     return missionrefs[#missionrefs]&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local RemoveMission = function(mref)&lt;br /&gt;
     for i,m in ipairs(missionrefs) do&lt;br /&gt;
         if m == mref then&lt;br /&gt;
             table.remove(missionrefs,i)&lt;br /&gt;
         end&lt;br /&gt;
     end&lt;br /&gt;
     Game.player:RemoveMission(mref)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local serialize = function ()&lt;br /&gt;
     local missions_in_full = {}&lt;br /&gt;
     for k,mref in ipairs(missions) do&lt;br /&gt;
         table.insert(missions_in_full,Game.player:GetMission(mref))&lt;br /&gt;
     end&lt;br /&gt;
     return { all_adverts = all_adverts, missions = missions_in_full }&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 local unserialize = function (data)&lt;br /&gt;
     loaded_data = data&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 EventQueue.onGameStart:Connect(onGameStart)&lt;br /&gt;
 EventQueue.onCreateBB:Connect(onCreateBB)&lt;br /&gt;
 Serializer:Register(&amp;quot;TestModule&amp;quot;, serialize, unserialize)&lt;br /&gt;
&lt;br /&gt;
Although the example is functional, it has been coded with brevity alone in mind. I would not recommend using this as the basis for a mission without at least completely rewriting &amp;lt;code&amp;gt;onChat()&amp;lt;/code&amp;gt;, and possibly tidying up the temporary loop variable names.&lt;br /&gt;
&lt;br /&gt;
The codedoc is complete and accurate, and the scripts provided with Pioneer are good examples themselves. The API is extensive, but if you find that there are additonal things you would like to be able to do, or information you would like from Pioneer, the dev team are willing to extend the API to accommodate script writers. Simply create a new issue on the [https://github.com/pioneerspacesim/pioneer/issues Github issue tracker].&lt;br /&gt;
&lt;br /&gt;
Help is also always available on the [http://pioneerspacesim.net/forum Pioneer forum] on SpaceSimCentral.com, and many of the dev team can be found on IRC at all hours - simply connect to Freenode (irc.freenode.net channel #pioneer).&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Compiling&amp;diff=3974</id>
		<title>Compiling</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Compiling&amp;diff=3974"/>
		<updated>2020-12-09T19:04:37Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: /* Compiling Pioneer on Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Compiling Pioneer on Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
* libtool&lt;br /&gt;
* sigc++-2.0&lt;br /&gt;
* freetype2&lt;br /&gt;
* GL and GLU&lt;br /&gt;
* GLEW&lt;br /&gt;
* SDL 1.2&lt;br /&gt;
* SDL_image&lt;br /&gt;
&lt;br /&gt;
Since pioneer is currently only available from the source repository, you also need autoconf and automake in order to generate the ./configure script (by running ./bootstrap)&lt;br /&gt;
&lt;br /&gt;
You also need git to check the source code out from the repository.&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu 10.04 command to install all the requisite libraries ====&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install libsigc++-2.0-dev libglut3-dev libglew1.5-dev libsdl1.2-dev libvorbis-dev libsdl-image1.2-dev dh-autoreconf git libfreetype6-dev&lt;br /&gt;
&lt;br /&gt;
This may work on other versions of Ubuntu, and possibly Debian or their derivatives too.&lt;br /&gt;
&lt;br /&gt;
=== Downloading it ===&lt;br /&gt;
&lt;br /&gt;
Pioneer is managed using Git, and is stored over at [http://github.com/ Github]. The [https://github.com/pioneerspacesim/pioneer official repository] is the best one to get. To get it:&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/pioneerspacesim/pioneer.git&lt;br /&gt;
&lt;br /&gt;
This will get you on the &amp;quot;master&amp;quot; branch, which is where new code is merged. This is the latest and greatest development and is quite unstable. To build a specific alpha, you need to checkout the appropriate release tag:&lt;br /&gt;
&lt;br /&gt;
 git checkout alpha9&lt;br /&gt;
&lt;br /&gt;
=== Building it ===&lt;br /&gt;
&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 ln -s ../data ./src/data&lt;br /&gt;
&lt;br /&gt;
Currently Pioneer runs from where it is built, and doesn't require (or work with) '''make install'''. To run it:&lt;br /&gt;
&lt;br /&gt;
 ./src/pioneer&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
For developers, gdb can be used for debugging&lt;br /&gt;
&lt;br /&gt;
 gdb ./src/pioneer&lt;br /&gt;
 run&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bugs, and feature requests, should be logged on the [https://github.com/pioneerspacesim/pioneer/issues issue tracker.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compiling Pioneer on Windows ==&lt;br /&gt;
&lt;br /&gt;
Pioneer can be built with CMake from directly within Visual Studio 2019. &lt;br /&gt;
&lt;br /&gt;
First, install the 'C++ CMake tools for Windows' package (Tools-&amp;gt;Get Tools and Features and search for 'cmake' under individual components). &lt;br /&gt;
Then open Visual Studio 2019, select 'Open a local folder' and open the pioneer folder that contains the source directory (if you cloned from git, this will be the top level 'pioneer' folder).&lt;br /&gt;
After it opens it will generate the cmake build configuration. This may take a few minutes the first time. When that is complete, select the appropriate build type from the build configuration drop down on the top tool bar (ie. x64-Release) and build the project (Build-&amp;gt;Build All).&lt;br /&gt;
When the build is complete you can run 'pioneer.exe' from the source directory or by selecting pioneer.exe in the dropdown menu next to the build configuration and clicking run.&lt;br /&gt;
&lt;br /&gt;
As an alternative, the MSVC 2019&amp;amp;nbsp;solution file can still be found in the win32/vc2019&amp;amp;nbsp;folder. Open this file and Pioneer should build just fine. All dependencies are provided so you don't need to compile any libraries.&lt;br /&gt;
Copy the .dll files from win32/vc2019&amp;amp;nbsp;into the root folder (the one containing data, src, win32 directories), and you will be able to run the pioneer .exe file you just compiled.&lt;br /&gt;
&lt;br /&gt;
If the child projects will not open with the error 'Error HRESULT E_FAIL has been returned from a call to a COM component', disable 'Automatically show data connections from web.conf':  &lt;br /&gt;
Tools -&amp;gt; Options -&amp;gt; Projects and Solutions -&amp;gt; Web Projects&lt;br /&gt;
&lt;br /&gt;
== Cross-compiling Pioneer for Windows on Linux ==&lt;br /&gt;
&lt;br /&gt;
If you want to run Pioneer on Windows but compile it on Linux, this can be done with [http://mingw-cross-env.nongnu.org/ mingw-cross-env]; but note, these instructions do assume some familiarity with developing software on Unix systems. They will probably be useful as a starting point on Unixen other than Linux. You'll need a couple of gigabytes of disc space for everything to live in.&lt;br /&gt;
&lt;br /&gt;
=== Preparing to install mingw-cross-env ===&lt;br /&gt;
&lt;br /&gt;
First, check the [http://mingw-cross-env.nongnu.org/#requirements requirements page] to ensure you have all the necessary development packages installed on your Linux system. For many Linux distributions, the package names are listed explicitly. Install any that are missing.&lt;br /&gt;
&lt;br /&gt;
=== Downloading mingw-cross-env ===&lt;br /&gt;
&lt;br /&gt;
You might try either the [http://mingw-cross-env.nongnu.org/#latest-release latest release] of mingw-cross-env or the [http://mingw-cross-env.nongnu.org/#development current development version]. The former is more likely to be stable, but does have problems with the locations of the packages it downloads being changed since it was released. I recommend you try the current development version first. As detailed at that link, you can retrieve the current development version by doing:&lt;br /&gt;
&lt;br /&gt;
 hg clone http://hg.savannah.nongnu.org/hgweb/mingw-cross-env&lt;br /&gt;
&lt;br /&gt;
This makes a directory 'mingw-cross-env' and puts everything in that directory. Alternatively, if you downloaded the latest release, do:&lt;br /&gt;
&lt;br /&gt;
 tar -xvzf mingw-cross-env-2.2.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
(replacing &amp;quot;2.2.1&amp;quot; with the number of the release you actually downloaded).&lt;br /&gt;
&lt;br /&gt;
=== Compiling mingw-cross-env ===&lt;br /&gt;
&lt;br /&gt;
Either way, 'cd' into the directory just created and do:&lt;br /&gt;
&lt;br /&gt;
 make gcc glew tiff libpng jpeg zlib libsigc++ vorbis freetype sdl sdl_image&lt;br /&gt;
&lt;br /&gt;
This will take quite a long time, unless you have a very fast computer. In particular, building gcc takes the lion's share of the time; if you have an older machine, it could easily take an hour or two. Do not be alarmed.&lt;br /&gt;
&lt;br /&gt;
In the future, if these instructions are out of date, it is likely that Pioneer will have additional requirements. The subdirectory 'src' of the mingw-cross-env distribution has a number of files with names of the form 'foo.mk', each of which corresponds to an available package &amp;quot;foo&amp;quot; (a &amp;quot;package&amp;quot; here is typically either a library or a development tool), and the names of additional package files could be appended to the 'make' command. Alternatively you could do:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
to make every mingw package, but this will obviously take much longer than building only the packages required.&lt;br /&gt;
&lt;br /&gt;
The mingw-cross-env pages contain some discussion of how to install these tools as root for the use of all users on a system, but that is beyond the scope of this page.&lt;br /&gt;
&lt;br /&gt;
==== Things that might go wrong ====&lt;br /&gt;
&lt;br /&gt;
Various things in your environment can mess up this compilation process. For example, if you have environment variables set which force 'ls' always to produce colour output, the configure scripts will choke. Normally, the package being built has created a directory called 'tmp.''packagename'''; 'cd' into that directory and run 'make'. That will show you the output from 'configure', and ordinarily a file 'config.log' is created (perhaps in a subdirectory of that directory) which shows exactly which configure test failed and how.&lt;br /&gt;
&lt;br /&gt;
=== Downloading Pioneer ===&lt;br /&gt;
&lt;br /&gt;
'cd' out of the mingw-cross-env directories, and do:&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/pioneerspacesim/pioneer.git&lt;br /&gt;
&lt;br /&gt;
(See the discussion above pertaining to which version you are downloading.) 'cd' into the directory just created. &lt;br /&gt;
&lt;br /&gt;
=== Compiling Pioneer ===&lt;br /&gt;
&lt;br /&gt;
You want to set your PATH to include the mingw-cross-env tools you just compiled; if you had unpacked mingw-cross-env directly in your home directory, you would do:&lt;br /&gt;
&lt;br /&gt;
 export PATH=~/mingw-cross-env/usr/bin:$PATH&lt;br /&gt;
&lt;br /&gt;
Now in the Pioneer directory do:&lt;br /&gt;
&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 ./configure --host=i686-pc-mingw32&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
That will eventually build 'pioneer.exe' and 'modelviewer.exe'.&lt;br /&gt;
&lt;br /&gt;
==== Things that might go wrong ====&lt;br /&gt;
&lt;br /&gt;
You might think the libraries in the 'win32' directory of the Pioneer distribution are relevant, and start adding flags to the 'configure' invocation to use them. Don't. You might be missing a mingw-cross-env package; check to see if the Pioneer requirements have changed.&lt;br /&gt;
&lt;br /&gt;
=== Installing it on a Windows system ===&lt;br /&gt;
&lt;br /&gt;
In the main Pioneer directory, do:&lt;br /&gt;
&lt;br /&gt;
 mv src/pioneer.exe src/modelviewer.exe .&lt;br /&gt;
&lt;br /&gt;
Now you want to copy the contents of the main Pioneer directory along with the 'data' subdirectory, but not any other subdirectories (although copying them to the Windows system is harmless).&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Getting_Started_with_Development&amp;diff=3973</id>
		<title>Getting Started with Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Getting_Started_with_Development&amp;diff=3973"/>
		<updated>2020-12-09T18:56:01Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: /* Code editing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Getting the Code==&lt;br /&gt;
Pioneer is managed using Git, and is stored on [http://github.com Github]. The [http://github.com/pioneerspacesim/pioneer official repository] is the best one to get. To get it:&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/pioneerspacesim/pioneer.git&lt;br /&gt;
&lt;br /&gt;
This will get you on the &amp;quot;master&amp;quot; branch, which is where new code is merged. This is the latest and greatest development. It should be stable.&lt;br /&gt;
&lt;br /&gt;
You may also need to clone the [https://github.com/pioneerspacesim/pioneer-thirdparty pioneer-thirdparty] repository, depending on what platform you're on. It is needed to build on Windows. You should clone this in a directory ''next to'' your clone of the pioneer directory (''not'' a sub-directory). Further instructions are in the COMPILING.txt file (linked below).&lt;br /&gt;
&lt;br /&gt;
===Coding Conventions===&lt;br /&gt;
see [[Coding_Conventions]]&lt;br /&gt;
&lt;br /&gt;
==Compiling==&lt;br /&gt;
There are instructions for how to compile the code included in the repository:&lt;br /&gt;
&lt;br /&gt;
[https://github.com/pioneerspacesim/pioneer/blob/master/COMPILING.txt COMPILING.txt]&lt;br /&gt;
&lt;br /&gt;
Also available: [[Compiling]]&lt;br /&gt;
&amp;lt;!-- Not sure if its outdated. Probably best to pick one source-spot for this. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
For developers on Linux, gdb can be used for debugging&lt;br /&gt;
&lt;br /&gt;
 gdb ./src/pioneer&lt;br /&gt;
 run&lt;br /&gt;
&lt;br /&gt;
This starts pioneer in gdb. After a crash, you can get a back trace by typing into the gdb prompt &amp;quot;bt&amp;quot;. Bugs, and feature requests, should be logged on the issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Code editing ===&lt;br /&gt;
Most development is done on GNU/Linux machines, although there are some developers using MS Visual Studio on Windows.&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=How_you_can_contribute&amp;diff=3972</id>
		<title>How you can contribute</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=How_you_can_contribute&amp;diff=3972"/>
		<updated>2020-12-09T18:52:18Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: /* C++ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Report bugs ==&lt;br /&gt;
&lt;br /&gt;
Believe it or not, but most developers don't have time to actually play the game. Thus, bug reporting is the most important part where you as a player can help the community. When you encounter something that seems strange or odd in the game, please report it, preferably to our [https://github.com/pioneerspacesim/pioneer/issues?direction=desc&amp;amp;sort=created&amp;amp;state=open issue tracker], but you can also stop by the [http://webchat.freenode.net/?channels=#pioneer IRC channel] or the [http://pioneerspacesim.net/forum dev forum], although devforum isn't quite the place for bug reports.&lt;br /&gt;
&lt;br /&gt;
(Our issue tracker on github uses [https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet markdown] for typesetting text)&lt;br /&gt;
&lt;br /&gt;
== Art Creation ==&lt;br /&gt;
&lt;br /&gt;
If you think you can improve or contribute with something to the game then please feel free post on the [http://pioneerspacesim.net/forum dev forum], or pay a visit to the IRC channel. All contributions that improve the game are most welcome.&lt;br /&gt;
&lt;br /&gt;
=== Concept Art ===&lt;br /&gt;
&lt;br /&gt;
There are some [[Visual_Style_guide|articles in the works]] about the intended style of Pioneer. And a [http://pioneerspacesim.net/forum/viewtopic.php?f=3&amp;amp;t=31 sketch topic on the dev forums]. Basically every model in the game could (should) start it's life as concept sketch, especially if it's properly iterated.&lt;br /&gt;
&lt;br /&gt;
*City buildings/domes for worlds without atmosphere &lt;br /&gt;
*Landing pads / ground station &lt;br /&gt;
*Orbital space stations &lt;br /&gt;
*Ships &lt;br /&gt;
&lt;br /&gt;
=== 2D Graphics ===&lt;br /&gt;
&lt;br /&gt;
*Face generation (currently (2015-06) [http://pioneerspacesim.net/forum/viewtopic.php?f=3&amp;amp;t=218 being undertaken] by Evarchart) &lt;br /&gt;
*Ship textures and patterns &lt;br /&gt;
*Medals / ribbons for future military missions for 3-4 different factions &lt;br /&gt;
*Various icons and logos &lt;br /&gt;
*Ship Equipment icons (similar to commodity market icons) &lt;br /&gt;
&lt;br /&gt;
=== 3D Modelling ===&lt;br /&gt;
&lt;br /&gt;
If you know how to create 3D models (or are willing to learn), then we always need more of the following.&lt;br /&gt;
&lt;br /&gt;
*City buildings/domes for worlds without atmosphere &lt;br /&gt;
*Landing pads / ground station &lt;br /&gt;
*Orbital space stations &lt;br /&gt;
*Ships &lt;br /&gt;
*Cockpits (WIP feature) &lt;br /&gt;
&lt;br /&gt;
See the tutorials and documentation of Content Creation on the main page of [[Pioneer_Wiki|Pioneer Wiki]] for further details.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
Pioneer uses two different programming languages (not counting various configuration files). The main/core part is written in c++, which requires knowledge in this area to contribute. However, the functionality of the core is exported into the scripting language Lua, used by pioneer. Lua is easy to learn, once one has grasped the basic programming concept of if-statements and for-loops, making it perfect for the novice willing to learn basic programming. We have a category for [http://pioneerwiki.com/wiki/Category:Ideas Category:Ideas], as well as a [[Roadmap|Roadmap]], both brainstorming where we want to go, although these two pages can be slightly stale.&lt;br /&gt;
&lt;br /&gt;
=== C++ ===&lt;br /&gt;
&lt;br /&gt;
See [[Getting_Started_with_Development|Getting Started with Development]], and have a look at the [https://github.com/pioneerspacesim/pioneer/issues issue tracker] for feature requests and [[Roadmap|Roadmap]] for further details, or if you think there's a bug you can track down. On MS Windows VS2019 is the most popular IDE and is maintained. For GNU/Linux most developers use Vim or GNU/Emacs.&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
Lua is easy to learn even for inexperienced programmers, and it will let you easily add new content to the game, such as missions, ads on the BBS, or events that are triggered by various actions from the player.&lt;br /&gt;
&lt;br /&gt;
If you don't know how to use github (used for submitting and reviewing code contributions), someone on IRC or the dev forum can create a pull/merge request for you, since learning github can be a daunting task for a beginner.&lt;br /&gt;
&lt;br /&gt;
Toget started, see [[Scripting_and_Mission_Creation|Scripting and Mission Creation]], or just digg into the code we have. data/modules/DonateToCranks is a simple easy to read lua script that implements the donation charity on the BBS. For a full mission data/modules/DeliverPackage.lua is recommended.&lt;br /&gt;
&lt;br /&gt;
Here are some ideas for missions that can be implemented with the [http://pioneerspacesim.net/codedoc/ Lua API] we have today:&lt;br /&gt;
&lt;br /&gt;
*EASY: Extend Taxi missions to systems so far away they require miltiple jumps. &lt;br /&gt;
*EASY: Reverse delivery mission: go to X and pick up &amp;lt;something&amp;gt; bring back here. &lt;br /&gt;
*EASY: Science mission: Scoop x tonnes of Hydrogen samples from a star atmosphere, or mininglaser for rocky planet. &lt;br /&gt;
*EASY/MEDIUM: Spy/tail/track mission: follow a ship and report to which station it lands. &lt;br /&gt;
*Some kind of distress signal / rescue pilot? &lt;br /&gt;
*Towing service? &lt;br /&gt;
*Something that makes use of persistant characters. Maybe find a missing person, or someone on crew contracts is lost by someone somewhere else? &lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
If you know perl (or want to learn it), you can help improve, and extend the IRC-bot [https://github.com/robn/jameson/issues jameson] used in the pioneer IRC channel.&lt;br /&gt;
&lt;br /&gt;
=== html/web ===&lt;br /&gt;
&lt;br /&gt;
If you feel like improving our homepage, then feel free to dig in. [https://github.com/pioneerspacesim/pioneer-web/ web-source]&lt;br /&gt;
&lt;br /&gt;
== Help gather information ==&lt;br /&gt;
&lt;br /&gt;
It helps the developers greatly to know the goal they're working towards. You can help with brainstorming on various topics, and gather information:&lt;br /&gt;
&lt;br /&gt;
*Hipparcos and Tycho-2 catalogue data of star position in some, easy to parse, raw text format. We/FluffyFreak need this to make the stars (on the skybox/backdrop) seen when flying to reflect their actual positions. See [http://pioneerspacesim.net/forum/viewtopic.php?f=3&amp;amp;t=302 dev forum post] for more info. &lt;br /&gt;
*Edit the wiki page detailing how [[Commodity_Prices|Commodity Prices]] should be goverened by planet environments, etc. See various posts on dev forum, like [http://pioneerspacesim.net/forum/viewtopic.php?f=3&amp;amp;t=201 Rethinking the planets] and [http://pioneerspacesim.net/forum/viewtopic.php?f=3&amp;amp;t=145&amp;amp;start=20 Life in Pioneer], [http://pioneerspacesim.net/forum/viewtopic.php?f=3&amp;amp;t=204 Unorthodox orbital configurations] (about Lagrange points), and [http://pioneerspacesim.net/forum/viewtopic.php?p=2275#p2275 this] post. &lt;br /&gt;
&lt;br /&gt;
== Writing ==&lt;br /&gt;
&lt;br /&gt;
Anyone proficient in English may help out with writing, either for the in game content, or for the wiki.&lt;br /&gt;
&lt;br /&gt;
*One sentence description of each piece of ship equipment (to be shown in the game when selecting the item to buy). &lt;br /&gt;
*Description of each ship equipment here on the wiki &lt;br /&gt;
*Background (short and long) of star systems, like the ones seen when clicking on Epsilon Eridani in game. &lt;br /&gt;
&lt;br /&gt;
== Wiki maintenance ==&lt;br /&gt;
&lt;br /&gt;
If you know English you can help write tutorials, manuals, info on systems, locations, equipment, ships, and proofreading for this wiki. You can also help&lt;br /&gt;
&lt;br /&gt;
*Update outdated images showing the old user interfaces. &lt;br /&gt;
*Update / fix currently (2014-06) broken links to images of ships &lt;br /&gt;
&lt;br /&gt;
See [[Getting_started|Getting started]] for wiki howto.&lt;br /&gt;
&lt;br /&gt;
== Translate ==&lt;br /&gt;
&lt;br /&gt;
If you know a language other than English you can help out with [[Translations|Translations]] of the game. Even the ones that are [https://www.transifex.com/projects/p/pioneer/ translated] could need improvements.&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Lua-based_equipment&amp;diff=3971</id>
		<title>Lua-based equipment</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Lua-based_equipment&amp;diff=3971"/>
		<updated>2020-12-09T18:38:20Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{outdated}}&lt;br /&gt;
As of March 2013, there's been an ongoing effort for about a year to rewrite the equipment system to be able to define and modify random pieces of equipment through Lua.&lt;br /&gt;
The resulting system is entirely Lua-based, and communicates with C++ only Ship properties (as in PropertyMap) suffixed with _cap&lt;br /&gt;
&lt;br /&gt;
== From the C++ side ==&lt;br /&gt;
&lt;br /&gt;
If you wish to know if there is an ECM installed on &amp;lt;code&amp;gt;ship&amp;lt;/code&amp;gt;, you would just do&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int ecm_cap;&lt;br /&gt;
ship.Properties().Get(&amp;quot;ecm_cap&amp;quot;, ecm_cap); // This gets you the actual value of the modifier, ie the strength of the ECM&lt;br /&gt;
if (ecm_cap &amp;gt; 0) {&lt;br /&gt;
    BlastAwayThisMissileWithStrength(ecm_cap);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the UI is being ported to new-ui and thus is defined in Lua, you shouldn't need to access the equipment directly. If you need more interaction with the equipment than simple modifiers, it might be worth it to write specific Lua interfaces that are to be called by the relevant pieces of equipment at install/uninstall time.&lt;br /&gt;
&lt;br /&gt;
TODO: A list of all the modifiers used in the C++ code.&lt;br /&gt;
&lt;br /&gt;
== From the Lua side ==&lt;br /&gt;
=== Accessing the equipment ===&lt;br /&gt;
The Lua interface to fetch, count, etc, the equipment hasn't changed much, I tried to keep the API changes to a minimum.&lt;br /&gt;
The difference is that instead of manipulating constants (well, strings) you will use straight Lua object.&lt;br /&gt;
For instance, instead of&lt;br /&gt;
&amp;lt;code&amp;gt;Game.player:AddEquip(&amp;quot;HYDROGEN&amp;quot;, 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
You'll write&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Equipment = import(&amp;quot;Equipment&amp;quot;)&lt;br /&gt;
Game.player:AddEquip(Equipment.cargo.hydrogen, 2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The canonical equipment is stored in 2 tables, &amp;lt;code&amp;gt;equipment&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;cargo&amp;lt;/code&amp;gt;&lt;br /&gt;
The slot names are not in caps anymore, and are the following (with their default size):&lt;br /&gt;
  * cargo=0,&lt;br /&gt;
  * engine=1,&lt;br /&gt;
  * laser_front=1,&lt;br /&gt;
  * laser_rear=0,&lt;br /&gt;
  * missile=0,&lt;br /&gt;
  * ecm=1,&lt;br /&gt;
  * scanner=1,&lt;br /&gt;
  * radar=1,&lt;br /&gt;
  * hypercloud=1,&lt;br /&gt;
  * hull_autorepair=1,&lt;br /&gt;
  * energy_booster=1,&lt;br /&gt;
  * atmo_shield=1,&lt;br /&gt;
  * cabin=50,&lt;br /&gt;
  * shield=9999,&lt;br /&gt;
  * fuel_scoop=1,&lt;br /&gt;
  * cargo_scoop=1,&lt;br /&gt;
  * laser_cooler=1,&lt;br /&gt;
  * cargo_life_support=1,&lt;br /&gt;
  * autopilot=1&lt;br /&gt;
&lt;br /&gt;
=== Creating equipment ===&lt;br /&gt;
There are basically two ways to create a new piece of equipment for Pioneer.&lt;br /&gt;
&lt;br /&gt;
==== The fast way ====&lt;br /&gt;
You can just instantiate a new EquipType. Its only argument is a table whose only mandatory content are a &amp;lt;code&amp;gt;capabilities&amp;lt;/code&amp;gt; table with the modifiers to apply at install time and a &amp;lt;code&amp;gt;slots&amp;lt;/code&amp;gt; table/string with the name of the slots to install the piece in, stored in the array part of the table. The rest of the table content will get copied in the new object.&lt;br /&gt;
&lt;br /&gt;
Here is the creation of the basic ECM, for instance.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ecm_basic = EquipType.new({&lt;br /&gt;
    name=&amp;quot;Basic ECM&amp;quot;, description=&amp;quot;&amp;quot;,&lt;br /&gt;
    slots=&amp;quot;ecm&amp;quot;, price=600000, modifiers={mass=2000, ecm_power=2}&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Since there is only one slot to install it in, you can just use a single string instead of a full table, the constructor will do the smart thing.&lt;br /&gt;
&lt;br /&gt;
Please bear in mind that the object created this way will be stored as reference every time it gets installed, if you want each piece to be its own object you will have to use another method.&lt;br /&gt;
&lt;br /&gt;
Note that for more specific pieces of equipment such as hyperdrives, you would use HyperdriveType instead of EquipType, with its own specifications.&lt;br /&gt;
&lt;br /&gt;
TODO: Document HyperdriveType&lt;br /&gt;
&lt;br /&gt;
==== The Lego™ way ====&lt;br /&gt;
&lt;br /&gt;
You can actually use any object as a piece of equipment as long as it has the following methods:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;IsValidSlot(slot, ship)&amp;lt;/code&amp;gt; returning &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; if the slot is valid, &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; otherwise. The &amp;lt;code&amp;gt;ship&amp;lt;/code&amp;gt; argument is here for those who would want some variable behaviour, even though I don't see any use case at the moment.&lt;br /&gt;
* &amp;lt;code&amp;gt;GetDefaultSlot(ship)&amp;lt;/code&amp;gt; returns a single string indicating the default slot for the piece of equipment.&lt;br /&gt;
* &amp;lt;code&amp;gt;Install(ship, num, slot)&amp;lt;/code&amp;gt;. This gets called when installing the piece of equipment in the EquipSet. &amp;lt;code&amp;gt;ship&amp;lt;/code&amp;gt; is obviously the targetted ship, &amp;lt;code&amp;gt;num&amp;lt;/code&amp;gt; is the number of pieces planned to be installed, and &amp;lt;code&amp;gt;slot&amp;lt;/code&amp;gt; is the slot it gets installed in. You don't need to check if there is enough place in the slot for the equipment, this has been sorted out already. Typically, it is in this function that the modifiers are applied to the ship. When you're done, just return the number of pieces actually installed.&lt;br /&gt;
* &amp;lt;code&amp;gt;Uninstall(ship, num, slot)&amp;lt;/code&amp;gt;. It is the exact counterpart of &amp;lt;code&amp;gt;Install()&amp;lt;/code&amp;gt;, just return the number of pieces actually uninstalled.&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Interacting_with_the_game:_Event-based_programming&amp;diff=3970</id>
		<title>Interacting with the game: Event-based programming</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Interacting_with_the_game:_Event-based_programming&amp;diff=3970"/>
		<updated>2020-12-09T18:35:15Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{outdated}}&lt;br /&gt;
The Lua scripts are all executed at startup. If you were to add a single file named &amp;lt;code&amp;gt;hello_world.lua&amp;lt;/code&amp;gt; to the '''data/modules''' directory containing the following:&lt;br /&gt;
&lt;br /&gt;
 print(&amp;quot;Hello, World!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
you would literally see the words, &amp;quot;''Hello, World!''&amp;quot; appear in Pioneer's output (if running in a terminal) shortly before the main menu appeared. You would also see it in the Lua console, if you were to open it.&lt;br /&gt;
&lt;br /&gt;
All file-scoped imperative statements in all Lua files are executed at that time. The way to get Lua code to interact with the game itself, beyond that time, is to write functions and to connect them to event handlers. Many events are triggered by Pioneer during the course of play, all of which will cause any functions which are connected to them, to run. Most will provide those functions with arguments.&lt;br /&gt;
&lt;br /&gt;
Here is a quick list of some of the more commonly used events:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; is triggered when the player clicks on a new game button in the main menu, or when the player loads a game.&lt;br /&gt;
* &amp;lt;code&amp;gt;onEnterSystem&amp;lt;/code&amp;gt; is triggered whenever any ship arrives in the current star system after a hyperspace journey.&lt;br /&gt;
* &amp;lt;code&amp;gt;onLeaveSystem&amp;lt;/code&amp;gt; is triggered whenever any ship leaves the current star system by hyperspacing.&lt;br /&gt;
* &amp;lt;code&amp;gt;onShipDestroyed&amp;lt;/code&amp;gt; is triggered whenever any ship is destroyed.&lt;br /&gt;
* &amp;lt;code&amp;gt;onShipDocked&amp;lt;/code&amp;gt; is triggered whenever any ship docks at a starport.&lt;br /&gt;
&lt;br /&gt;
There are many more. All are fully documented in the [http://eatenbyagrue.org/f/pioneer/codedoc/ Pioneer Codedoc]. Of the five that I have listed, only &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; does not provide the function with any arguments. The other four provide a reference to the ship in question, and the latter two each also provide an additional argument (a reference to the attacker, and the starport, respectively).&lt;br /&gt;
&lt;br /&gt;
==Writing a function for an event==&lt;br /&gt;
&lt;br /&gt;
An event handling function does not have to return anything. It will be passed any arguments specified in the documentation, which it can either deal with, or ignore. It has access to any variables that are declared in the same file scope, including named functions and tables.&lt;br /&gt;
&lt;br /&gt;
The following function sends a message to the player's ship console, welcoming them to Pioneer:&lt;br /&gt;
&lt;br /&gt;
 local welcome = function ()&lt;br /&gt;
     UI.Message ('Welcome to Pioneer!')&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
The next one expects a ship, and if that ship is the player, it greets them again:&lt;br /&gt;
&lt;br /&gt;
 local greetShip = function (ship)&lt;br /&gt;
     if ship:IsPlayer() then&lt;br /&gt;
         UI.Message ('Hope you had an enjoyable hyperjump.')&lt;br /&gt;
     end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
All that remains is to attach these functions to events. The first, I'm going to attach to the &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; event, the second, I'm going to attach to &amp;lt;code&amp;gt;onEnterSystem&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 Event.Register(&amp;quot;onGameStart&amp;quot;, welcome)&lt;br /&gt;
 Event.Register(&amp;quot;onEnterSystem&amp;quot;, greetShip)&lt;br /&gt;
&lt;br /&gt;
The Event module houses all functionality related to events. It is generally accessed by declaring it locally: &amp;lt;code&amp;gt;local Event = require 'Event'&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It's actually common practice in Pioneer to name the function after the event:&lt;br /&gt;
&lt;br /&gt;
 local onGameStart = function ()&lt;br /&gt;
     UI.Message ('Welcome to Pioneer!')&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 Event.Register(&amp;quot;onGameStart&amp;quot;, onGameStart)&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Interacting_with_the_game:_Event-based_programming&amp;diff=3966</id>
		<title>Interacting with the game: Event-based programming</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Interacting_with_the_game:_Event-based_programming&amp;diff=3966"/>
		<updated>2020-12-09T18:12:07Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: /* Writing a function for an event */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Lua scripts are all executed at startup. If you were to add a single file named &amp;lt;code&amp;gt;hello_world.lua&amp;lt;/code&amp;gt; to the '''data/modules''' directory containing the following:&lt;br /&gt;
&lt;br /&gt;
 print(&amp;quot;Hello, World!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
you would literally see the words, &amp;quot;''Hello, World!''&amp;quot; appear in Pioneer's output (if running in a terminal) shortly before the main menu appeared. You would also see it in the Lua console, if you were to open it.&lt;br /&gt;
&lt;br /&gt;
All file-scoped imperative statements in all Lua files are executed at that time. The way to get Lua code to interact with the game itself, beyond that time, is to write functions and to connect them to event handlers. Many events are triggered by Pioneer during the course of play, all of which will cause any functions which are connected to them, to run. Most will provide those functions with arguments.&lt;br /&gt;
&lt;br /&gt;
Here is a quick list of some of the more commonly used events:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; is triggered when the player clicks on a new game button in the main menu, or when the player loads a game.&lt;br /&gt;
* &amp;lt;code&amp;gt;onEnterSystem&amp;lt;/code&amp;gt; is triggered whenever any ship arrives in the current star system after a hyperspace journey.&lt;br /&gt;
* &amp;lt;code&amp;gt;onLeaveSystem&amp;lt;/code&amp;gt; is triggered whenever any ship leaves the current star system by hyperspacing.&lt;br /&gt;
* &amp;lt;code&amp;gt;onShipDestroyed&amp;lt;/code&amp;gt; is triggered whenever any ship is destroyed.&lt;br /&gt;
* &amp;lt;code&amp;gt;onShipDocked&amp;lt;/code&amp;gt; is triggered whenever any ship docks at a starport.&lt;br /&gt;
&lt;br /&gt;
There are many more. All are fully documented in the [http://eatenbyagrue.org/f/pioneer/codedoc/ Pioneer Codedoc]. Of the five that I have listed, only &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; does not provide the function with any arguments. The other four provide a reference to the ship in question, and the latter two each also provide an additional argument (a reference to the attacker, and the starport, respectively).&lt;br /&gt;
&lt;br /&gt;
==Writing a function for an event==&lt;br /&gt;
&lt;br /&gt;
An event handling function does not have to return anything. It will be passed any arguments specified in the documentation, which it can either deal with, or ignore. It has access to any variables that are declared in the same file scope, including named functions and tables.&lt;br /&gt;
&lt;br /&gt;
The following function sends a message to the player's ship console, welcoming them to Pioneer:&lt;br /&gt;
&lt;br /&gt;
 local welcome = function ()&lt;br /&gt;
     UI.Message ('Welcome to Pioneer!')&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
The next one expects a ship, and if that ship is the player, it greets them again:&lt;br /&gt;
&lt;br /&gt;
 local greetShip = function (ship)&lt;br /&gt;
     if ship:IsPlayer() then&lt;br /&gt;
         UI.Message ('Hope you had an enjoyable hyperjump.')&lt;br /&gt;
     end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
All that remains is to attach these functions to events. The first, I'm going to attach to the &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; event, the second, I'm going to attach to &amp;lt;code&amp;gt;onEnterSystem&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 Event.Register(&amp;quot;onGameStart&amp;quot;, welcome)&lt;br /&gt;
 Event.Register(&amp;quot;onEnterSystem&amp;quot;, greetShip)&lt;br /&gt;
&lt;br /&gt;
The Event module houses all functionality related to events. It is generally accessed by declaring it locally: &amp;lt;code&amp;gt;local Event = require 'Event'&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It's actually common practice in Pioneer to name the function after the event:&lt;br /&gt;
&lt;br /&gt;
 local onGameStart = function ()&lt;br /&gt;
     UI.Message ('Welcome to Pioneer!')&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 Event.Register(&amp;quot;onGameStart&amp;quot;, onGameStart)&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Interacting_with_the_game:_Event-based_programming&amp;diff=3965</id>
		<title>Interacting with the game: Event-based programming</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Interacting_with_the_game:_Event-based_programming&amp;diff=3965"/>
		<updated>2020-12-09T18:11:34Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: /* Writing a function for an event */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Lua scripts are all executed at startup. If you were to add a single file named &amp;lt;code&amp;gt;hello_world.lua&amp;lt;/code&amp;gt; to the '''data/modules''' directory containing the following:&lt;br /&gt;
&lt;br /&gt;
 print(&amp;quot;Hello, World!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
you would literally see the words, &amp;quot;''Hello, World!''&amp;quot; appear in Pioneer's output (if running in a terminal) shortly before the main menu appeared. You would also see it in the Lua console, if you were to open it.&lt;br /&gt;
&lt;br /&gt;
All file-scoped imperative statements in all Lua files are executed at that time. The way to get Lua code to interact with the game itself, beyond that time, is to write functions and to connect them to event handlers. Many events are triggered by Pioneer during the course of play, all of which will cause any functions which are connected to them, to run. Most will provide those functions with arguments.&lt;br /&gt;
&lt;br /&gt;
Here is a quick list of some of the more commonly used events:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; is triggered when the player clicks on a new game button in the main menu, or when the player loads a game.&lt;br /&gt;
* &amp;lt;code&amp;gt;onEnterSystem&amp;lt;/code&amp;gt; is triggered whenever any ship arrives in the current star system after a hyperspace journey.&lt;br /&gt;
* &amp;lt;code&amp;gt;onLeaveSystem&amp;lt;/code&amp;gt; is triggered whenever any ship leaves the current star system by hyperspacing.&lt;br /&gt;
* &amp;lt;code&amp;gt;onShipDestroyed&amp;lt;/code&amp;gt; is triggered whenever any ship is destroyed.&lt;br /&gt;
* &amp;lt;code&amp;gt;onShipDocked&amp;lt;/code&amp;gt; is triggered whenever any ship docks at a starport.&lt;br /&gt;
&lt;br /&gt;
There are many more. All are fully documented in the [http://eatenbyagrue.org/f/pioneer/codedoc/ Pioneer Codedoc]. Of the five that I have listed, only &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; does not provide the function with any arguments. The other four provide a reference to the ship in question, and the latter two each also provide an additional argument (a reference to the attacker, and the starport, respectively).&lt;br /&gt;
&lt;br /&gt;
==Writing a function for an event==&lt;br /&gt;
&lt;br /&gt;
An event handling function does not have to return anything. It will be passed any arguments specified in the documentation, which it can either deal with, or ignore. It has access to any variables that are declared in the same file scope, including named functions and tables.&lt;br /&gt;
&lt;br /&gt;
The following function sends a message to the player's ship console, welcoming them to Pioneer:&lt;br /&gt;
&lt;br /&gt;
 local welcome = function ()&lt;br /&gt;
     UI.Message ('Welcome to Pioneer!')&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
The next one expects a ship, and if that ship is the player, it greets them again:&lt;br /&gt;
&lt;br /&gt;
 local greetShip = function (ship)&lt;br /&gt;
     if ship:IsPlayer() then&lt;br /&gt;
         UI.Message ('Hope you had an enjoyable hyperjump.')&lt;br /&gt;
     end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
All that remains is to attach these functions to events. The first, I'm going to attach to the &amp;lt;code&amp;gt;onGameStart&amp;lt;/code&amp;gt; event, the second, I'm going to attach to &amp;lt;code&amp;gt;onEnterSystem&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 Event.onGameStart:Connect(welcome)&lt;br /&gt;
 Event.onEnterSystem:Connect(greetShip)&lt;br /&gt;
&lt;br /&gt;
The Event module houses all functionality related to events. It is generally accessed by declaring it locally: &amp;lt;code&amp;gt;local Event = require 'Event'&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It's actually common practice in Pioneer to name the function after the event:&lt;br /&gt;
&lt;br /&gt;
 local onGameStart = function ()&lt;br /&gt;
     UI.Message ('Welcome to Pioneer!')&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 Event.Register(&amp;quot;onGameStart&amp;quot;, onGameStart)&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Creating_Simple_Pattern_Textures_in_GIMP&amp;diff=3940</id>
		<title>Creating Simple Pattern Textures in GIMP</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Creating_Simple_Pattern_Textures_in_GIMP&amp;diff=3940"/>
		<updated>2020-07-04T18:09:46Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shows some ways to make textures that look detailed but are 'random,' without any specific detail. This is generally desirable for texturing the surface of a planet/moon/etc, but it could also be useful for certain parts of ships.&lt;br /&gt;
&lt;br /&gt;
The menus and commands outlined are based on GIMP 2.10.18, but should be possible to complete in any recent version of GIMP, just keep in mind the menus may be structured a bit different in older versions.&lt;br /&gt;
&lt;br /&gt;
Also, the filters in Filters-&amp;gt;Render-&amp;gt;Noise are your friends! These examples show a few ways to use them, but mixing these with color overlays, Filters-&amp;gt;Map-&amp;gt;* and others can yield multiple possibilities.&lt;br /&gt;
&lt;br /&gt;
== A Simple Tree Canopy Texture ==&lt;br /&gt;
&lt;br /&gt;
Many textures can be created with just a layer or two. For this one:&lt;br /&gt;
# First open GIMP and create a new image that is 1024x1024. The background color doesn't matter.&lt;br /&gt;
# Apply the Solid Noise filter (Right click-&amp;gt;Filters-&amp;gt;Render-&amp;gt;Noise-&amp;gt;Solid Noise).&lt;br /&gt;
## You can play around with the 'Size' and 'Detail' to get the effect you want, but for this a size around 8 and detail of 3 should be good.&lt;br /&gt;
## Check 'Tileable.'&lt;br /&gt;
## Click 'New Seed' a few times if you want.&lt;br /&gt;
## You should see something like this:&lt;br /&gt;
##: [[File:Gimp_textures_trees_1.png|200px]]&lt;br /&gt;
## Click OK&lt;br /&gt;
# Create a new layer&lt;br /&gt;
# Pick a nice green color and use the Bucket Fill Tool to paint the new layer that color:&lt;br /&gt;
#: [[File:Gimp_textures_trees_2.png|200px]]&lt;br /&gt;
# Set the Mode for the top layer (green) to 'Grain Merge'&lt;br /&gt;
# Flatten the image (Right click-&amp;gt;Image-&amp;gt;Flatten Image)&lt;br /&gt;
* You should have something like this:&lt;br /&gt;
*: [[File:Gimp_textures_trees_3.png|200px]]&lt;br /&gt;
* Which should look something like a tree canopy on a planet:&lt;br /&gt;
*: [[File:Gimp_textures_trees_4.png|200px]]&lt;br /&gt;
&lt;br /&gt;
== Rough Ice ==&lt;br /&gt;
&lt;br /&gt;
# Open GIMP and create a new image that is 1024x1024. The background color doesn't matter.&lt;br /&gt;
# Set the Foreground Color to black, and the Background Color to white (click the black/white button near the color swatches).&lt;br /&gt;
# Fill the background layer with a gradient that goes from black to white, left to right:&lt;br /&gt;
#: [[File:Gimp_textures_ice_1.png|200px]]&lt;br /&gt;
# Create new layer, on top of the background layer.&lt;br /&gt;
# Set the Mode of the new layer to 'Difference.'&lt;br /&gt;
# Apply the 'Solid Noise' Filter to the new layer (Right click-&amp;gt;Filters-&amp;gt;Render-&amp;gt;Solid Noise).&lt;br /&gt;
## You can play around with the 'Size' and 'Detail' to get the effect you want, but for this a size around 3.5 and detail of 3 should be good.&lt;br /&gt;
## Check 'Tileable.'&lt;br /&gt;
## Click 'New Seed' a few times if you want.&lt;br /&gt;
## You should see something like this:&lt;br /&gt;
##: [[File:Gimp_textures_ice_2.png|200px]]&lt;br /&gt;
## Click OK.&lt;br /&gt;
# Merge the layer down (Right click on it in the layers window-&amp;gt;Merge Down).&lt;br /&gt;
# Invert the colors (Right click-&amp;gt;Colors-&amp;gt;Invert).&lt;br /&gt;
# Adjust the color levels to bring out the detail:&lt;br /&gt;
## Right click-&amp;gt;Colors-&amp;gt;Levels.&lt;br /&gt;
## Drag the middle thumb under the 'Input Levels' histogram to the right side of the graph.&lt;br /&gt;
## You want something like this:&lt;br /&gt;
##: [[FIle:Gimp_textures_ice_3.png|200px]]&lt;br /&gt;
# Add a new layer and fill it with a light gray color.&lt;br /&gt;
# With the new layer active, apply a Bump Map (Right Click-&amp;gt;Filters-&amp;gt;Map-&amp;gt;Bump Map).&lt;br /&gt;
## Select the other layer as the 'aux input'.&lt;br /&gt;
## Again, play around with the settings to see what they do, but for this:&lt;br /&gt;
### Check Invert and Tiled&lt;br /&gt;
### Type = Spherical&lt;br /&gt;
### Azimuth ~= 135&lt;br /&gt;
### Elevation ~= 12&lt;br /&gt;
### Depth = 8&lt;br /&gt;
## You should have something like this:&lt;br /&gt;
##: [[File:Gimp_textures_ice_4.png|200px]]&lt;br /&gt;
# Get rid of the hard edges and flat spots by blurring the image:&lt;br /&gt;
## Apply a Gaussian Blur with a size somewhere between 2 and 6.&lt;br /&gt;
# You should end up with something like:&lt;br /&gt;
#: [[File:Gimp_textures_ice_5.png|200px]]&lt;br /&gt;
* Which should make an interesting texture for icy worlds:&lt;br /&gt;
*: [[File:Gimp_textures_ice_6.png|200px]]&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_6.png&amp;diff=3939</id>
		<title>File:Gimp textures ice 6.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_6.png&amp;diff=3939"/>
		<updated>2020-07-04T18:08:32Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_5.png&amp;diff=3938</id>
		<title>File:Gimp textures ice 5.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_5.png&amp;diff=3938"/>
		<updated>2020-07-04T18:07:44Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_4.png&amp;diff=3937</id>
		<title>File:Gimp textures ice 4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_4.png&amp;diff=3937"/>
		<updated>2020-07-04T18:04:24Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_3.png&amp;diff=3936</id>
		<title>File:Gimp textures ice 3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_3.png&amp;diff=3936"/>
		<updated>2020-07-04T18:00:25Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_2.png&amp;diff=3935</id>
		<title>File:Gimp textures ice 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_2.png&amp;diff=3935"/>
		<updated>2020-07-04T17:56:38Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_1.png&amp;diff=3934</id>
		<title>File:Gimp textures ice 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_ice_1.png&amp;diff=3934"/>
		<updated>2020-07-04T17:53:35Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Creating_Simple_Pattern_Textures_in_GIMP&amp;diff=3933</id>
		<title>Creating Simple Pattern Textures in GIMP</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Creating_Simple_Pattern_Textures_in_GIMP&amp;diff=3933"/>
		<updated>2020-07-04T17:29:43Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shows some ways to make textures that look detailed but are 'random,' without any specific detail. This is generally desirable for texturing the surface of a planet/moon/etc, but it could also be useful for certain parts of ships.&lt;br /&gt;
&lt;br /&gt;
The menus and commands outlined are based on GIMP 2.10.18, but should be possible to complete in any recent version of GIMP, just keep in mind the menus may be structured a bit different in older versions.&lt;br /&gt;
&lt;br /&gt;
Also, the filters in Filters-&amp;gt;Render-&amp;gt;Noise are your friends! These examples show a few ways to use them, but mixing these with color overlays, Filters-&amp;gt;Map-&amp;gt;* and others can yield multiple possibilities.&lt;br /&gt;
&lt;br /&gt;
== A Simple Tree Canopy Texture ==&lt;br /&gt;
&lt;br /&gt;
Many textures can be created with just a layer or two. For this one:&lt;br /&gt;
# First open GIMP and create a new image that is 1024x1024. The background color doesn't matter.&lt;br /&gt;
# Apply the Solid Noise filter (Right click-&amp;gt;Filters-&amp;gt;Render-&amp;gt;Noise-&amp;gt;Solid Noise).&lt;br /&gt;
## You can play around with the 'Size' and 'Detail' to get the effect you want, but for this a size around 8 and detail of 3 should be good.&lt;br /&gt;
## Check 'Tileable.'&lt;br /&gt;
## Click 'New Seed' a few times if you want.&lt;br /&gt;
## You should see something like this:&lt;br /&gt;
##: [[File:Gimp_textures_trees_1.png|200px]]&lt;br /&gt;
## Click OK&lt;br /&gt;
# Create a new layer&lt;br /&gt;
# Pick a nice green color and use the Bucket Fill Tool to paint the new layer that color:&lt;br /&gt;
#: [[File:Gimp_textures_trees_2.png|200px]]&lt;br /&gt;
# Set the Mode for the top layer (green) to 'Grain Merge'&lt;br /&gt;
# Flatten the image (Right click-&amp;gt;Image-&amp;gt;Flatten Image)&lt;br /&gt;
* You should have something like this:&lt;br /&gt;
*: [[File:Gimp_textures_trees_3.png|200px]]&lt;br /&gt;
* Which should look something like a tree canopy on a planet:&lt;br /&gt;
*: [[File:Gimp_textures_trees_4.png|200px]]&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Modeling,_Texturing,_Graphics_Design&amp;diff=3932</id>
		<title>Modeling, Texturing, Graphics Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Modeling,_Texturing,_Graphics_Design&amp;diff=3932"/>
		<updated>2020-07-04T17:29:07Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: /* GIMP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assets already made, or work in progress can be found in the [[Asset List]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= General Information =&lt;br /&gt;
&lt;br /&gt;
*[[Visual_Style_guide|Visual Style guide]] &lt;br /&gt;
*[[Asset_List|Asset List]] &lt;br /&gt;
*[[Making_your_first_ship|Making your first ship]] &lt;br /&gt;
*[[Making_your_first_ship_from_scratch|Making your first ship from scratch]] &lt;br /&gt;
*[[Creating_Ships_and_Stations|Creating Ships and Stations]] &lt;br /&gt;
*[[Modelling_stations|Modelling stations]] &lt;br /&gt;
*[[Modeling_cockpits|Modeling cockpits]]&lt;br /&gt;
&lt;br /&gt;
=Asset Creation=&lt;br /&gt;
== Modeling ==&lt;br /&gt;
&lt;br /&gt;
*[[Model_system|Model system]]&lt;br /&gt;
*[[Model_debug_flags|Model debug flags]]&amp;amp;nbsp;for in-game checking.&lt;br /&gt;
*[[Ship.json_for_setting_up_ship_properties|Ship.json for setting up ship properties]]&lt;br /&gt;
*[http://pioneerspacesim.net/forum/viewtopic.php?f=3&amp;amp;t=38&amp;amp;#p2352 Ship stat planner calculator addon for Blender]&lt;br /&gt;
*[[Model_viewer|Model viewer]]&lt;br /&gt;
*[[Transitioning_to_the_new_model_system|Transitioning to the new model system]]&lt;br /&gt;
*[[Model_QA_Checklist|Model QA Checklist]]&lt;br /&gt;
*[[Optimising_geometry|Optimising geometry]]&lt;br /&gt;
*[[LOD-ing_tips|LOD-ing tips]]&lt;br /&gt;
&lt;br /&gt;
=== Blender ===&lt;br /&gt;
&lt;br /&gt;
*[[Blender_Tips|Blender Tips]]&lt;br /&gt;
*[[UV_coordinates_in_Blender|UV coordinates in Blender]]&lt;br /&gt;
*[[Asteroids_and_rocks_in_Blender|Asteroids and rocks in Blender]]&lt;br /&gt;
*[[Scripting_Blender|Scripting Blender]]&lt;br /&gt;
*[[:Category:Blender|Blender]]&lt;br /&gt;
&lt;br /&gt;
=== [[3DS_Max|3DS Max]] ===&lt;br /&gt;
&lt;br /&gt;
==Texturing==&lt;br /&gt;
* [[Textures]]&lt;br /&gt;
* [[DDS textures]]&lt;br /&gt;
* [[Transparency]]&lt;br /&gt;
===GIMP===&lt;br /&gt;
* [[GIMP Tips]]&lt;br /&gt;
* [[Cutaway panels in GIMP]]&lt;br /&gt;
* [[:Category:GIMP|GIMP]]&lt;br /&gt;
* [[Creating Simple Pattern Textures in GIMP]]&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Creating_Simple_Pattern_Textures_in_GIMP&amp;diff=3931</id>
		<title>Creating Simple Pattern Textures in GIMP</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Creating_Simple_Pattern_Textures_in_GIMP&amp;diff=3931"/>
		<updated>2020-07-04T17:27:41Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: Added tree canopy texture steps&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shows some ways to make textures that look detailed but are 'random,' without any specific detail. This is generally desirable for texturing the surface of a planet/moon/etc, but it could also be useful for certain parts of ships.&lt;br /&gt;
&lt;br /&gt;
The menus and commands outlined are based on GIMP 2.10.18, but should be possible to complete in any recent version of GIMP, just keep in mind the menus may be structured a bit different in older versions.&lt;br /&gt;
&lt;br /&gt;
Also, the filters in Filters-&amp;gt;Render-&amp;gt;Noise are your friends! These example show a few ways to use them, but mixing these with color overlays, Filters-&amp;gt;Map-&amp;gt;* and others can yield multiple possibilities.&lt;br /&gt;
&lt;br /&gt;
== A Simple Tree Canopy Texture ==&lt;br /&gt;
&lt;br /&gt;
Many textures can be created with just a layer or two. For this one:&lt;br /&gt;
# First open GIMP and create a new image that is 1024x1024. The background color doesn't matter.&lt;br /&gt;
# Apply the Solid Noise filter (Right click-&amp;gt;Filters-&amp;gt;Render-&amp;gt;Noise-&amp;gt;Solid Noise).&lt;br /&gt;
## You can play around with the 'Size' and 'Detail' to get the effect you want, but for this a size around 8 and detail of 3 should be good.&lt;br /&gt;
## Check 'Tileable.'&lt;br /&gt;
## Click 'New Seed' a few times if you want.&lt;br /&gt;
## You should see something like this:&lt;br /&gt;
##: [[File:Gimp_textures_trees_1.png|200px]]&lt;br /&gt;
## Click OK&lt;br /&gt;
# Create a new layer&lt;br /&gt;
# Pick a nice green color and use the Bucket Fill Tool to paint the new layer that color:&lt;br /&gt;
#: [[File:Gimp_textures_trees_2.png|200px]]&lt;br /&gt;
# Set the Mode for the top layer (green) to 'Grain Merge'&lt;br /&gt;
# Flatten the image (Right click-&amp;gt;Image-&amp;gt;Flatten Image)&lt;br /&gt;
* You should have something like this:&lt;br /&gt;
*: [[File:Gimp_textures_trees_3.png|200px]]&lt;br /&gt;
* Which should look something like a tree canopy on a planet:&lt;br /&gt;
*: [[File:Gimp_textures_trees_4.png|200px]]&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_trees_4.png&amp;diff=3930</id>
		<title>File:Gimp textures trees 4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_trees_4.png&amp;diff=3930"/>
		<updated>2020-07-04T17:25:10Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_trees_3.png&amp;diff=3929</id>
		<title>File:Gimp textures trees 3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_trees_3.png&amp;diff=3929"/>
		<updated>2020-07-04T17:18:59Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_trees_2.png&amp;diff=3928</id>
		<title>File:Gimp textures trees 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_trees_2.png&amp;diff=3928"/>
		<updated>2020-07-04T17:15:32Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_trees_1.png&amp;diff=3927</id>
		<title>File:Gimp textures trees 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=File:Gimp_textures_trees_1.png&amp;diff=3927"/>
		<updated>2020-07-04T17:08:35Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.pioneerspacesim.net/index.php?title=Compiling&amp;diff=3920</id>
		<title>Compiling</title>
		<link rel="alternate" type="text/html" href="https://wiki.pioneerspacesim.net/index.php?title=Compiling&amp;diff=3920"/>
		<updated>2020-06-16T13:00:26Z</updated>

		<summary type="html">&lt;p&gt;TaylorT: /* Compiling Pioneer on Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Compiling Pioneer on Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
* libtool&lt;br /&gt;
* sigc++-2.0&lt;br /&gt;
* freetype2&lt;br /&gt;
* GL and GLU&lt;br /&gt;
* GLEW&lt;br /&gt;
* SDL 1.2&lt;br /&gt;
* SDL_image&lt;br /&gt;
&lt;br /&gt;
Since pioneer is currently only available from the source repository, you also need autoconf and automake in order to generate the ./configure script (by running ./bootstrap)&lt;br /&gt;
&lt;br /&gt;
You also need git to check the source code out from the repository.&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu 10.04 command to install all the requisite libraries ====&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install libsigc++-2.0-dev libglut3-dev libglew1.5-dev libsdl1.2-dev libvorbis-dev libsdl-image1.2-dev dh-autoreconf git libfreetype6-dev&lt;br /&gt;
&lt;br /&gt;
This may work on other versions of Ubuntu, and possibly Debian or their derivatives too.&lt;br /&gt;
&lt;br /&gt;
=== Downloading it ===&lt;br /&gt;
&lt;br /&gt;
Pioneer is managed using Git, and is stored over at [http://github.com/ Github]. The [https://github.com/pioneerspacesim/pioneer official repository] is the best one to get. To get it:&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/pioneerspacesim/pioneer.git&lt;br /&gt;
&lt;br /&gt;
This will get you on the &amp;quot;master&amp;quot; branch, which is where new code is merged. This is the latest and greatest development and is quite unstable. To build a specific alpha, you need to checkout the appropriate release tag:&lt;br /&gt;
&lt;br /&gt;
 git checkout alpha9&lt;br /&gt;
&lt;br /&gt;
=== Building it ===&lt;br /&gt;
&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 ln -s ../data ./src/data&lt;br /&gt;
&lt;br /&gt;
Currently Pioneer runs from where it is built, and doesn't require (or work with) '''make install'''. To run it:&lt;br /&gt;
&lt;br /&gt;
 ./src/pioneer&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
For developers, gdb can be used for debugging&lt;br /&gt;
&lt;br /&gt;
 gdb ./src/pioneer&lt;br /&gt;
 run&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bugs, and feature requests, should be logged on the [https://github.com/pioneerspacesim/pioneer/issues issue tracker.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compiling Pioneer on Windows ==&lt;br /&gt;
&lt;br /&gt;
An MSVC 2019&amp;amp;nbsp;solution file can be found in the win32/vc2019&amp;amp;nbsp;folder. Open this file and Pioneer should build just fine. All dependencies are provided so you don't need to compile any libraries.&lt;br /&gt;
Copy the .dll files from win32/vc2019&amp;amp;nbsp;into the root folder (the one containing data, src, win32 directories), and you will be able to run the pioneer .exe file you just compiled.&lt;br /&gt;
&lt;br /&gt;
If the child projects will not open with the error 'Error HRESULT E_FAIL has been returned from a call to a COM component', disable 'Automatically show data connections from web.conf':  &lt;br /&gt;
Tools -&amp;gt; Options -&amp;gt; Projects and Solutions -&amp;gt; Web Projects&lt;br /&gt;
&lt;br /&gt;
== Cross-compiling Pioneer for Windows on Linux ==&lt;br /&gt;
&lt;br /&gt;
If you want to run Pioneer on Windows but compile it on Linux, this can be done with [http://mingw-cross-env.nongnu.org/ mingw-cross-env]; but note, these instructions do assume some familiarity with developing software on Unix systems. They will probably be useful as a starting point on Unixen other than Linux. You'll need a couple of gigabytes of disc space for everything to live in.&lt;br /&gt;
&lt;br /&gt;
=== Preparing to install mingw-cross-env ===&lt;br /&gt;
&lt;br /&gt;
First, check the [http://mingw-cross-env.nongnu.org/#requirements requirements page] to ensure you have all the necessary development packages installed on your Linux system. For many Linux distributions, the package names are listed explicitly. Install any that are missing.&lt;br /&gt;
&lt;br /&gt;
=== Downloading mingw-cross-env ===&lt;br /&gt;
&lt;br /&gt;
You might try either the [http://mingw-cross-env.nongnu.org/#latest-release latest release] of mingw-cross-env or the [http://mingw-cross-env.nongnu.org/#development current development version]. The former is more likely to be stable, but does have problems with the locations of the packages it downloads being changed since it was released. I recommend you try the current development version first. As detailed at that link, you can retrieve the current development version by doing:&lt;br /&gt;
&lt;br /&gt;
 hg clone http://hg.savannah.nongnu.org/hgweb/mingw-cross-env&lt;br /&gt;
&lt;br /&gt;
This makes a directory 'mingw-cross-env' and puts everything in that directory. Alternatively, if you downloaded the latest release, do:&lt;br /&gt;
&lt;br /&gt;
 tar -xvzf mingw-cross-env-2.2.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
(replacing &amp;quot;2.2.1&amp;quot; with the number of the release you actually downloaded).&lt;br /&gt;
&lt;br /&gt;
=== Compiling mingw-cross-env ===&lt;br /&gt;
&lt;br /&gt;
Either way, 'cd' into the directory just created and do:&lt;br /&gt;
&lt;br /&gt;
 make gcc glew tiff libpng jpeg zlib libsigc++ vorbis freetype sdl sdl_image&lt;br /&gt;
&lt;br /&gt;
This will take quite a long time, unless you have a very fast computer. In particular, building gcc takes the lion's share of the time; if you have an older machine, it could easily take an hour or two. Do not be alarmed.&lt;br /&gt;
&lt;br /&gt;
In the future, if these instructions are out of date, it is likely that Pioneer will have additional requirements. The subdirectory 'src' of the mingw-cross-env distribution has a number of files with names of the form 'foo.mk', each of which corresponds to an available package &amp;quot;foo&amp;quot; (a &amp;quot;package&amp;quot; here is typically either a library or a development tool), and the names of additional package files could be appended to the 'make' command. Alternatively you could do:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
to make every mingw package, but this will obviously take much longer than building only the packages required.&lt;br /&gt;
&lt;br /&gt;
The mingw-cross-env pages contain some discussion of how to install these tools as root for the use of all users on a system, but that is beyond the scope of this page.&lt;br /&gt;
&lt;br /&gt;
==== Things that might go wrong ====&lt;br /&gt;
&lt;br /&gt;
Various things in your environment can mess up this compilation process. For example, if you have environment variables set which force 'ls' always to produce colour output, the configure scripts will choke. Normally, the package being built has created a directory called 'tmp.''packagename'''; 'cd' into that directory and run 'make'. That will show you the output from 'configure', and ordinarily a file 'config.log' is created (perhaps in a subdirectory of that directory) which shows exactly which configure test failed and how.&lt;br /&gt;
&lt;br /&gt;
=== Downloading Pioneer ===&lt;br /&gt;
&lt;br /&gt;
'cd' out of the mingw-cross-env directories, and do:&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/pioneerspacesim/pioneer.git&lt;br /&gt;
&lt;br /&gt;
(See the discussion above pertaining to which version you are downloading.) 'cd' into the directory just created. &lt;br /&gt;
&lt;br /&gt;
=== Compiling Pioneer ===&lt;br /&gt;
&lt;br /&gt;
You want to set your PATH to include the mingw-cross-env tools you just compiled; if you had unpacked mingw-cross-env directly in your home directory, you would do:&lt;br /&gt;
&lt;br /&gt;
 export PATH=~/mingw-cross-env/usr/bin:$PATH&lt;br /&gt;
&lt;br /&gt;
Now in the Pioneer directory do:&lt;br /&gt;
&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 ./configure --host=i686-pc-mingw32&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
That will eventually build 'pioneer.exe' and 'modelviewer.exe'.&lt;br /&gt;
&lt;br /&gt;
==== Things that might go wrong ====&lt;br /&gt;
&lt;br /&gt;
You might think the libraries in the 'win32' directory of the Pioneer distribution are relevant, and start adding flags to the 'configure' invocation to use them. Don't. You might be missing a mingw-cross-env package; check to see if the Pioneer requirements have changed.&lt;br /&gt;
&lt;br /&gt;
=== Installing it on a Windows system ===&lt;br /&gt;
&lt;br /&gt;
In the main Pioneer directory, do:&lt;br /&gt;
&lt;br /&gt;
 mv src/pioneer.exe src/modelviewer.exe .&lt;br /&gt;
&lt;br /&gt;
Now you want to copy the contents of the main Pioneer directory along with the 'data' subdirectory, but not any other subdirectories (although copying them to the Windows system is harmless).&lt;/div&gt;</summary>
		<author><name>TaylorT</name></author>
		
	</entry>
</feed>