<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://backup.witchspacewiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+Cobra+Ball+Run</id>
	<title>Elite Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://backup.witchspacewiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+Cobra+Ball+Run"/>
	<link rel="alternate" type="text/html" href="http://backup.witchspacewiki.org/index.php/Special:Contributions/The_Cobra_Ball_Run"/>
	<updated>2026-04-12T09:47:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7783</id>
		<title>OXP tutorial</title>
		<link rel="alternate" type="text/html" href="http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7783"/>
		<updated>2007-09-27T14:48:07Z</updated>

		<summary type="html">&lt;p&gt;The Cobra Ball Run: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==My First OXP==&lt;br /&gt;
&lt;br /&gt;
An [[OXP]] is an expansion pack to [[Oolite]]. You can customise the whole [[Oolite]] experience. In the same directory as the [[oolite.app]] directory is an AddOns directory. An OXP is a directory under AddOns called oxpname.oxp where oxpname is the name of your expansion pack. I have rashly committed to an ambitious OXP on the oolite BB[http://aegidian.org/bb/index.php] - this tutorial / blog is the story of how I got there.&lt;br /&gt;
&lt;br /&gt;
===Creating My First Ship (cobraball_1_0)===&lt;br /&gt;
&lt;br /&gt;
My first [[OXP]] will be to create a ship. There are 2 approaches to this. The first involves [[OXP_howto_model|3D modelling]]. That is time consuming and too involved for my level of impatience. So we'll use the second method - borrowing someone else's model. &lt;br /&gt;
&lt;br /&gt;
Configuration files and scripts are either [[Property lists|property lists]] (.plist extension) or [[Scripting_Oolite_with_JavaScript|javascript]] (.js extension). Both are text format. Notepad++[http://notepad-plus.sourceforge.net/] is a good editting tool - even if I prefer vi[www.vim.org/download.php]. Though you can use whatever editor you are comfortable with (apart from Windows notepad). &lt;br /&gt;
&lt;br /&gt;
First we need a name for our expansion pack. If you plan on deploying it try to make it unique. Thargons.oxp is a stunningly bad name as it is likely to crash. Thus I will call this expansion pack cobraball_1_0.oxp. Throughout this tutorial I am using a major and minor version number - so you can download and identify all the examples.&lt;br /&gt;
&lt;br /&gt;
Having come up with a catchy (well unique) name, we need a directory. Create a directory called cobraball_1_0.oxp in the [[AddOns]] directory. Create a Config sub directory. Within the Config directory create a text file called shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
This will be our first [[Property list]]. There are 2 different [[Property_list#Formats|formats]], but this a tutorial not a reference manual so we will ignore one of them and use the XML format.&lt;br /&gt;
&lt;br /&gt;
Below is a blank template for a [[Property_list|Property list]]. For our purposes we need to use the header and footer below and don't need to understand them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is a comment and is ignored by Oolite --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is where in the file all of our stuff goes --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- you can ignore the header and footer parts --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enough preamble - on with our first [[OXP]]. We are going to build a ship. It will be like the [[Cobra_Mk.3_(Oolite)|Cobra Mk III]] (the playable version not the pirate / trader)- except we'll change it around a bit - otherwise what is the point? The key (internal name) for the ship will be cobraball_cobra_1_0 - this is never seen by the player. Note the use of the like_ship key. Take the code below and save it in shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the header and the start of the custom code --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;My Custom Cobra Mk III&amp;lt;/string&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the custom code and the start of the footer --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the header and footer can get boring very quickly and add clutter I won't include them from here on. Unless I do. &lt;br /&gt;
&lt;br /&gt;
As might be obvious shipdata.plist is the ships configuration file. The shipdata.plist information in all the installed OXPs is added to the standard definition in the central shipdata.plist to get the master list used in the gameplay. For the impatient the full list of available fields is available [[Shipdata.plist|here]].&lt;br /&gt;
&lt;br /&gt;
The ship now exists, but it would not be particularly easy to find at the moment. Thus we need more code wizardry. Create a new text file demoships.plist in the same Config directory as shipdata.plist. Add the following code to it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;cobraball_cobra_1_0&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now fire up Oolite. And when it asks if you want to load the previous commander - press &amp;quot;N&amp;quot;. Then use the left arrow to toggle through the ships - and delight in your new caption. &lt;br /&gt;
&lt;br /&gt;
===Creating My First Useful Ship (cobraball_1_1)===&lt;br /&gt;
&lt;br /&gt;
Ok, all so far, so impressive, but that was an awful lot of work to look at the standard Cobra. Now what we want to do is fly this baby. &lt;br /&gt;
&lt;br /&gt;
Before we can fly it, we need to buy it. So we need a new configuration file in the [[OXP]]. Create a new text file shipyard.plist.  For the impatient the full list of available fields is available [[Shipyard.pdata|here]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The chance of getting this ship in a ship yard. 1 is certainty. 0 is never. We always want to see out ship, so we can test it--&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is available from the f3 screen --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_PULSE_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MINING_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Bargain for testing purposes --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is standard equipment --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;array&amp;gt;&lt;br /&gt;
				&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Defines the default forward facing weapon --&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;forward_weapon_type&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should all be straight forward but a useful reference for plist files can be found [[OXP_howto|here]]. But enough of that dry academia, let's fly. Start up Oolite. Start a new game. Press F3 twice. Buy your very own ship and take it for a spin. &lt;br /&gt;
&lt;br /&gt;
===Creating My First Game Killer Ship (cobraball_1_2)===&lt;br /&gt;
&lt;br /&gt;
Now this is all well and good, but where is the fun? I know you are going to build a stupidly overspecified mean machine, so we may as well show you how so you can get it out of your system. &lt;br /&gt;
&lt;br /&gt;
'''shipdata.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
&amp;lt;!-- Stupidly high recharge rate - same as for a station --&amp;gt;  &lt;br /&gt;
   &amp;lt;key&amp;gt;energy_recharge_rate&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
&amp;lt;!-- I like yellow lasers --&amp;gt;     &lt;br /&gt;
   &amp;lt;key&amp;gt;laser_color&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;yellowColor&amp;lt;/string&amp;gt;   &lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;!-- Energy bars are energy divided by 64 --&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_energy&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;920&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_cargo&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;integer&amp;gt;250&amp;lt;/integer&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_pitch&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;3.0&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_roll&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;4.2&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_speed&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;1000&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;20&amp;lt;/real&amp;gt;   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;Super Cobra Mk III (1.2)&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;thrust&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shipyard.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_CLOAKING_DEVICE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_JAMMER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_SCANNER_FILTER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;20&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make all the good stuff standard. Including some stuff only available as a mission reward. This is a game play killer so don't. The EQ_ codes are defined in [[Equipment.plist]].&lt;br /&gt;
&lt;br /&gt;
The trouble with super ships like the above is that they wreck the balance of the game - they take away the challenge and make life too easy. Just because we can does not mean we should. Superman would be mighty dull without Kryptonite to add some drama.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BEYOND THIS POINT IS A WORK IN PROGRESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Asteroids and positioning (cobraball_1_3)====&lt;br /&gt;
=====Create a custom asteroid=====&lt;br /&gt;
Create an asteroid based on the standard version.&lt;br /&gt;
=====Add a flasher=====&lt;br /&gt;
Add flashers so we can identify our asteroid clearly.&lt;br /&gt;
=====Station View=====&lt;br /&gt;
Park by the station beacon.&lt;br /&gt;
=====Witchspace Beacon (cobraball_1_3_1)=====&lt;br /&gt;
Park by the beacon.&lt;br /&gt;
=====Surface of the Sun (cobraball_1_3_2)=====&lt;br /&gt;
Park near the sun closest to the planet.&lt;br /&gt;
=====Route 1(cobraball_1_3_3)=====&lt;br /&gt;
Randomly along route 1.&lt;br /&gt;
=====Route 2(cobraball_1_3_4)=====&lt;br /&gt;
Randomly along route 2.&lt;br /&gt;
=====Space Lanes (cobraball_1_3_5)=====&lt;br /&gt;
Create a space lane with 2 asteroids as buoys marking the space lane&lt;br /&gt;
to witchspace.&lt;br /&gt;
&lt;br /&gt;
=====Rings (cobraball_1_3_6)=====&lt;br /&gt;
Install the rings oxp - provide a rings models only version. And place&lt;br /&gt;
along the space lane. We'll go for every 10% of the station beacon&lt;br /&gt;
route.&lt;br /&gt;
&lt;br /&gt;
===Customising Models===&lt;br /&gt;
&lt;br /&gt;
====A New Paint Job====&lt;br /&gt;
Give the Cobra Mark III a bright pink paint job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''This is a work in progress to be continued&lt;/div&gt;</summary>
		<author><name>The Cobra Ball Run</name></author>
		
	</entry>
	<entry>
		<id>http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7781</id>
		<title>OXP tutorial</title>
		<link rel="alternate" type="text/html" href="http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7781"/>
		<updated>2007-09-27T14:37:33Z</updated>

		<summary type="html">&lt;p&gt;The Cobra Ball Run: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==My First OXP==&lt;br /&gt;
&lt;br /&gt;
An [[OXP]] is an expansion pack to [[Oolite]]. You can customise the whole [[Oolite]] experience. In the same directory as the [[oolite.app]] directory is an AddOns directory. An OXP is a directory under AddOns called oxpname.oxp where oxpname is the name of your expansion pack. I have rashly committed to an ambitious OXP on the oolite BB[http://aegidian.org/bb/index.php] - this tutorial / blog is the story of how I got there.&lt;br /&gt;
&lt;br /&gt;
===1.0 Creating My First Ship===&lt;br /&gt;
&lt;br /&gt;
My first [[OXP]] will be to create a ship. There are 2 approaches to this. The first involves [[OXP_howto_model|3D modelling]]. That is time consuming and too involved for my level of impatience. So we'll use the second method - borrowing someone else's model. &lt;br /&gt;
&lt;br /&gt;
Configuration files and scripts are either [[Property lists|property lists]] (.plist extension) or [[Scripting_Oolite_with_JavaScript|javascript]] (.js extension). Both are text format. Notepad++[http://notepad-plus.sourceforge.net/] is a good editting tool - even if I prefer vi[www.vim.org/download.php]. Though you can use whatever editor you are comfortable with (apart from Windows notepad). &lt;br /&gt;
&lt;br /&gt;
First we need a name for our expansion pack. If you plan on deploying it try to make it unique. Thargons.oxp is a stunningly bad name as it is likely to crash. Thus I will call this expansion pack cobraball_1_0.oxp. Throughout this tutorial I am using a major and minor version number - so you can download and identify all the examples.&lt;br /&gt;
&lt;br /&gt;
Having come up with a catchy (well unique) name, we need a directory. Create a directory called cobraball_1_0.oxp in the [[AddOns]] directory. Create a Config sub directory. Within the Config directory create a text file called shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
This will be our first [[Property list]]. There are 2 different [[Property_list#Formats|formats]], but this a tutorial not a reference manual so we will ignore one of them and use the XML format.&lt;br /&gt;
&lt;br /&gt;
Below is a blank template for a [[Property_list|Property list]]. For our purposes we need to use the header and footer below and don't need to understand them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is a comment and is ignored by Oolite --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is where in the file all of our stuff goes --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- you can ignore the header and footer parts --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enough preamble - on with our first [[OXP]]. We are going to build a ship. It will be like the [[Cobra_Mk.3_(Oolite)|Cobra Mk III]] (the playable version not the pirate / trader)- except we'll change it around a bit - otherwise what is the point? The key (internal name) for the ship will be cobraball_cobra_1_0 - this is never seen by the player. Note the use of the like_ship key. Take the code below and save it in shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the header and the start of the custom code --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;My Custom Cobra Mk III&amp;lt;/string&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the custom code and the start of the footer --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the header and footer can get boring very quickly and add clutter I won't include them from here on. Unless I do. &lt;br /&gt;
&lt;br /&gt;
As might be obvious shipdata.plist is the ships configuration file. The shipdata.plist information in all the installed OXPs is added to the standard definition in the central shipdata.plist to get the master list used in the gameplay. For the impatient the full list of available fields is available [[Shipdata.plist|here]].&lt;br /&gt;
&lt;br /&gt;
The ship now exists, but it would not be particularly easy to find at the moment. Thus we need more code wizardry. Create a new text file demoships.plist in the same Config directory as shipdata.plist. Add the following code to it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;cobraball_cobra_1_0&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now fire up Oolite. And when it asks if you want to load the previous commander - press &amp;quot;N&amp;quot;. Then use the left arrow to toggle through the ships - and delight in your new caption. &lt;br /&gt;
&lt;br /&gt;
===1.1 Creating My First Useful Ship===&lt;br /&gt;
&lt;br /&gt;
Ok, all so far, so impressive, but that was an awful lot of work to look at the standard Cobra. Now what we want to do is fly this baby. &lt;br /&gt;
&lt;br /&gt;
Before we can fly it, we need to buy it. So we need a new configuration file in the [[OXP]]. Create a new text file shipyard.plist.  For the impatient the full list of available fields is available [[Shipyard.pdata|here]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The chance of getting this ship in a ship yard. 1 is certainty. 0 is never. We always want to see out ship, so we can test it--&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is available from the f3 screen --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_PULSE_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MINING_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Bargain for testing purposes --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is standard equipment --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;array&amp;gt;&lt;br /&gt;
				&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Defines the default forward facing weapon --&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;forward_weapon_type&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should all be straight forward but a useful reference for plist files can be found [[OXP_howto|here]]. But enough of that dry academia, let's fly. Start up Oolite. Start a new game. Press F3 twice. Buy your very own ship and take it for a spin. &lt;br /&gt;
&lt;br /&gt;
===1.2 Creating My First Game Killer Ship===&lt;br /&gt;
&lt;br /&gt;
Now this is all well and good, but where is the fun? I know you are going to build a stupidly overspecified mean machine, so we may as well show you how so you can get it out of your system. &lt;br /&gt;
&lt;br /&gt;
'''shipdata.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
&amp;lt;!-- Stupidly high recharge rate - same as for a station --&amp;gt;  &lt;br /&gt;
   &amp;lt;key&amp;gt;energy_recharge_rate&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
&amp;lt;!-- I like yellow lasers --&amp;gt;     &lt;br /&gt;
   &amp;lt;key&amp;gt;laser_color&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;yellowColor&amp;lt;/string&amp;gt;   &lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;!-- Energy bars are energy divided by 64 --&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_energy&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;920&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_cargo&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;integer&amp;gt;250&amp;lt;/integer&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_pitch&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;3.0&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_roll&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;4.2&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_speed&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;1000&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;20&amp;lt;/real&amp;gt;   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;Super Cobra Mk III (1.2)&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;thrust&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shipyard.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_CLOAKING_DEVICE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_JAMMER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_SCANNER_FILTER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;20&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make all the good stuff standard. Including some stuff only available as a mission reward. This is a game play killer so don't. The EQ_ codes are defined in [[Equipment.plist]].&lt;br /&gt;
&lt;br /&gt;
The trouble with super ships like the above is that they wreck the balance of the game - they take away the challenge and make life too easy. Just because we can does not mean we should. Superman would be mighty dull without Kryptonite to add some drama.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BEYOND THIS POINT IS A WORK IN PROGRESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====1.3 Asteroids and positioning====&lt;br /&gt;
=====Create a custom asteroid=====&lt;br /&gt;
Create an asteroid based on the standard version.&lt;br /&gt;
=====Add a flasher=====&lt;br /&gt;
Add flashers so we can identify our asteroid clearly.&lt;br /&gt;
=====Station View=====&lt;br /&gt;
Park by the station beacon.&lt;br /&gt;
=====1.3.1 Witchspace Beacon=====&lt;br /&gt;
Park by the beacon.&lt;br /&gt;
=====1.3.2 Surface of the Sun=====&lt;br /&gt;
Park near the sun closest to the planet.&lt;br /&gt;
=====1.3.3 Route 1=====&lt;br /&gt;
Randomly along route 1.&lt;br /&gt;
=====1.3.4 Route 2=====&lt;br /&gt;
Randomly along route 2.&lt;br /&gt;
=====1.3.5 Space Lanes=====&lt;br /&gt;
Create a space lane with 2 asteroids as buoys marking the space lane&lt;br /&gt;
to witchspace.&lt;br /&gt;
&lt;br /&gt;
=====1.3.6 Rings=====&lt;br /&gt;
Install the rings oxp - provide a rings models only version. And place&lt;br /&gt;
along the space lane. We'll go for every 10% of the station beacon&lt;br /&gt;
route.&lt;br /&gt;
&lt;br /&gt;
===2 Customising Models===&lt;br /&gt;
&lt;br /&gt;
====2.1 A New Paint Job====&lt;br /&gt;
Give the Cobra Mark III a bright pink paint job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''This is a work in progress to be continued&lt;/div&gt;</summary>
		<author><name>The Cobra Ball Run</name></author>
		
	</entry>
	<entry>
		<id>http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7780</id>
		<title>OXP tutorial</title>
		<link rel="alternate" type="text/html" href="http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7780"/>
		<updated>2007-09-26T20:54:14Z</updated>

		<summary type="html">&lt;p&gt;The Cobra Ball Run: Added a to be continued comment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==My First OXP==&lt;br /&gt;
&lt;br /&gt;
An [[OXP]] is an expansion pack to [[Oolite]]. You can customise the whole [[Oolite]] experience. In the same directory as the [[oolite.app]] directory is an AddOns directory. An OXP is a directory under AddOns called oxpname.oxp where oxpname is the name of your expansion pack. I have rashly committed to an ambitious OXP on the oolite BB[http://aegidian.org/bb/index.php] - this tutorial / blog is the story of how I got there.&lt;br /&gt;
&lt;br /&gt;
===1.0 Creating My First Ship===&lt;br /&gt;
&lt;br /&gt;
My first [[OXP]] will be to create a ship. There are 2 approaches to this. The first involves [[OXP_howto_model|3D modelling]]. That is time consuming and too involved for my level of impatience. So we'll use the second method - borrowing someone else's model. &lt;br /&gt;
&lt;br /&gt;
Configuration files and scripts are either [[Property lists|property lists]] (.plist extension) or [[Scripting_Oolite_with_JavaScript|javascript]] (.js extension). Both are text format. Notepad++[http://notepad-plus.sourceforge.net/] is a good editting tool - even if I prefer vi[www.vim.org/download.php]. Though you can use whatever editor you are comfortable with (apart from Windows notepad). &lt;br /&gt;
&lt;br /&gt;
First we need a name for our expansion pack. If you plan on deploying it try to make it unique. Thargons.oxp is a stunningly bad name as it is likely to crash. Thus I will call this expansion pack cobraball_1_0.oxp. Throughout this tutorial I am using a major and minor version number - so you can download and identify all the examples.&lt;br /&gt;
&lt;br /&gt;
Having come up with a catchy (well unique) name, we need a directory. Create a directory called cobraball_1_0.oxp in the [[AddOns]] directory. Create a Config sub directory. Within the Config directory create a text file called shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
This will be our first [[Property list]]. There are 2 different [[Property_list#Formats|formats]], but this a tutorial not a reference manual so we will ignore one of them and use the XML format.&lt;br /&gt;
&lt;br /&gt;
Below is a blank template for a [[Property_list|Property list]]. For our purposes we need to use the header and footer below and don't need to understand them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is a comment and is ignored by Oolite --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is where in the file all of our stuff goes --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- you can ignore the header and footer parts --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enough preamble - on with our first [[OXP]]. We are going to build a ship. It will be like the [[Cobra_Mk.3_(Oolite)|Cobra Mk III]] (the playable version not the pirate / trader)- except we'll change it around a bit - otherwise what is the point? The key (internal name) for the ship will be cobraball_cobra_1_0 - this is never seen by the player. Note the use of the like_ship key. Take the code below and save it in shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the header and the start of the custom code --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;My Custom Cobra Mk III&amp;lt;/string&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the custom code and the start of the footer --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the header and footer can get boring very quickly and add clutter I won't include them from here on. Unless I do. &lt;br /&gt;
&lt;br /&gt;
As might be obvious shipdata.plist is the ships configuration file. The shipdata.plist information in all the installed OXPs is added to the standard definition in the central shipdata.plist to get the master list used in the gameplay. For the impatient the full list of available fields is available [[Shipdata.plist|here]].&lt;br /&gt;
&lt;br /&gt;
The ship now exists, but it would not be particularly easy to find at the moment. Thus we need more code wizardry. Create a new text file demoships.plist in the same Config directory as shipdata.plist. Add the following code to it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;cobraball_cobra_1_0&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now fire up Oolite. And when it asks if you want to load the previous commander - press &amp;quot;N&amp;quot;. Then use the left arrow to toggle through the ships - and delight in your new caption. &lt;br /&gt;
&lt;br /&gt;
===1.1 Creating My First Useful Ship===&lt;br /&gt;
&lt;br /&gt;
Ok, all so far, so impressive, but that was an awful lot of work to look at the standard Cobra. Now what we want to do is fly this baby. &lt;br /&gt;
&lt;br /&gt;
Before we can fly it, we need to buy it. So we need a new configuration file in the [[OXP]]. Create a new text file shipyard.plist.  For the impatient the full list of available fields is available [[Shipyard.pdata|here]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The chance of getting this ship in a ship yard. 1 is certainty. 0 is never. We always want to see out ship, so we can test it--&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is available from the f3 screen --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_PULSE_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MINING_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Bargain for testing purposes --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is standard equipment --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;array&amp;gt;&lt;br /&gt;
				&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Defines the default forward facing weapon --&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;forward_weapon_type&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should all be straight forward but a useful reference for plist files can be found [[OXP_howto|here]]. But enough of that dry academia, let's fly. Start up Oolite. Start a new game. Press F3 twice. Buy your very own ship and take it for a spin. &lt;br /&gt;
&lt;br /&gt;
===1.2 Creating My First Game Killer Ship===&lt;br /&gt;
&lt;br /&gt;
Now this is all well and good, but where is the fun? I know you are going to build a stupidly overspecified mean machine, so we may as well show you how so you can get it out of your system. &lt;br /&gt;
&lt;br /&gt;
'''shipdata.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
&amp;lt;!-- Stupidly high recharge rate - same as for a station --&amp;gt;  &lt;br /&gt;
   &amp;lt;key&amp;gt;energy_recharge_rate&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
&amp;lt;!-- I like yellow lasers --&amp;gt;     &lt;br /&gt;
   &amp;lt;key&amp;gt;laser_color&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;yellowColor&amp;lt;/string&amp;gt;   &lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;!-- Energy bars are energy divided by 64 --&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_energy&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;920&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_cargo&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;integer&amp;gt;250&amp;lt;/integer&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_pitch&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;3.0&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_roll&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;4.2&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_speed&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;1000&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;20&amp;lt;/real&amp;gt;   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;Super Cobra Mk III (1.2)&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;thrust&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shipyard.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_CLOAKING_DEVICE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_JAMMER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_SCANNER_FILTER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;20&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make all the good stuff standard. Including some stuff only available as a mission reward. This is a game play killer so don't. The EQ_ codes are defined in [[Equipment.plist]].&lt;br /&gt;
&lt;br /&gt;
The trouble with super ships like the above is that they wreck the balance of the game - they take away the challenge and make life too easy. Just because we can does not mean we should. Superman would be mighty dull without Kryptonite to add some drama.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===1.3 Can I watch?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By now, hopefully, you are bored of omnisicience. So lets try to make someone to interact with. We start again from scratch. Create a new [[OXP]] by creating cobraball_1_3.oxp in the AddOns directory. Create a Config directory underneath it. We'll have another shipdata.plist now:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_fdl_1_3&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;ai_type&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;buoyAI.plist&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;ferdelance&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;Trader Ferdelance (1.3)&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;roles&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobraball_cobra_1_2_role&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;rotating&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;true/&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;scanClass&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;CLASS_BUOY&amp;lt;/string&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have created a Fer-De-Lance that thinks it's a buoy. Lets have a look for one...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''This is a work in progress to be continued&lt;/div&gt;</summary>
		<author><name>The Cobra Ball Run</name></author>
		
	</entry>
	<entry>
		<id>http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7779</id>
		<title>OXP tutorial</title>
		<link rel="alternate" type="text/html" href="http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7779"/>
		<updated>2007-09-26T16:57:47Z</updated>

		<summary type="html">&lt;p&gt;The Cobra Ball Run: Tidied up the formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==My First OXP==&lt;br /&gt;
&lt;br /&gt;
An [[OXP]] is an expansion pack to [[Oolite]]. You can customise the whole [[Oolite]] experience. In the same directory as the [[oolite.app]] directory is an AddOns directory. An OXP is a directory under AddOns called oxpname.oxp where oxpname is the name of your expansion pack. I have rashly committed to an ambitious OXP on the oolite BB[http://aegidian.org/bb/index.php] - this tutorial / blog is the story of how I got there.&lt;br /&gt;
&lt;br /&gt;
===1.0 Creating My First Ship===&lt;br /&gt;
&lt;br /&gt;
My first [[OXP]] will be to create a ship. There are 2 approaches to this. The first involves [[OXP_howto_model|3D modelling]]. That is time consuming and too involved for my level of impatience. So we'll use the second method - borrowing someone else's model. &lt;br /&gt;
&lt;br /&gt;
Configuration files and scripts are either [[Property lists|property lists]] (.plist extension) or [[Scripting_Oolite_with_JavaScript|javascript]] (.js extension). Both are text format. Notepad++[http://notepad-plus.sourceforge.net/] is a good editting tool - even if I prefer vi[www.vim.org/download.php]. Though you can use whatever editor you are comfortable with (apart from Windows notepad). &lt;br /&gt;
&lt;br /&gt;
First we need a name for our expansion pack. If you plan on deploying it try to make it unique. Thargons.oxp is a stunningly bad name as it is likely to crash. Thus I will call this expansion pack cobraball_1_0.oxp. Throughout this tutorial I am using a major and minor version number - so you can download and identify all the examples.&lt;br /&gt;
&lt;br /&gt;
Having come up with a catchy (well unique) name, we need a directory. Create a directory called cobraball_1_0.oxp in the [[AddOns]] directory. Create a Config sub directory. Within the Config directory create a text file called shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
This will be our first [[Property list]]. There are 2 different [[Property_list#Formats|formats]], but this a tutorial not a reference manual so we will ignore one of them and use the XML format.&lt;br /&gt;
&lt;br /&gt;
Below is a blank template for a [[Property_list|Property list]]. For our purposes we need to use the header and footer below and don't need to understand them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is a comment and is ignored by Oolite --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is where in the file all of our stuff goes --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- you can ignore the header and footer parts --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enough preamble - on with our first [[OXP]]. We are going to build a ship. It will be like the [[Cobra_Mk.3_(Oolite)|Cobra Mk III]] (the playable version not the pirate / trader)- except we'll change it around a bit - otherwise what is the point? The key (internal name) for the ship will be cobraball_cobra_1_0 - this is never seen by the player. Note the use of the like_ship key. Take the code below and save it in shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the header and the start of the custom code --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;My Custom Cobra Mk III&amp;lt;/string&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the custom code and the start of the footer --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the header and footer can get boring very quickly and add clutter I won't include them from here on. Unless I do. &lt;br /&gt;
&lt;br /&gt;
As might be obvious shipdata.plist is the ships configuration file. The shipdata.plist information in all the installed OXPs is added to the standard definition in the central shipdata.plist to get the master list used in the gameplay. For the impatient the full list of available fields is available [[Shipdata.plist|here]].&lt;br /&gt;
&lt;br /&gt;
The ship now exists, but it would not be particularly easy to find at the moment. Thus we need more code wizardry. Create a new text file demoships.plist in the same Config directory as shipdata.plist. Add the following code to it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;cobraball_cobra_1_0&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now fire up Oolite. And when it asks if you want to load the previous commander - press &amp;quot;N&amp;quot;. Then use the left arrow to toggle through the ships - and delight in your new caption. &lt;br /&gt;
&lt;br /&gt;
===1.1 Creating My First Useful Ship===&lt;br /&gt;
&lt;br /&gt;
Ok, all so far, so impressive, but that was an awful lot of work to look at the standard Cobra. Now what we want to do is fly this baby. &lt;br /&gt;
&lt;br /&gt;
Before we can fly it, we need to buy it. So we need a new configuration file in the [[OXP]]. Create a new text file shipyard.plist.  For the impatient the full list of available fields is available [[Shipyard.pdata|here]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The chance of getting this ship in a ship yard. 1 is certainty. 0 is never. We always want to see out ship, so we can test it--&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is available from the f3 screen --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_PULSE_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MINING_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Bargain for testing purposes --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is standard equipment --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;array&amp;gt;&lt;br /&gt;
				&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Defines the default forward facing weapon --&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;forward_weapon_type&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should all be straight forward but a useful reference for plist files can be found [[OXP_howto|here]]. But enough of that dry academia, let's fly. Start up Oolite. Start a new game. Press F3 twice. Buy your very own ship and take it for a spin. &lt;br /&gt;
&lt;br /&gt;
===1.2 Creating My First Game Killer Ship===&lt;br /&gt;
&lt;br /&gt;
Now this is all well and good, but where is the fun? I know you are going to build a stupidly overspecified mean machine, so we may as well show you how so you can get it out of your system. &lt;br /&gt;
&lt;br /&gt;
'''shipdata.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
&amp;lt;!-- Stupidly high recharge rate - same as for a station --&amp;gt;  &lt;br /&gt;
   &amp;lt;key&amp;gt;energy_recharge_rate&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
&amp;lt;!-- I like yellow lasers --&amp;gt;     &lt;br /&gt;
   &amp;lt;key&amp;gt;laser_color&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;yellowColor&amp;lt;/string&amp;gt;   &lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;!-- Energy bars are energy divided by 64 --&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_energy&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;920&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_cargo&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;integer&amp;gt;250&amp;lt;/integer&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_pitch&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;3.0&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_roll&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;4.2&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_speed&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;1000&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;20&amp;lt;/real&amp;gt;   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;Super Cobra Mk III (1.2)&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;thrust&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''shipyard.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_CLOAKING_DEVICE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_JAMMER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_SCANNER_FILTER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;20&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make all the good stuff standard. Including some stuff only available as a mission reward. This is a game play killer so don't. The EQ_ codes are defined in [[Equipment.plist]].&lt;br /&gt;
&lt;br /&gt;
The trouble with super ships like the above is that they wreck the balance of the game - they take away the challenge and make life too easy. Just because we can does not mean we should. Superman would be mighty dull without Kryptonite to add some drama.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===1.3 Can I watch?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By now, hopefully, you are bored of omnisicience. So lets try to make someone to interact with. We start again from scratch. Create a new [[OXP]] by creating cobraball_1_3.oxp in the AddOns directory. Create a Config directory underneath it. We'll have another shipdata.plist now:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_fdl_1_3&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;ai_type&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;buoyAI.plist&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;ferdelance&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;Trader Ferdelance (1.3)&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;roles&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobraball_cobra_1_2_role&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;rotating&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;true/&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;scanClass&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;CLASS_BUOY&amp;lt;/string&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have created a Fer-De-Lance that thinks it's a buoy. Lets have a look for one...&lt;/div&gt;</summary>
		<author><name>The Cobra Ball Run</name></author>
		
	</entry>
	<entry>
		<id>http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7778</id>
		<title>OXP tutorial</title>
		<link rel="alternate" type="text/html" href="http://backup.witchspacewiki.org/index.php?title=OXP_tutorial&amp;diff=7778"/>
		<updated>2007-09-26T16:51:51Z</updated>

		<summary type="html">&lt;p&gt;The Cobra Ball Run: New page: ==My First OXP==  An OXP is an expansion pack to Oolite. You can customise the whole Oolite experience. In the same directory as the oolite.app directory is an AddOns direc...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==My First OXP==&lt;br /&gt;
&lt;br /&gt;
An [[OXP]] is an expansion pack to [[Oolite]]. You can customise the whole [[Oolite]] experience. In the same directory as the [[oolite.app]] directory is an AddOns directory. An OXP is a directory under AddOns called oxpname.oxp where oxpname is the name of your expansion pack. I have rashly committed to an ambitious OXP on the oolite BB[http://aegidian.org/bb/index.php] - this tutorial / blog is the story of how I got there.&lt;br /&gt;
&lt;br /&gt;
===1.0 Creating My First Ship===&lt;br /&gt;
&lt;br /&gt;
My first [[OXP]] will be to create a ship. There are 2 approaches to this. The first involves [[OXP_howto_model|3D modelling]]. That is time consuming and too involved for my level of impatience. So we'll use the second method - borrowing someone else's model. &lt;br /&gt;
&lt;br /&gt;
Configuration files and scripts are either [[Property lists|property lists]] (.plist extension) or [[Scripting_Oolite_with_JavaScript|javascript]] (.js extension). Both are text format. Notepad++[http://notepad-plus.sourceforge.net/] is a good editting tool - even if I prefer vi[www.vim.org/download.php]. Though you can use whatever editor you are comfortable with (apart from Windows notepad). &lt;br /&gt;
&lt;br /&gt;
First we need a name for our expansion pack. If you plan on deploying it try to make it unique. Thargons.oxp is a stunningly bad name as it is likely to crash. Thus I will call this expansion pack cobraball_1_0.oxp. Throughout this tutorial I am using a major and minor version number - so you can download and identify all the examples.&lt;br /&gt;
&lt;br /&gt;
Having come up with a catchy (well unique) name, we need a directory. Create a directory called cobraball_1_0.oxp in the [[AddOns]] directory. Create a Config sub directory. Within the Config directory create a text file called shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
This will be our first [[Property list]]. There are 2 different [[Property_list#Formats|formats]], but this a tutorial not a reference manual so we will ignore one of them and use the XML format.&lt;br /&gt;
&lt;br /&gt;
Below is a blank template for a [[Property_list|Property list]]. For our purposes we need to use the header and footer below and don't need to understand them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is a comment and is ignored by Oolite --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- this is where in the file all of our stuff goes --&amp;gt;&lt;br /&gt;
  &amp;lt;!-- you can ignore the header and footer parts --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enough preamble - on with our first [[OXP]]. We are going to build a ship. It will be like the [[Cobra_Mk.3_(Oolite)|Cobra Mk III]] (the playable version not the pirate / trader)- except we'll change it around a bit - otherwise what is the point? The key (internal name) for the ship will be cobraball_cobra_1_0 - this is never seen by the player. Note the use of the like_ship key. Take the code below and save it in shipdata.plist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the header and the start of the custom code --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;My Custom Cobra Mk III&amp;lt;/string&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- the end of the custom code and the start of the footer --&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the header and footer can get boring very quickly and add clutter I won't include them from here on. Unless I do. &lt;br /&gt;
&lt;br /&gt;
As might be obvious shipdata.plist is the ships configuration file. The shipdata.plist information in all the installed OXPs is added to the standard definition in the central shipdata.plist to get the master list used in the gameplay. For the impatient the full list of available fields is available [[Shipdata.plist|here]].&lt;br /&gt;
&lt;br /&gt;
The ship now exists, but it would not be particularly easy to find at the moment. Thus we need more code wizardry. Create a new text file demoships.plist in the same Config directory as shipdata.plist. Add the following code to it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;array&amp;gt;&lt;br /&gt;
	&amp;lt;string&amp;gt;cobraball_cobra_1_0&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/array&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now fire up Oolite. And when it asks if you want to load the previous commander - press &amp;quot;N&amp;quot;. Then use the left arrow to toggle through the ships - and delight in your new caption. &lt;br /&gt;
&lt;br /&gt;
===1.1 Creating My First Useful Ship===&lt;br /&gt;
&lt;br /&gt;
Ok, all so far, so impressive, but that was an awful lot of work to look at the standard Cobra. Now what we want to do is fly this baby. &lt;br /&gt;
&lt;br /&gt;
Before we can fly it, we need to buy it. So we need a new configuration file in the [[OXP]]. Create a new text file shipyard.plist.  For the impatient the full list of available fields is available [[Shipyard.pdata|here]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_0&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The chance of getting this ship in a ship yard. 1 is certainty. 0 is never. We always want to see out ship, so we can test it--&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is available from the f3 screen --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_PULSE_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MINING_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Bargain for testing purposes --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This section determines what is standard equipment --&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;array&amp;gt;&lt;br /&gt;
				&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;/array&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Defines the default forward facing weapon --&amp;gt;&lt;br /&gt;
			&amp;lt;key&amp;gt;forward_weapon_type&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_BEAM_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
			&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should all be straight forward but a useful reference for plist files can be found [[OXP_howto|here]]. But enough of that dry academia, let's fly. Start up Oolite. Start a new game. Press F3 twice. Buy your very own ship and take it for a spin. &lt;br /&gt;
&lt;br /&gt;
===1.2 Creating My First Game Killer Ship===&lt;br /&gt;
&lt;br /&gt;
Now this is all well and good, but where is the fun? I know you are going to build a stupidly overspecified mean machine, so we may as well show you how so you can get it out of your system. &lt;br /&gt;
&lt;br /&gt;
shipdata.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
&amp;lt;!-- Stupidly high recharge rate - same as for a station --&amp;gt;  &lt;br /&gt;
   &amp;lt;key&amp;gt;energy_recharge_rate&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
&amp;lt;!-- I like yellow lasers --&amp;gt;     &lt;br /&gt;
   &amp;lt;key&amp;gt;laser_color&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;yellowColor&amp;lt;/string&amp;gt;   &lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobra3-player&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;!-- Energy bars are energy divided by 64 --&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_energy&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;920&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_cargo&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;integer&amp;gt;250&amp;lt;/integer&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_pitch&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;3.0&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_roll&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;4.2&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_flight_speed&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;1000&amp;lt;/real&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;max_missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;20&amp;lt;/real&amp;gt;   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;Super Cobra Mk III (1.2)&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;thrust&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;real&amp;gt;100&amp;lt;/real&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
shipyard.plist:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;dict&amp;gt;&lt;br /&gt;
	&amp;lt;key&amp;gt;cobraball_cobra_1_2&amp;lt;/key&amp;gt;&lt;br /&gt;
	&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;chance&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;real&amp;gt;1&amp;lt;/real&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;optional_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_WEAPON_MILITARY_LASER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;price&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;standard_equipment&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;extras&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;array&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ESCAPE_POD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ECM&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_SCOOPS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ENERGY_BOMB&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_ENERGY_UNIT&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_DOCK_COMP&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_FUEL_INJECTION&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_SCANNER_SHOW_MISSILE_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MULTI_TARGET&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_GAL_DRIVE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_ADVANCED_COMPASS&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_NAVAL_SHIELD_BOOSTER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_HEAT_SHIELD&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_CLOAKING_DEVICE&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_JAMMER&amp;lt;/string&amp;gt;&lt;br /&gt;
			&amp;lt;string&amp;gt;EQ_MILITARY_SCANNER_FILTER&amp;lt;/string&amp;gt;&lt;br /&gt;
		&amp;lt;/array&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;missiles&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;20&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;/dict&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;techlevel&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt;
		&amp;lt;key&amp;gt;weapon_facings&amp;lt;/key&amp;gt;&lt;br /&gt;
		&amp;lt;integer&amp;gt;15&amp;lt;/integer&amp;gt;&lt;br /&gt;
	&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make all the good stuff standard. Including some stuff only available as a mission reward. This is a game play killer so don't. The EQ_ codes are defined in [[Equipment.plist]].&lt;br /&gt;
&lt;br /&gt;
The trouble with super ships like the above is that they wreck the balance of the game - they take away the challenge and make life too easy. Just because we can does not mean we should. Superman would be mighty dull without Kryptonite to add some drama.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===1.3 Can I watch?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By now, hopefully, you are bored of omnisicience. So lets try to make someone to interact with. We start again from scratch. Create a new [[OXP]] by creating cobraball_1_3.oxp in the AddOns directory. Create a Config directory underneath it. We'll have another shipdata.plist now:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
  &amp;lt;key&amp;gt;cobraball_fdl_1_3&amp;lt;/key&amp;gt;&lt;br /&gt;
  &amp;lt;dict&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;ai_type&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;buoyAI.plist&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;like_ship&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;ferdelance&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;name&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;Trader Ferdelance (1.3)&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;roles&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;cobraball_cobra_1_2_role&amp;lt;/string&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;rotating&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;true/&amp;gt;&lt;br /&gt;
   &amp;lt;key&amp;gt;scanClass&amp;lt;/key&amp;gt;&lt;br /&gt;
   &amp;lt;string&amp;gt;CLASS_BUOY&amp;lt;/string&amp;gt;&lt;br /&gt;
  &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
&amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We have created a Fer-De-Lance that thinks it's a buoy. Lets have a look for one...&lt;/div&gt;</summary>
		<author><name>The Cobra Ball Run</name></author>
		
	</entry>
	<entry>
		<id>http://backup.witchspacewiki.org/index.php?title=OXP_howto&amp;diff=7777</id>
		<title>OXP howto</title>
		<link rel="alternate" type="text/html" href="http://backup.witchspacewiki.org/index.php?title=OXP_howto&amp;diff=7777"/>
		<updated>2007-09-26T16:46:11Z</updated>

		<summary type="html">&lt;p&gt;The Cobra Ball Run: /* Config */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:oolite-oxp-icon.png|100px|right|OXP icon]]&lt;br /&gt;
An '''Oolite Expansion Pack''' can cause many big changes or additions to Oolite's gameplay, or it may represent just a small, subtle alteration. By appearances, there is no way to tell what is inside, as it's merely a folder with the added extention '''.oxp'''. Inside, it will at least contain a folder named ''Config'', and possibly other folders such as ''AIs'', ''Models'', ''Textures'', ''Sounds'', etc.  It is down to the goal of the OXP, which ways to combine elements to the OXP's contents.&lt;br /&gt;
&lt;br /&gt;
=== AIs ===&lt;br /&gt;
&lt;br /&gt;
The folder named AIs would contain any AI.plist additions the OXP might use. &lt;br /&gt;
&lt;br /&gt;
* [[OXP howto AI|Making Oolite AI]]&lt;br /&gt;
&lt;br /&gt;
=== Config===&lt;br /&gt;
&lt;br /&gt;
This folder contains [[Property lists]] such as:&lt;br /&gt;
&lt;br /&gt;
* ''[[shipdata.plist]]'' that introduces any new entity (ships, stations, objects etc.) to Oolite.&lt;br /&gt;
* ''[[shipyard.plist]]'' that introduces new ships available for player purchase.&lt;br /&gt;
* ''[[script.plist]]'' or ''[[script.oos]]'' that plots conditional ''script actions''. script.oos will be loaded in preference to script.plist if both exist.&lt;br /&gt;
* ''[[planetinfo.plist]]'' that plots system specific changes from the default. may also contain ''script actions''.&lt;br /&gt;
* ''[[commodities.plist]]'' that contains information for each commodity in a market.&lt;br /&gt;
* ''[[misc plists|descriptions.plist]]'' that adds vocabulary to Oolite texts.&lt;br /&gt;
* ''[[hud.plist]]'' that allows for changes or a radically new ''Head-Up Display''.&lt;br /&gt;
* ''[[characters.plist]]'' that adds non-player characters to Oolite.&lt;br /&gt;
* ''[[equipment.plist]]'' lists upgrades available from the Shipyard.&lt;br /&gt;
* ''[[missiontext.plist]]'', ''[[misc plists|demoships.plist]]'', ''[[speech_pronunciation_guide.plist]]'' are some of the other custom methods.&lt;br /&gt;
&lt;br /&gt;
All plist files except for those introducing new AI, belong in Config.&lt;br /&gt;
&lt;br /&gt;
In its simplest form, an OXP could contain only a Config with an altering ''script.plist'' or ''planetinfo.plist''.  An OXP that adds a new ship needs a ''shipdata.plist'' entry, and unless it is based entirely on existing Oolite data, would include a model and texture. &lt;br /&gt;
&lt;br /&gt;
* [[OXP howto plist|Making Oolite plists]]&lt;br /&gt;
&lt;br /&gt;
=== Models===&lt;br /&gt;
&lt;br /&gt;
Oolite models need to be in the '''.dat''' format. There are utilities available that convert models made in Wings 3D (.obj) and Meshwork (.mesh) into this. A .dat file can be opened in a plain text editor to view the object's assigned texture names and see that they correspond with the actual file names in the Textures folder. The .dat file must be named exactly as it is referenced in the shipdata ''model'' entry.&lt;br /&gt;
&lt;br /&gt;
* [[OXP howto model|Making Oolite models]]&lt;br /&gt;
&lt;br /&gt;
=== Textures===&lt;br /&gt;
&lt;br /&gt;
Oolite's textures are in the '''.png''' format, usually at a standard 512x512 size, and must be named exactly as they are named in the .dat file. &lt;br /&gt;
&lt;br /&gt;
* [[OXP howto texture|Making Oolite textures]]&lt;br /&gt;
&lt;br /&gt;
=== A preview of things to come ===&lt;br /&gt;
&lt;br /&gt;
The scripting environment is being reworked to use JavaScript as the core scripting language. See [[Scripting Oolite with JavaScript]] for more information.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
*[http://oolite.aegidian.org/cyoship/ Oolite Tutorial-Meshwork Shipbuilding]&lt;br /&gt;
*[http://oolite.aegidian.org/cyoship2/ Oolite Tutorial-Wings 3D Shipbuilding]&lt;br /&gt;
&lt;br /&gt;
[[Category:Oolite]]&lt;/div&gt;</summary>
		<author><name>The Cobra Ball Run</name></author>
		
	</entry>
</feed>