https://wiki.alioth.net/api.php?action=feedcontributions&user=Hiran&feedformat=atomElite Wiki - User contributions [en]2024-03-29T15:16:30ZUser contributionsMediaWiki 1.31.12https://wiki.alioth.net/index.php?title=Galactic_Navy&diff=83288Galactic Navy2024-03-10T13:47:36Z<p>Hiran: /* Links */</p>
<hr />
<div>'''PLEASE NOTE: This information is NOT CANON for the Elite: Dangerous setting.'''<br><br />
'''ALSO NOTE: This information follows the ''Syncretist'' approach in [[Lore]]'''<br />
<br />
{| width="100%" style="padding: .5em 1em 1em; cellpadding: 0; cellspacing: 0; color: #000000; vertical-align: top; text-align: center;"<br />
|-valign="top"<br />
<br />
|-valign="top"<br />
|[[Image:navystar.png|100px]]<br />
|[[Image:navystar.png|100px]]<br />
|[[Image:navystar.png|100px]]<br />
|}<br />
<br />
The Galactic Navy is the military arm of the '''Galactic Co-operative of Worlds'''. It is primarily focused on the war with the Thargoids.<br />
----<br />
<br><br />
{{Broken-OXP|''Some'' versions of this classic OXP are broken: see [[Galactic Navy OXP]] for more detail}}<br />
<br><br />
----<br />
== Organization ==<br />
Absolute command over the Galactic Navy is the responsibility of the office of the [[GalCop]] president. The president has one Naval attache, called the Navy Commander-in-Chief, who is usually a serving Admiral or Commodore. Perhaps the most well known officer to serve as Commander-in-Chief was [[Admiral Matthews]]. Widely credited as the father of the modern Galactic Navy, Admiral Matthews, through superior leadership and sheer force of will, moved the Navy from a poorly funded, under-manned and under-armed force, to the major military power it is today.<br />
<br />
Other than this, the Galactic Navy has no centralised command structure, as this would not be beneficial in the sort of war being fought. Instead, overall control of the Navy resides with regional commanders, called Sector Commanders (SecComs). Each Galaxy contains 14 sectors with one commander assigned to each sector. These SecComs are typically on the front lines of battle, situated on Mobile Command Ships. These are often either Anacondas or Behemoths, depending on the classification of the combat zone. In times of relative peace the commander may be found at the [[Navy_SecCom_Station|Sector Command Station]] in orbit around the chosen "home planet" for that sector. <br />
<br />
Within each sector, the SecCom usually commands a fleet of vessels, called a [[Navy_Carrier_Group|Carrier Group]], comprised of two types of officer.<br />
<br />
=== Career Navy ===<br />
[[Image:Gcnavy_logo.gif|left]]<br />
[[File:Galactic Navy.png|thumb|right]]<br />
<br />
The career navy are the full-time serving officers and men who comprise the central core of the Navy's fighting forces. They are graduates of one of the Naval Academies, and have dedicated their lives to the war against the Thargoids and to the defence of GalCop against any threat. The greatest of these officers is undoubtedly Sector 7 Commander, '''Admiral Kurtz''' of the Sixth Galaxy. Admiral Kurtz strategic brilliance is legendary. His long list of military victories remains unblemished as he has never been defeated in battle. It is often quoted, "Thargoids have no word for fear in their language... they use Kurtz instead."<br />
<br />
The career navy is equipped with the latest technology and many of the ships and equipment have been designed specifically for Naval use.<br />
<br />
=== Reserve Navy ===<br />
The reserves make up the majority of the Naval force, and are made up from the qualified pilots and combateers from the merchant and independent organisations that make up GalCop. Many are volunteers who have requested military service, although in some battlezones conscription is used to ensure that numbers are met. GalCop includes a contractual obligation for pilots who graduate from the Pilot Academy on Lave to be available for military service if called up. This obligation is rescinded if the pilot volunteers for a year of military service on the front lines.<br />
Pilots interested in volunteering and receiving assignments may do so at any [[Navy_SecCom_Station|Sector Command Station]]. Reservists do not receive a base pay like career navy, but they are allowed to keep whatever bounties they collect during battle and can earn over 90,000 credits in bonuses for sorties flown.<br />
<br />
Naval reserve forces normally use their own ships and equipment, although it is common for navy equipment to be 'loaned' to the officer during their tenure.<br />
<br />
Below are shown the old, full colour version of the reserve logo alongside the newer, bolder 'blue star' design. <br />
:::::[[Image:Gn_reserve19_logo.gif]] [[Image:Gn_reserve19_logo_new.gif]]<br />
<br />
=== Squadrons ===<br />
Most of the naval force is divided into squadrons. There are currently 103 regular navy squadrons and 230+ reserve squadrons, split fairly evenly across the 8 galaxies. The most notable of these are the 114th Squadron and the 16th Reserve Squadron, who are currently top of the table in kills versus losses in battle.<br />
<br />
The reserve squadrons in particular are fiercely proud of their records in battle, and it has been known for many conscripts to remain in service due to the cameraderie and sense of accomplishment they have experienced whilst in the unit.<br />
<br />
== Technology ==<br />
'The Navy has all the good stuff'.<br />
<br />
Rumours abound about all the cool top of the line super weapons the navy has.<br />
If only a fraction of them were true, why then are they still fighting the [[Thargoids]]?<br />
<br />
This is a common question asked about the Navy, and is one that is difficult to find a solid answer to. Rumours of ion cannons, high-yield plasma weapons and even cloaking devices make the rounds on a regular basis. This much is known - the Navy is well enough equipped to hold its own against the superior numbers of the Thargoid race.<br />
<br />
=== Ships ===<br />
The center piece of the Galactic Navy fleet is the [[Behemoth|Behemoth]] class carrier. These massive ships form the heart of any [[Navy_Carrier_Group|Navy Carrier Group]] formation but are formidable enough to enter battle without support. The wing of deadly Navy Vipers and Asps each Behemoth carries in its hangar make these sorts of independent engagements possible. Most Behemoths are deployed on the front lines of battle with the Thargoids in interstellar space. They can occasionally been seen traversing the space lanes, however, on patrol or returning from the front.<br />
<br />
The mainstay of naval fighter wings is the trusty [[Navy_Viper|Navy Viper]]. Vipers are regularly deployed to deal with Thargon remote Craft and can hold their own against most enemies. They are the standard fighter found on board Behemoth class carriers. For more aggressive attack scenarios, the Navy employs the [[Navy_Asp|Navy Asp]] assault fighter. With a crew of two, these ships are fitted with a wealth of weaponry, including missiles, military lasers and Q-mines (although the latter are rarely used except on solo missions). Its increased speed and stronger shields make it a more effective, albeit more expensive, alternative to the Viper.<br />
<br />
In addition to the Behemoths and their fighters, they Navy also employs a wide range of specialized support craft. Principal among these are the deadly [[Navy_Frigate|Navy Frigates]]. Although designed to specifically to support Behemoth carriers, these capable ships can be found performing several roles including planetary patrol and picket duty. Other essential fleet craft include [[Navy_Transport|Navy Transports]], [[Navy_Minesweeper|Minesweepers]], [[Navy_Medical_Ship|Medical Ships]], and [[Navy_Shuttle|Shuttles]]. These ships are rarely seen operating independently of a convoy, carrier group or sector command station.<br />
<br />
== Notable Locations ==<br />
Aside from [[Navy_SecCom_Station|SecCom Stations]], other naval bases of all types exists across all 8 galaxies and serve a variety of functions. The research and development complex on [[Sector1/Ribilebi|Ribilebi]] is the most commonly known of these bases, but many others exist, from training camps to weapons arsenals. <br />
<br />
Unconfirmed rumours place a watchstation in Biorle, where the Galactic Navy keep an eye on the [[Empire|Imperial]] home system of [[Achenar]]. Presumably [[Sector8/Biorle]] rather than [[Sector1/Biorle]]: unless of course Achenar is underneath or on top, rather than just being to the left-hand side!<br />
<br />
The planet [[Sector1/Uscela|Uscela]] is also rumoured to contain a research base that is devoted to analysis of technologies coming out of the Imperial Shipyards in Facece.<br />
<br />
== Lore ==<br />
The Galactic Navy was first mentioned in [[Imprint]] where it was tasked with fighting off the Interstellar Sanction's invasion of Galaxy 3 (20 years before Oolite begins).<br />
<br />
== Her Imperial Majesty's Space Navy ==<br />
For a discussion of the relationship between the Galactic Navy and HIMSN, see [[Her Imperial Majesty's Space Navy]] and the BB threads linked there.<br />
<br />
== Amnesty Offers ==<br />
Amnesty offers you see ingame probably come from [[Anarchies OXP]] - see #6 under Notable Features.<br />
<br />
== In-game Galactic Navy ==<br />
The presence of the GN is also provided in-game by [[Behemoth]] & [[Anarchies]].<br />
<br />
== Links ==<br />
<br />
*[[Galactic Navy OXP]] - 2021 download link [https://www.dropbox.com/s/70vgmt7vp5x9j3k/Galactic_Navy%205.4.3.oxp.zip?dl=1 here]<br />
*[https://bb.oolite.space/viewtopic.php?f=4&t=19389 Galactic Navy Extend] portal to 3 OXPs by [[User:Montana05|Montana05]] updating the Galactic Navy (2018-20). This is a pure test version and in need of a complete rewrite. I would NOT suggest installing it.<br />
<br />
*[[Behemoth]] (downloadable through in-game [[Expansions Manager]]).<br />
*[[ADCK's Behemoths]] - now part of Behemoth<br />
*[[Galactic Navy Additions]]<br />
*[[Galactic Navy Spec Ops Walkthrough]]<br />
<br />
*[[Vampire - Diamondback]] - for details on the activities of the 138th Special Operations Aviation Regiment (Planetary & Interstellar), "Damage Inc.", based on the Tactical Assault Carrier, USS Orion. The 138th are the Navy's secretive special forces.<br />
<br />
*[[Academies]] - Dr Beeb's naval version of the Lave Academy (2009)<br />
''Note that all this is mostly broken for modern Oolite. '''''Behemoth & Galactic Navy Extend''''' are the only updated versions.''<br />
<br />
*[https://bb.oolite.space/viewtopic.php?p=171236#p171236 BB Thread]: see Smiv's summary for a critique of the Galactic Navy<br />
*[https://bb.oolite.space/viewtopic.php?p=208413#p208413 BB Thread]: see from here to the bottom of the page for another critique!<br />
*[[Lore]] gives a synopsis of the '''Syncretist''' approach which this OXP follows (references to ''Imperial Achenar'' & ''Facece'' above) and the alternative '''Purist''' view.<br />
<br />
*Before the Galactic Navy OXP was written, this page was ''very'' different. To read about the controversy which the OXP created, read [https://bb.oolite.space/viewtopic.php?f=2&t=4058 More Navy arguments] (2007)<br />
<br />
[[Category:Oolite]] [[Category:Fictional organisations]] [[Category:Navies]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Galactic_Navy&diff=83287Galactic Navy2024-03-10T13:31:40Z<p>Hiran: /* Links */</p>
<hr />
<div>'''PLEASE NOTE: This information is NOT CANON for the Elite: Dangerous setting.'''<br><br />
'''ALSO NOTE: This information follows the ''Syncretist'' approach in [[Lore]]'''<br />
<br />
{| width="100%" style="padding: .5em 1em 1em; cellpadding: 0; cellspacing: 0; color: #000000; vertical-align: top; text-align: center;"<br />
|-valign="top"<br />
<br />
|-valign="top"<br />
|[[Image:navystar.png|100px]]<br />
|[[Image:navystar.png|100px]]<br />
|[[Image:navystar.png|100px]]<br />
|}<br />
<br />
The Galactic Navy is the military arm of the '''Galactic Co-operative of Worlds'''. It is primarily focused on the war with the Thargoids.<br />
----<br />
<br><br />
{{Broken-OXP|''Some'' versions of this classic OXP are broken: see [[Galactic Navy OXP]] for more detail}}<br />
<br><br />
----<br />
== Organization ==<br />
Absolute command over the Galactic Navy is the responsibility of the office of the [[GalCop]] president. The president has one Naval attache, called the Navy Commander-in-Chief, who is usually a serving Admiral or Commodore. Perhaps the most well known officer to serve as Commander-in-Chief was [[Admiral Matthews]]. Widely credited as the father of the modern Galactic Navy, Admiral Matthews, through superior leadership and sheer force of will, moved the Navy from a poorly funded, under-manned and under-armed force, to the major military power it is today.<br />
<br />
Other than this, the Galactic Navy has no centralised command structure, as this would not be beneficial in the sort of war being fought. Instead, overall control of the Navy resides with regional commanders, called Sector Commanders (SecComs). Each Galaxy contains 14 sectors with one commander assigned to each sector. These SecComs are typically on the front lines of battle, situated on Mobile Command Ships. These are often either Anacondas or Behemoths, depending on the classification of the combat zone. In times of relative peace the commander may be found at the [[Navy_SecCom_Station|Sector Command Station]] in orbit around the chosen "home planet" for that sector. <br />
<br />
Within each sector, the SecCom usually commands a fleet of vessels, called a [[Navy_Carrier_Group|Carrier Group]], comprised of two types of officer.<br />
<br />
=== Career Navy ===<br />
[[Image:Gcnavy_logo.gif|left]]<br />
[[File:Galactic Navy.png|thumb|right]]<br />
<br />
The career navy are the full-time serving officers and men who comprise the central core of the Navy's fighting forces. They are graduates of one of the Naval Academies, and have dedicated their lives to the war against the Thargoids and to the defence of GalCop against any threat. The greatest of these officers is undoubtedly Sector 7 Commander, '''Admiral Kurtz''' of the Sixth Galaxy. Admiral Kurtz strategic brilliance is legendary. His long list of military victories remains unblemished as he has never been defeated in battle. It is often quoted, "Thargoids have no word for fear in their language... they use Kurtz instead."<br />
<br />
The career navy is equipped with the latest technology and many of the ships and equipment have been designed specifically for Naval use.<br />
<br />
=== Reserve Navy ===<br />
The reserves make up the majority of the Naval force, and are made up from the qualified pilots and combateers from the merchant and independent organisations that make up GalCop. Many are volunteers who have requested military service, although in some battlezones conscription is used to ensure that numbers are met. GalCop includes a contractual obligation for pilots who graduate from the Pilot Academy on Lave to be available for military service if called up. This obligation is rescinded if the pilot volunteers for a year of military service on the front lines.<br />
Pilots interested in volunteering and receiving assignments may do so at any [[Navy_SecCom_Station|Sector Command Station]]. Reservists do not receive a base pay like career navy, but they are allowed to keep whatever bounties they collect during battle and can earn over 90,000 credits in bonuses for sorties flown.<br />
<br />
Naval reserve forces normally use their own ships and equipment, although it is common for navy equipment to be 'loaned' to the officer during their tenure.<br />
<br />
Below are shown the old, full colour version of the reserve logo alongside the newer, bolder 'blue star' design. <br />
:::::[[Image:Gn_reserve19_logo.gif]] [[Image:Gn_reserve19_logo_new.gif]]<br />
<br />
=== Squadrons ===<br />
Most of the naval force is divided into squadrons. There are currently 103 regular navy squadrons and 230+ reserve squadrons, split fairly evenly across the 8 galaxies. The most notable of these are the 114th Squadron and the 16th Reserve Squadron, who are currently top of the table in kills versus losses in battle.<br />
<br />
The reserve squadrons in particular are fiercely proud of their records in battle, and it has been known for many conscripts to remain in service due to the cameraderie and sense of accomplishment they have experienced whilst in the unit.<br />
<br />
== Technology ==<br />
'The Navy has all the good stuff'.<br />
<br />
Rumours abound about all the cool top of the line super weapons the navy has.<br />
If only a fraction of them were true, why then are they still fighting the [[Thargoids]]?<br />
<br />
This is a common question asked about the Navy, and is one that is difficult to find a solid answer to. Rumours of ion cannons, high-yield plasma weapons and even cloaking devices make the rounds on a regular basis. This much is known - the Navy is well enough equipped to hold its own against the superior numbers of the Thargoid race.<br />
<br />
=== Ships ===<br />
The center piece of the Galactic Navy fleet is the [[Behemoth|Behemoth]] class carrier. These massive ships form the heart of any [[Navy_Carrier_Group|Navy Carrier Group]] formation but are formidable enough to enter battle without support. The wing of deadly Navy Vipers and Asps each Behemoth carries in its hangar make these sorts of independent engagements possible. Most Behemoths are deployed on the front lines of battle with the Thargoids in interstellar space. They can occasionally been seen traversing the space lanes, however, on patrol or returning from the front.<br />
<br />
The mainstay of naval fighter wings is the trusty [[Navy_Viper|Navy Viper]]. Vipers are regularly deployed to deal with Thargon remote Craft and can hold their own against most enemies. They are the standard fighter found on board Behemoth class carriers. For more aggressive attack scenarios, the Navy employs the [[Navy_Asp|Navy Asp]] assault fighter. With a crew of two, these ships are fitted with a wealth of weaponry, including missiles, military lasers and Q-mines (although the latter are rarely used except on solo missions). Its increased speed and stronger shields make it a more effective, albeit more expensive, alternative to the Viper.<br />
<br />
In addition to the Behemoths and their fighters, they Navy also employs a wide range of specialized support craft. Principal among these are the deadly [[Navy_Frigate|Navy Frigates]]. Although designed to specifically to support Behemoth carriers, these capable ships can be found performing several roles including planetary patrol and picket duty. Other essential fleet craft include [[Navy_Transport|Navy Transports]], [[Navy_Minesweeper|Minesweepers]], [[Navy_Medical_Ship|Medical Ships]], and [[Navy_Shuttle|Shuttles]]. These ships are rarely seen operating independently of a convoy, carrier group or sector command station.<br />
<br />
== Notable Locations ==<br />
Aside from [[Navy_SecCom_Station|SecCom Stations]], other naval bases of all types exists across all 8 galaxies and serve a variety of functions. The research and development complex on [[Sector1/Ribilebi|Ribilebi]] is the most commonly known of these bases, but many others exist, from training camps to weapons arsenals. <br />
<br />
Unconfirmed rumours place a watchstation in Biorle, where the Galactic Navy keep an eye on the [[Empire|Imperial]] home system of [[Achenar]]. Presumably [[Sector8/Biorle]] rather than [[Sector1/Biorle]]: unless of course Achenar is underneath or on top, rather than just being to the left-hand side!<br />
<br />
The planet [[Sector1/Uscela|Uscela]] is also rumoured to contain a research base that is devoted to analysis of technologies coming out of the Imperial Shipyards in Facece.<br />
<br />
== Lore ==<br />
The Galactic Navy was first mentioned in [[Imprint]] where it was tasked with fighting off the Interstellar Sanction's invasion of Galaxy 3 (20 years before Oolite begins).<br />
<br />
== Her Imperial Majesty's Space Navy ==<br />
For a discussion of the relationship between the Galactic Navy and HIMSN, see [[Her Imperial Majesty's Space Navy]] and the BB threads linked there.<br />
<br />
== Amnesty Offers ==<br />
Amnesty offers you see ingame probably come from [[Anarchies OXP]] - see #6 under Notable Features.<br />
<br />
== In-game Galactic Navy ==<br />
The presence of the GN is also provided in-game by [[Behemoth]] & [[Anarchies]].<br />
<br />
== Links ==<br />
<br />
*[[Galactic Navy OXP]] - 2021 download link [https://www.dropbox.com/s/70vgmt7vp5x9j3k/Galactic_Navy%205.4.3.oxp.zip?dl=0 here]<br />
*[https://bb.oolite.space/viewtopic.php?f=4&t=19389 Galactic Navy Extend] portal to 3 OXPs by [[User:Montana05|Montana05]] updating the Galactic Navy (2018-20). This is a pure test version and in need of a complete rewrite. I would NOT suggest installing it.<br />
<br />
*[[Behemoth]] (downloadable through in-game [[Expansions Manager]]).<br />
*[[ADCK's Behemoths]] - now part of Behemoth<br />
*[[Galactic Navy Additions]]<br />
*[[Galactic Navy Spec Ops Walkthrough]]<br />
<br />
*[[Vampire - Diamondback]] - for details on the activities of the 138th Special Operations Aviation Regiment (Planetary & Interstellar), "Damage Inc.", based on the Tactical Assault Carrier, USS Orion. The 138th are the Navy's secretive special forces.<br />
<br />
*[[Academies]] - Dr Beeb's naval version of the Lave Academy (2009)<br />
''Note that all this is mostly broken for modern Oolite. '''''Behemoth & Galactic Navy Extend''''' are the only updated versions.''<br />
<br />
*[https://bb.oolite.space/viewtopic.php?p=171236#p171236 BB Thread]: see Smiv's summary for a critique of the Galactic Navy<br />
*[https://bb.oolite.space/viewtopic.php?p=208413#p208413 BB Thread]: see from here to the bottom of the page for another critique!<br />
*[[Lore]] gives a synopsis of the '''Syncretist''' approach which this OXP follows (references to ''Imperial Achenar'' & ''Facece'' above) and the alternative '''Purist''' view.<br />
<br />
*Before the Galactic Navy OXP was written, this page was ''very'' different. To read about the controversy which the OXP created, read [https://bb.oolite.space/viewtopic.php?f=2&t=4058 More Navy arguments] (2007)<br />
<br />
[[Category:Oolite]] [[Category:Fictional organisations]] [[Category:Navies]]</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=83233AppleMac2024-03-09T09:56:57Z<p>Hiran: /* Solution 1: Manage expansions manually. It is an effort but is quite possible */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
----<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
----<br />
== Installing expansions on Oolite 1.90 (and previous)==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Manage expansions manually. It is an effort but is quite possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://www.oolite.space/#oxp.<br />
You can sort the list by clicking the column header and download it using the icon on the right.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
{| border="2" style="margin: 1em auto 1em auto;"<br />
|style="background-color: #00aaaa;padding: .6em 3em 1em;"|<br />
<center>'''Note'''</center><br />
The Managed Addons folder may not exist after Oolite installation. It would get created via the expansions manager.<br />
|}<br />
<br />
<br />
In any case, mind the space characters in the directory names. And while we are at it, uninstall expansions by simply removing them from the directory.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]]). The file is in [[Property list]] format, which used to be human-readable but today is binary. <br />
<br />
While Oolite is not running, open a [[Terminal_Utility|terminal window]] (command prompt) and run this command:<br />
defaults write org.aegidian.oolite oxz-index-url http://addons.oolite.space/api/1.0/overview<br />
<br />
On future startups the Oolite builtin expansion manager should find the correct index of expansions.<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MacOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
----<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
----<br />
== Music/Sound ==<br />
As adumbrated above, the sound now eventually cuts out on an AppleMac.<br />
<br />
What is less known is the iTunes integration. This may no longer work with the newer Macs which have "Music" instead.<br />
See [https://bb.oolite.space/viewtopic.php?f=10&t=19896 iTunes and Oolite v.1.87] for more on this (2018)<br />
<br />
----<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do.<br />
<br />
The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for the 613 different flavours of Linux), and so things start to fall apart. And Apple has a history of not bothering to document this sort of thing properly for developers:<br />
As for sample code not being updated, documentation being incomplete/outdated/missing, and provided code requiring a lot of effort to build: welcome to Mac systems & driver development. That's unfortunately how it is. I've been doing OS X kernel/driver work for 7 years, and while some things get easier with experience, downloading code from Apple and building it still feels like playing the lottery. (https://stackoverflow.com/questions/41715074/simple-hid-osx-application 2017)<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional. This worked for Cholmondely but not for Murgh.<br />
<br />
----<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
----<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
----<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*MacOS Version 11+ problem: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [https://bb.oolite.space/viewtopic.php?f=10&t=20939 BB discussion]<br />
*AppleMac problems (Compilation, Game Sounds ''etc''.): [https://bb.oolite.space/viewtopic.php?f=10&t=20789 BB Index of AppleMac Issues] (2023)<br />
<br />
=== Techniques ===<br />
*[[Terminal Utility]] - an AppleMac utility useful for [[The Dark Side|dark-sided]] deeds of derring-do!<br />
<br />
=== Humour ===<br />
*[https://bb.oolite.space/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=Oolite_Main_Page&diff=83232Oolite Main Page2024-03-09T09:52:13Z<p>Hiran: </p>
<hr />
<div>{| cellspacing="3" align="center" style="width:75%" border="1"<br />
|colspan="2" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center>{{Click || image=oolite-logo3.png | link= Oolite | width=128px | height=128px }}[https://www.oolite.space Oolite] is a space sim game, available for Mac OS X, Linux and Windows.<br />
<br />
It was written by [[User:Aegidian|Giles Williams]] as a response to the withdrawal of [[Elite: The New Kind]] from the internet. Although inspired by the work of [[Christian Pinder]], following [[David Braben]] and [[Ian Bell]], the work is an independent interpretation and expansion of the original game.<br />
<br />
Oolite is designed as a small game that is easy for users to pick up and expand upon. Almost every aspect of the game can be modified using simple, free graphics packages and text-editors.<br />
<br />
Oolite is offered for free under the [http://en.wikipedia.org/wiki/GPL GNU General Public License version 2], with the data files (ship models, graphics etc.) dual licensed under both the GPL and the [http://creativecommons.org/licenses/by-nc-sa/2.0/ Creative Commons License].<br />
</center><br />
|- valign="top"<br />
|colspan="2" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="4">'''[[:Category:Oolite|Oolite article index]]'''</font><br />
</center><br />
|- valign="top"<br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[Oolite Instruction Manual|Instruction Manual]]'''</font><br />
<br />
Information on how to play Oolite, including installing the game and the keyboard controls.<br />
<br />
</center><br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[OXP|Expand Oolite via OXPs]]'''</font><br />
<br />
Information on how to find, install, and create Oolite's expansion packs. The [[OXP List]] has them all.<br />
<br />
</center><br />
|- valign="top"<br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[Oolite FAQ|FAQ]]'''</font><br />
<br />
Frequently asked questions about how to get started, gameplay and various subjects.<br />
<br />
</center><br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[https://bb.oolite.space/ Oolite Discussion ]'''</font><br />
<br />
The friendliest Board this side of Riedquat: a place to discuss Oolite, OXPs, game tactics etc.<br />
<br />
</center><br />
|- valign="top"<br />
|colspan="2" width="600" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[Oolite Ships|Ships]]'''</font>, <font size="3">'''[[Oolite Stations|Stations]]'''</font>, <font size="3">'''[[Oolite Equipment|Equipment]]'''</font><br />
<br />
Information regarding the ships, stations and equipment in Oolite, both native and OXP. Explains what they are, what they do and how to use them.<br />
<br />
</center><br />
<br />
|- valign="top"<br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[Developer's Corner]]'''</font><br />
<br />
Documentation how to develop the Oolite project itself.<br />
<br />
</center><br />
<br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[Oolite Missions|Missions]]'''</font><br />
<br />
Information regarding the missions in Oolite, both native and OXP.<br />
<br />
</center><br />
|- valign="top"<br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[Oolite_planet_list|Planet List]]'''</font><br />
<br />
Information regarding all planets that exist in the Oolite Galaxies, together with maps of all the galaxies.<br />
<br />
</center><br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[Powers and Organisations|Powers & Organisations]]'''</font><br />
<br />
Some histories of the various corporations and powers, both legal and illicit, that exist in the Oolite galaxies.<br />
<br />
</center><br />
|- valign="top"<br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[:Category:Oolite_stories|Oolite Fiction]]'''</font><br />
<br />
Links to the various novellas, short stories and episodes written about the 'Ooniverse'...<br />
<br />
</center><br />
|width="300" style="border: 1px solid #cfcfbf; padding: .5em 1em 1em; color: #000000; background-color: #f0f0ff; vertical-align: top;"|<br />
<center><br />
<font size="3">'''[[Language|Languages]]'''</font><br />
<br />
Oolite en Français, Oolite auf Deutsch, Oolite Italiano, Оолит по-русски, Oolite en español<br />
<br />
</center><br />
|}<br />
<br />
<br />
{| border="2" style="margin: 1em auto 1em auto;"<br />
|style="background-color: #ffaaaa;padding: .6em 3em 1em;"|<br />
<center>'''Important Note'''</center><br />
We switched our website: Oolite.org is gone. Try [https://oolite.space https://oolite.space] instead.<br />
To install expansions from the new address, see [https://bb.oolite.space/viewtopic.php?t=21604 here].<br />
|}<br />
<br />
[[Category:Oolite]]</div>Hiranhttps://wiki.alioth.net/index.php?title=File:SEX_Drive.oxz&diff=81256File:SEX Drive.oxz2024-02-26T07:55:55Z<p>Hiran: /* Summary */</p>
<hr />
<div>== Summary ==<br />
SEX Drive OXZ version 1.0.2<br />
<br />
Superseeded by https://wiki.alioth.net/img_auth.php/9/94/Oolite.oxp.Wildeblood.SEX_Drive-1.0.2.oxz</div>Hiranhttps://wiki.alioth.net/index.php?title=SEX_Drive_OXP&diff=81255SEX Drive OXP2024-02-26T07:38:59Z<p>Hiran: </p>
<hr />
<div>Special Equipment (Experimental)<br />
<br />
SEX Drive OXP<br />
<br />
The new, best-in-class, teleporting cheat script. For when you're not in the mood for space combat, and just want to get to the station fast. If you've had bad experiences with teleporting cheat scripts in the past - teleporting you straight into the planet's surface when you don't expect it, ''etc''. - fear not! Eschew inferior alternatives from the past. Get my shiny, new, teleporting cheat script! It has options: it has options for to where to teleport to, it has options for when to teleport to where you're teleporting to. It integrates with [[Explorers' Club OXP|Explorers' Club]], and doesn't allow cheating in systems you're visiting for the first time. It has a risqué name. What's not to like?<br />
<br />
[https://www.aegidian.org/bb/viewtopic.php?f=4&t=21589 Questions, comments, difficulties]<br />
<br />
Current download via the expansions manager or: [https://wiki.alioth.net/index.php/File:Oolite.oxp.Wildeblood.SEX_Drive-1.0.2.oxz Oolite.oxp.Wildeblood.SEX_Drive-1.0.2.oxz]<br />
<br />
<br />
'''Author''': [[User:Wildeblood|Wildeblood]]<br />
<br />
<br />
[[Category:Equipment OXPs]]<br />
[[Category:Equipment]]<br />
[[Category:Cheats]]</div>Hiranhttps://wiki.alioth.net/index.php?title=File:Oolite.oxp.Wildeblood.SEX_Drive-1.0.2.oxz&diff=81254File:Oolite.oxp.Wildeblood.SEX Drive-1.0.2.oxz2024-02-26T07:35:55Z<p>Hiran: </p>
<hr />
<div>== Summary ==</div>Hiranhttps://wiki.alioth.net/index.php?title=File:DisoIsJupiter8k.oxz&diff=81191File:DisoIsJupiter8k.oxz2024-02-18T00:10:04Z<p>Hiran: Hiran uploaded a new version of File:DisoIsJupiter8k.oxz</p>
<hr />
<div></div>Hiranhttps://wiki.alioth.net/index.php?title=Developer%27s_Corner&diff=81080Developer's Corner2024-02-05T21:54:33Z<p>Hiran: /* OS Specific parts */</p>
<hr />
<div>Here you will find information that helps understanding the Oolite source code, build and test the project.<br />
<br />
* [[Contributing to the project]]<br />
* [[Release Process]]<br />
* [[Branding]]<br />
* [https://ooliteproject.github.io/oolite/ Oolite API documentation]<br />
<br />
== OS Specific parts ==<br />
<br />
{| class="wikitable" style="margin:auto"<br />
|+ Operating System dependent stuff<br />
|-<br />
! Procedure !! Apple Mac !! Linux !! Windows<br />
|-<br />
| Setting up a development environment || [[Development on Apple Mac]] || [[Development on Linux]] || [[Development on Windows]]<br />
|-<br />
| Compiling || [[Compiling on Apple Mac]] || [[Compiling on Linux]] || [[Compiling on Windows]]<br />
|-<br />
| Testing || [[Testing on Apple Mac]] || [[Testing on Linux]] || [[Testing on Windows]]<br />
|-<br />
| Packaging into Installer || [[Installer on Apple Mac]] || [[Installer on Linux]] || [[Installer on Windows]]<br />
|-<br />
| Running || [[Running_Oolite-Mac]] || ||<br />
|}<br />
<br />
== Hints ==<br />
<br />
The code is organized across several git repositories. The main one refers to the others as submodules - but always to a concise commit.<br />
If you need to update submodules you also need to tell update the reference in the main repository. Here you can see that handling submodules can lead to strange effects: http://aegidian.org/bb/viewtopic.php?f=3&t=21470<br />
<br />
To learn mode about submodules read the fine manual at https://git-scm.com/book/en/v2/Git-Tools-Submodules</div>Hiranhttps://wiki.alioth.net/index.php?title=Running_Oolite-Mac&diff=81078Running Oolite-Mac2024-02-05T21:53:06Z<p>Hiran: /* Installing OXPs (add ons) */</p>
<hr />
<div>[[File:AppleMac "Load Commander" options.png|thumb|right|500px|AppleMac "Load Commander" options]]<br />
==Overview==<br />
Oolite was originally developed for OS X, and as such, OS X was Oolite's home operating system. The OS X version used to be the reference version for all other ports. It has some specific Mac OS X only support such as speech synthesis, iTunes integration and Growl integration. [[Joysticks and Gamepads|Joysticks & throttles]] can be problematic as many now come with additional programming which confuses the simple HID protocol, rendering them unintelligible - and the drivers needed to decipher these more complex signals have not been translated for the Mac.<br />
<br><br />
<br><br />
*Dec 2020: The newest ARM CPU's and their associated OS are [https://github.com/OoliteProject/oolite/issues/360 not fully compatible] with Oolite any more.<br />
<br />
==Getting and installing the game==<br />
You can get the most recent release of the game from [http://oolite.space/download Oolite.space].<br />
<br />
Installation is the standard method of dragging the Oolite folder to your Applications or Games folder.<br />
<br />
=== Interference from the AppleMac's "Mission Control" ===<br />
The precision-flying ''control'' key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because recent MacOSs combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
Solution:<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
===Installing [[OXP]]s (add ons)===<br />
In the Oolite folder that you dragged from the disk image, you will find an Oolite application and an AddOns folder. Place OXPs in the AddOns folder, and they will be loaded the next time you start the game.<br />
<br />
Note: Unlike the Windows version of Oolite, if you have more than one Apple version (say v.1.91, v.1.90 & v.1.77) - they all share the same AddOns and ManagedAddOns folders.<br />
<br />
To install add ons via the builtin Expansion Manager see also the documentation for [[AppleMac#Installing_expansions_on_Oolite_1.90_.28and_previous.29 | AppleMac]]<br />
<br />
==Building Oolite from source==<br />
<br />
=== Development Environment (Xcode) ===<br />
The supported development environment for Oolite trunk is Xcode&nbsp;4.5 or later under Mac&nbsp;OS&nbsp;X&nbsp;10.7.4 or 10.8. At the time of writing (2012), Xcode 4.2–4.4 are likely to work, while earlier versions such as 3.2.6 running under Mac&nbsp;OS&nbsp;X&nbsp;10.6 or later will only work after some additional changes, and are no longer supported. Xcode&nbsp;4 is available for free from the [http://itunes.apple.com/us/app/xcode/id497799835?mt=12 Mac App Store].<br />
<br />
Earlier versions of Oolite, including the 1.76-maintenance branch, require Xcode&nbsp;3.2.6, even under Mac&nbsp;OS&nbsp;X&nbsp;10.7 or 10.8. For more information, see [http://wiki.alioth.net/index.php?title=Running_Oolite-Mac&oldid=28534#Building_Oolite_from_source this earlier version of this page].<br />
<br />
You will also require the Subversion version control tool; an up-to-date binary is available [http://downloads.open.collab.net/binaries.html here], or in the optional Xcode command line tools package. To download the command line tools package, select Open Developer Tool→More Developer Tools… from the '''Xcode''' menu within Xcode.<br />
<br />
=== Getting the source ===<br />
<br />
The source code and data files are available from [http://developer.berlios.de/projects/oolite-linux/ the oolite-linux BerliOS project]. Don't be confused by the name 'oolite-linux'; at one point there were three separate repositories for Oolite, but the Linux one was where they ended up being merged together. The SVN url for the current development line is:<br />
<br />
svn://svn.berlios.de/oolite-linux/trunk<br />
<br />
Version 1.76 is:<br />
<br />
svn://svn.berlios.de/oolite-linux/tags/1.76<br />
<br />
The 1.76.x maintenance branch is:<br />
<br />
svn://svn.berlios.de/oolite-linux/branches/1.76-maintenance<br />
<br />
Note that the 1.76 versions require Xcode&nbsp;3.2.6 as mentioned above.<br />
<br />
<br />
To download the source with Subversion, the quickest way to do it is to open a Terminal window, and run the following command:<br />
<br />
svn checkout svn://svn.berlios.de/oolite-linux/trunk<br />
<br />
If you have a BerliOS account and are a project member, you can get it with:<br />
<br />
svn checkout svn+ssh://''accountname''@svn.berlios.de/svnroot/repos/oolite-linux/trunk<br />
<br />
Developers should also checkout the relevant maintenance branch:<br />
<br />
svn checkout svn+ssh://''accountname''@svn.berlios.de/svnroot/repos/oolite-linux/branches/1.76-maintenance/<br />
<br />
=== Building Oolite ===<br />
For a trunk build, open Oolite.xcodeproj, select the ''Oolite – Debug'' or ''Oolite – Test Release'' scheme from the Scheme pop-up menu, and hit Build. Dependencies will be downloaded automatically (in the deps folder inside the Oolite repository).<br />
<br />
When you open the project for the first time, Xcode will generate build schemes for all the subprojects used to build Oolite. It is unlikely that you will ever need this, so it’s a good idea to hide them. Select Manage Schemes from the Product menu and uncheck the checkboxes in the Show column, except for the schemes marked Shared.<br />
<br />
==== Building earlier versions ====<br />
For instructions on building earlier versions of Oolite, see [http://wiki.alioth.net/index.php?title=Running_Oolite-Mac&oldid=28534#Building_Oolite_from_source this earlier version of this page].<br />
<br />
==== Build products ====<br />
Building any of the shared build schemes in trunk will result in the following being created in the build results folder: ''AddOns'', ''Debug.oxp'', ''include'' (with subfolders ''js'', ''ogg'', ''png'' and ''vorbis''), ''jskwgen'', ''jsoplengen'', ''libjs_for_oolite.a'', ''libnspr4_for_oolite.a'', ''libogg_for_oolite.a'', ''libpng_for_oolite.a'', ''libvorbis_for_oolite.a'', ''Oolite.app'', ''Oolite.docktileplugin'' and ''Oolite.mdimporter''. ''AddOns'' contains a copy of ''Debug.oxp''. Oolite.app contains a copy of ''Oolite.mdimporter'' and ''Oolite.docktileplugin'', and static libraries (.a files) are linked into the Oolite executable. Everything except ''Oolite.app'' and ''AddOns'' can be considered side effects of the build process.<br />
<br />
== Links ==<br />
*[[AppleMac]] - page for people who are not programmers!<br />
*[[Terminal Utility]] - on using the AppleMac's Terminal utility<br />
<br />
[[Category:Oolite]] [[Category:Factual]] [[Category:Help pages]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Running_Oolite-Mac&diff=81077Running Oolite-Mac2024-02-05T21:52:11Z<p>Hiran: /* Installing OXPs (add ons) */</p>
<hr />
<div>[[File:AppleMac "Load Commander" options.png|thumb|right|500px|AppleMac "Load Commander" options]]<br />
==Overview==<br />
Oolite was originally developed for OS X, and as such, OS X was Oolite's home operating system. The OS X version used to be the reference version for all other ports. It has some specific Mac OS X only support such as speech synthesis, iTunes integration and Growl integration. [[Joysticks and Gamepads|Joysticks & throttles]] can be problematic as many now come with additional programming which confuses the simple HID protocol, rendering them unintelligible - and the drivers needed to decipher these more complex signals have not been translated for the Mac.<br />
<br><br />
<br><br />
*Dec 2020: The newest ARM CPU's and their associated OS are [https://github.com/OoliteProject/oolite/issues/360 not fully compatible] with Oolite any more.<br />
<br />
==Getting and installing the game==<br />
You can get the most recent release of the game from [http://oolite.space/download Oolite.space].<br />
<br />
Installation is the standard method of dragging the Oolite folder to your Applications or Games folder.<br />
<br />
=== Interference from the AppleMac's "Mission Control" ===<br />
The precision-flying ''control'' key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because recent MacOSs combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
Solution:<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
===Installing [[OXP]]s (add ons)===<br />
In the Oolite folder that you dragged from the disk image, you will find an Oolite application and an AddOns folder. Place OXPs in the AddOns folder, and they will be loaded the next time you start the game.<br />
<br />
Note: Unlike the Windows version of Oolite, if you have more than one Apple version (say v.1.91, v.1.90 & v.1.77) - they all share the same AddOns and ManagedAddOns folders.<br />
<br />
To install add ons via the builtin Expansion Manager see also [[AppleMac#Installing_expansions_on_Oolite_1.90_.28and_previous.29]]<br />
<br />
==Building Oolite from source==<br />
<br />
=== Development Environment (Xcode) ===<br />
The supported development environment for Oolite trunk is Xcode&nbsp;4.5 or later under Mac&nbsp;OS&nbsp;X&nbsp;10.7.4 or 10.8. At the time of writing (2012), Xcode 4.2–4.4 are likely to work, while earlier versions such as 3.2.6 running under Mac&nbsp;OS&nbsp;X&nbsp;10.6 or later will only work after some additional changes, and are no longer supported. Xcode&nbsp;4 is available for free from the [http://itunes.apple.com/us/app/xcode/id497799835?mt=12 Mac App Store].<br />
<br />
Earlier versions of Oolite, including the 1.76-maintenance branch, require Xcode&nbsp;3.2.6, even under Mac&nbsp;OS&nbsp;X&nbsp;10.7 or 10.8. For more information, see [http://wiki.alioth.net/index.php?title=Running_Oolite-Mac&oldid=28534#Building_Oolite_from_source this earlier version of this page].<br />
<br />
You will also require the Subversion version control tool; an up-to-date binary is available [http://downloads.open.collab.net/binaries.html here], or in the optional Xcode command line tools package. To download the command line tools package, select Open Developer Tool→More Developer Tools… from the '''Xcode''' menu within Xcode.<br />
<br />
=== Getting the source ===<br />
<br />
The source code and data files are available from [http://developer.berlios.de/projects/oolite-linux/ the oolite-linux BerliOS project]. Don't be confused by the name 'oolite-linux'; at one point there were three separate repositories for Oolite, but the Linux one was where they ended up being merged together. The SVN url for the current development line is:<br />
<br />
svn://svn.berlios.de/oolite-linux/trunk<br />
<br />
Version 1.76 is:<br />
<br />
svn://svn.berlios.de/oolite-linux/tags/1.76<br />
<br />
The 1.76.x maintenance branch is:<br />
<br />
svn://svn.berlios.de/oolite-linux/branches/1.76-maintenance<br />
<br />
Note that the 1.76 versions require Xcode&nbsp;3.2.6 as mentioned above.<br />
<br />
<br />
To download the source with Subversion, the quickest way to do it is to open a Terminal window, and run the following command:<br />
<br />
svn checkout svn://svn.berlios.de/oolite-linux/trunk<br />
<br />
If you have a BerliOS account and are a project member, you can get it with:<br />
<br />
svn checkout svn+ssh://''accountname''@svn.berlios.de/svnroot/repos/oolite-linux/trunk<br />
<br />
Developers should also checkout the relevant maintenance branch:<br />
<br />
svn checkout svn+ssh://''accountname''@svn.berlios.de/svnroot/repos/oolite-linux/branches/1.76-maintenance/<br />
<br />
=== Building Oolite ===<br />
For a trunk build, open Oolite.xcodeproj, select the ''Oolite – Debug'' or ''Oolite – Test Release'' scheme from the Scheme pop-up menu, and hit Build. Dependencies will be downloaded automatically (in the deps folder inside the Oolite repository).<br />
<br />
When you open the project for the first time, Xcode will generate build schemes for all the subprojects used to build Oolite. It is unlikely that you will ever need this, so it’s a good idea to hide them. Select Manage Schemes from the Product menu and uncheck the checkboxes in the Show column, except for the schemes marked Shared.<br />
<br />
==== Building earlier versions ====<br />
For instructions on building earlier versions of Oolite, see [http://wiki.alioth.net/index.php?title=Running_Oolite-Mac&oldid=28534#Building_Oolite_from_source this earlier version of this page].<br />
<br />
==== Build products ====<br />
Building any of the shared build schemes in trunk will result in the following being created in the build results folder: ''AddOns'', ''Debug.oxp'', ''include'' (with subfolders ''js'', ''ogg'', ''png'' and ''vorbis''), ''jskwgen'', ''jsoplengen'', ''libjs_for_oolite.a'', ''libnspr4_for_oolite.a'', ''libogg_for_oolite.a'', ''libpng_for_oolite.a'', ''libvorbis_for_oolite.a'', ''Oolite.app'', ''Oolite.docktileplugin'' and ''Oolite.mdimporter''. ''AddOns'' contains a copy of ''Debug.oxp''. Oolite.app contains a copy of ''Oolite.mdimporter'' and ''Oolite.docktileplugin'', and static libraries (.a files) are linked into the Oolite executable. Everything except ''Oolite.app'' and ''AddOns'' can be considered side effects of the build process.<br />
<br />
== Links ==<br />
*[[AppleMac]] - page for people who are not programmers!<br />
*[[Terminal Utility]] - on using the AppleMac's Terminal utility<br />
<br />
[[Category:Oolite]] [[Category:Factual]] [[Category:Help pages]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Running_Oolite-Mac&diff=81076Running Oolite-Mac2024-02-05T21:51:56Z<p>Hiran: /* Installing OXPs (add ons) */</p>
<hr />
<div>[[File:AppleMac "Load Commander" options.png|thumb|right|500px|AppleMac "Load Commander" options]]<br />
==Overview==<br />
Oolite was originally developed for OS X, and as such, OS X was Oolite's home operating system. The OS X version used to be the reference version for all other ports. It has some specific Mac OS X only support such as speech synthesis, iTunes integration and Growl integration. [[Joysticks and Gamepads|Joysticks & throttles]] can be problematic as many now come with additional programming which confuses the simple HID protocol, rendering them unintelligible - and the drivers needed to decipher these more complex signals have not been translated for the Mac.<br />
<br><br />
<br><br />
*Dec 2020: The newest ARM CPU's and their associated OS are [https://github.com/OoliteProject/oolite/issues/360 not fully compatible] with Oolite any more.<br />
<br />
==Getting and installing the game==<br />
You can get the most recent release of the game from [http://oolite.space/download Oolite.space].<br />
<br />
Installation is the standard method of dragging the Oolite folder to your Applications or Games folder.<br />
<br />
=== Interference from the AppleMac's "Mission Control" ===<br />
The precision-flying ''control'' key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because recent MacOSs combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
Solution:<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
===Installing [[OXP]]s (add ons)===<br />
In the Oolite folder that you dragged from the disk image, you will find an Oolite application and an AddOns folder. Place OXPs in the AddOns folder, and they will be loaded the next time you start the game.<br />
<br />
Note: Unlike the Windows version of Oolite, if you have more than one Apple version (say v.1.91, v.1.90 & v.1.77) - they all share the same AddOns and ManagedAddOns folders.<br />
<br />
To install add ons via the builtin Expansion Manager see also [AppleMac#Installing_expansions_on_Oolite_1.90_.28and_previous.29]<br />
<br />
==Building Oolite from source==<br />
<br />
=== Development Environment (Xcode) ===<br />
The supported development environment for Oolite trunk is Xcode&nbsp;4.5 or later under Mac&nbsp;OS&nbsp;X&nbsp;10.7.4 or 10.8. At the time of writing (2012), Xcode 4.2–4.4 are likely to work, while earlier versions such as 3.2.6 running under Mac&nbsp;OS&nbsp;X&nbsp;10.6 or later will only work after some additional changes, and are no longer supported. Xcode&nbsp;4 is available for free from the [http://itunes.apple.com/us/app/xcode/id497799835?mt=12 Mac App Store].<br />
<br />
Earlier versions of Oolite, including the 1.76-maintenance branch, require Xcode&nbsp;3.2.6, even under Mac&nbsp;OS&nbsp;X&nbsp;10.7 or 10.8. For more information, see [http://wiki.alioth.net/index.php?title=Running_Oolite-Mac&oldid=28534#Building_Oolite_from_source this earlier version of this page].<br />
<br />
You will also require the Subversion version control tool; an up-to-date binary is available [http://downloads.open.collab.net/binaries.html here], or in the optional Xcode command line tools package. To download the command line tools package, select Open Developer Tool→More Developer Tools… from the '''Xcode''' menu within Xcode.<br />
<br />
=== Getting the source ===<br />
<br />
The source code and data files are available from [http://developer.berlios.de/projects/oolite-linux/ the oolite-linux BerliOS project]. Don't be confused by the name 'oolite-linux'; at one point there were three separate repositories for Oolite, but the Linux one was where they ended up being merged together. The SVN url for the current development line is:<br />
<br />
svn://svn.berlios.de/oolite-linux/trunk<br />
<br />
Version 1.76 is:<br />
<br />
svn://svn.berlios.de/oolite-linux/tags/1.76<br />
<br />
The 1.76.x maintenance branch is:<br />
<br />
svn://svn.berlios.de/oolite-linux/branches/1.76-maintenance<br />
<br />
Note that the 1.76 versions require Xcode&nbsp;3.2.6 as mentioned above.<br />
<br />
<br />
To download the source with Subversion, the quickest way to do it is to open a Terminal window, and run the following command:<br />
<br />
svn checkout svn://svn.berlios.de/oolite-linux/trunk<br />
<br />
If you have a BerliOS account and are a project member, you can get it with:<br />
<br />
svn checkout svn+ssh://''accountname''@svn.berlios.de/svnroot/repos/oolite-linux/trunk<br />
<br />
Developers should also checkout the relevant maintenance branch:<br />
<br />
svn checkout svn+ssh://''accountname''@svn.berlios.de/svnroot/repos/oolite-linux/branches/1.76-maintenance/<br />
<br />
=== Building Oolite ===<br />
For a trunk build, open Oolite.xcodeproj, select the ''Oolite – Debug'' or ''Oolite – Test Release'' scheme from the Scheme pop-up menu, and hit Build. Dependencies will be downloaded automatically (in the deps folder inside the Oolite repository).<br />
<br />
When you open the project for the first time, Xcode will generate build schemes for all the subprojects used to build Oolite. It is unlikely that you will ever need this, so it’s a good idea to hide them. Select Manage Schemes from the Product menu and uncheck the checkboxes in the Show column, except for the schemes marked Shared.<br />
<br />
==== Building earlier versions ====<br />
For instructions on building earlier versions of Oolite, see [http://wiki.alioth.net/index.php?title=Running_Oolite-Mac&oldid=28534#Building_Oolite_from_source this earlier version of this page].<br />
<br />
==== Build products ====<br />
Building any of the shared build schemes in trunk will result in the following being created in the build results folder: ''AddOns'', ''Debug.oxp'', ''include'' (with subfolders ''js'', ''ogg'', ''png'' and ''vorbis''), ''jskwgen'', ''jsoplengen'', ''libjs_for_oolite.a'', ''libnspr4_for_oolite.a'', ''libogg_for_oolite.a'', ''libpng_for_oolite.a'', ''libvorbis_for_oolite.a'', ''Oolite.app'', ''Oolite.docktileplugin'' and ''Oolite.mdimporter''. ''AddOns'' contains a copy of ''Debug.oxp''. Oolite.app contains a copy of ''Oolite.mdimporter'' and ''Oolite.docktileplugin'', and static libraries (.a files) are linked into the Oolite executable. Everything except ''Oolite.app'' and ''AddOns'' can be considered side effects of the build process.<br />
<br />
== Links ==<br />
*[[AppleMac]] - page for people who are not programmers!<br />
*[[Terminal Utility]] - on using the AppleMac's Terminal utility<br />
<br />
[[Category:Oolite]] [[Category:Factual]] [[Category:Help pages]]</div>Hiranhttps://wiki.alioth.net/index.php?title=OXP_howto&diff=81001OXP howto2024-02-04T11:53:04Z<p>Hiran: /* Cookbook */</p>
<hr />
<div>:''Shortcut: EW:OXP and EW:HOWDS redirect here''</br><br />
[[Image:oolite-oxp-icon.png|100px|right|OXP icon]]<br />
==Overview==<br />
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 first appearances, there is no way to tell what is inside, as it's merely a folder with the added extension '''.oxp'''.<br />
Oolite Version 1.79 onwards supports also compressed files in ZIP format with extension '''.oxz'''. <br />
<br />
To learn starting with a non-compressed version have a look at [[OXP_tutorial]].<br />
<br />
{{QuoteText|Text=It's worth saying I think that compared with a lot of game addon architectures, the OXP architecture as designed by Giles is already very good at avoiding conflicts compared with a lot of other games<br />
- you can save your game, add, remove and upgrade lots of OXPs, load your game, and have it work<br />
- you can do this repeatedly, while incrementally upgrading the core game, for years<br />
- as a player you basically never have to care about load order; as an OXP developer, rarely<br />
<br />
It's also worth noting that a lot of types of OXP conflicts are inevitable due to resource conflicts - a planet can only have one diffuse map, a ship can only have one AI - or due to conceptual conflicts - OXP A removes all stations from a system; OXP B expects the player to dock there.|Source=([http://aegidian.org/bb/viewtopic.php?p=241733#p241733 Cim (3rd Lead Developer)])}}<br />
<br />
=== Oolite TR version ===<br />
The Oolite Developer Release/Test Release version is specially developed for testing out OXPs. It comes with a [[Debug OXP]]/Debug Console allowing one to spawn ships/station on demand, award oneself a test ship, detect the mass of another ship ''etc''.<br />
<br />
It is downloaded from the main Oolite website - currently http://www.oolite.space/download/<br />
<br />
== OXZ ==<br />
The new OXZ distribution format is strongly recommended. It makes version control and distribution just so much easier.<br />
<br />
To make an OXZ file, use a ZIP program to compress the contents of the OXP folder, so that the [[manifest.plist]] file is in the root of the ZIP file, and the folders (AI, Config, etc) are folders in the ZIP file. Then, rename the ZIP file so that its extension is '''.oxz'''. To inspect an OXZ file, open it with your ZIP program.<br />
<br />
Here is a sample: [[Media:X.0.1.oxz]] - just rename all "X" within to the title of your idea and put your name into the author fields. <br />
<br />
You can use [http://www.ghisler.com/download.htm Total Commander] or [http://en.wikipedia.org/wiki/Krusader Krusader] to edit files within '''.oxz''' directly, without unpacking.<br />
<br />
For more details read [http://aegidian.org/bb/viewtopic.php?f=4&t=16688 The All-in-One Guide to OXZ Packaging and Distribution].<br />
<br />
=== Creating an .oxz on an AppleMac ===<br />
When you compress the files/folders on the AppleMac to create the .oxz ''do not'' select them with your mouse! This way lies misery!<br />
<br />
Rather, ensure the relevant files/folders are inside one overall folder. Then, use '''command-a''' to select all the ''contents'' of this overall folder and then select '''compress''' from the file menu on the finder's menu bar. Finally, rename your newly-created .zip file as an .oxz<br />
<br />
==Structure==<br />
Inside the '''.oxp''' folder, or the '''.oxz''' file, it will at least contain a folder (Config, AIs, Models, Textures, etc...) that holds scripts, plists or other things like textures or models. It is down to the goal of the [[OXP]], which ways to combine elements to the OXP's contents. To get a feeling for it, simply take a look in other oxps. (If they are in .oxz format, any normal unzip program can inspect their contents - many will even let you edit the contents without having to unzip and rezip the file)<br />
<br />
The structure for OXPs:<br />
AddOns (folder)<br />
-.oxp (folder) - Holds requires.plist, manifest.plist and the other folders<br />
--> AIs (folder) - Holds AI plists<br />
--> Config (folder) - Holds all other plists<br />
--> Images (folder) - Holds background images<br />
--> Models (folder) - Holds the .dat files<br />
--> Music (folder) - Surprise - holds music files<br />
--> Scenarios (folder) - Holds new game scenarios (v1.79)<br />
--> Scripts (folder) - Holds scripts (worldScripts and shipScripts)<br />
--> Shaders (folder) - Holds Vertex and Fragment shaders (v1.69)<br />
--> Sounds (folder) - Holds sound files<br />
--> Textures (folder) - Holds models textures<br />
--> [[info.plist]] (file)<br />
--> [[manifest.plist]] (file) <br />
<br />
*If the OXP is in the uncompressed OXP folder format, the .oxp folder must contain a [[requires.plist]] file. If it is in the compressed OXZ single-file format, it must contain a [[manifest.plist]] file.<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=4&t=13134 Nested OXPs in AddOns folder] (2012) - some OXZ's do this (Station spotter oxp inside [[Stations for Extra Planets]]) <br />
<br />
===AIs===<br />
The folder named AIs contains any AI.plist additions the OXP might use. <br />
<br />
* [[OXP howto AI|Making Oolite AI]]<br />
<br />
In Oolite 1.79 AIs may be written in Javascript using .js files in this folder. A helper library is provided to make writing complex JS AIs simpler.<br />
<br />
* [[Oolite PriorityAI Documentation]]<br />
* [[Oolite PriorityAI Tutorial]]<br />
<br />
===Config===<br />
All plist files except for those introducing new AIs, ''[[requires.plist]]'', ''[[manifest.plist]]'' or ''[[info.plist]]'', belong in Config.<br />
<br />
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. <br />
<br />
* [[OXP howto plist|Making Oolite plists]]<br />
* Usually irrelevant: The Config folder isn't cached in the same way as the rest of an oxp because usually its contents merge rather than overwriting (See [http://www.aegidian.org/bb/viewtopic.php?f=3&t=16927 here])<br />
<br><br />
This folder contains [[Property lists]] such as:<br />
<br />
* ''[[characters.plist]]'' that adds non-player characters to Oolite.<br />
* ''[[commodities.plist]]'' that contains information for each commodity in a market in 1.80 or earlier<br />
* ''[[crosshairs.plist]]'' that contains the look for your weapons (v1.73).<br />
* ''[[customsounds.plist]]'' that contains references to ingame used sounds.<br />
* ''[[descriptions.plist]]'' that adds vocabulary to Oolite texts.<br />
* ''[[effectdata.plist]]'' defines custom visual effects (v1.77).<br />
* ''[[equipment.plist]]'' lists upgrades available from the Shipyard.<br />
* ''[[explosions.plist]]'' customises things blowing up (v1.81)<br />
* ''[[global-settings.plist]]'' sets a few miscellaneous universal settings (v1.81)<br />
* ''[[gui-settings.plist]]'' settings for reformatting the GUI screens (v1.81)<br />
* ''[[hud.plist]]'' and ''[[hud.plist|hud-small.plist]]'' that allows for changes or a radically new ''Head-Up Display''.<br />
* ''[[illegal_goods.plist]]'' that contains a list of banned/forbidden items in 1.80 or earlier. GalCop has an eye on that.<br />
* ''[[Oolite_Keyboard_Controls|keyconfig.plist]]'' that allows for changes of the keymapping.<br />
* ''[[missiontext.plist]]'' contains texts for the mission screens.<br />
* ''[[OXPMessages.plist]]'' adds warnings to testversions of an oxp.<br />
* ''[[pirate-victim-roles.plist]]'' that defines which roles should act as traders. (deprecated in v1.79)<br />
* ''[[planetinfo.plist]]'' that plots system specific changes from the default. May also contain ''script actions''.<br />
* ''[[role-categories.plist]]'' for specifying groups of roles with similar properties (v1.79)<br />
* ''[[scenarios.plist]]'' lists the starting scenarios in the Scenarios folder (v1.79).<br />
* ''[[screenbackgrounds.plist]]'' that contains references to background images (v1.74).<br />
* ''[[Scripting Oolite with JavaScript|script.js]]'' is the successor of [[script.plist]] in JavaScript. It will be loaded in preference to script.plist if both exist and offers more flexibility and improved possibilities.<br />
* ''[[shipdata.plist]]'' that introduces any new entity (ships, stations, objects etc.) to Oolite.<br />
* ''[[shipdata-overrides.plist]]'' that selectively can replace shipentries in other shipdata.plists<br />
* ''[[shiplibrary.plist]]'' that gives information for the ship description library viewable from the startup screen (v1.79)<br />
* ''[[shipyard.plist]]'' that introduces new ships available for player purchase.<br />
* ''[[shipyard-overrides.plist]]'' that selectively can replace shipentries in other shipyard.plists<br />
* ''[[speech_pronunciation_guide.plist]]'' is another of the other custom methods.<br />
* ''[[trade-goods.plist]]'' defines trade goods in 1.81 and later<br />
* ''[[world-scripts.plist]]'' that contains a list of scripts (if more than one worldScript should be used).<br />
<br />
Deprecated:<br />
* ''[[demoships.plist]]'' that selects demoships to show on startup (replaced - approximately - by shiplibrary.plist in 1.79 and later)<br />
* ''[[script.plist]]'' to handle conditional ''script actions''. (deprecated)<br />
* ''[[script.oos]]'' was briefly introduced during 1.70 development but is now deprecated in favour of JS.)<br />
<br />
=== Models===<br />
Oolite models need to be in an Oolite specific format using the the '''.dat''' file extension. 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 - case sensitive!!!<br />
<br />
* [[OXP howto model|Making Oolite models]] - tutorials for Wings3D & Blender, notes on sub-entities, links ''etc''.<br />
* [http://aegidian.org/bb/viewtopic.php?f=4&t=12165 Model Converter utilities] (2012-17)<br />
* Video: [http://aegidian.org/bb/viewtopic.php?f=4&t=16123 From scratch to Mamba in under an hour] ([[Dertien]], 2013)<br />
<br />
===Scripts===<br />
Scripts are in text format. In this folder you can put both js scripts as well as legacy scripts. New OXPs should only use Javascript here.<br />
* [[Scripting_Oolite_with_JavaScript|Scripting Oolite with Javascript]]<br />
* [[Oolite_JavaScript_object_model|Scripting reference]]<br />
<br />
===Textures===<br />
<br />
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. <br />
<br />
* [[OXP howto texture|Making Oolite textures]]<br />
<br />
* [[Smivs'_texture_tutorial|Smivs' guide to making Oolite textures]]<br />
<br />
* [[Texturing tips and tricks by Theta Seven]]<br />
<br />
Viewing a specific texture and / or model in Oolite.<br />
"I made one. How do I proof it?"<br />
<br />
* [[Viewing a Texture or Model]]<br />
<br />
==OXP Verifier==<br />
<br />
Oolite has what amounts to a spell checker for shipdata.plist and some other plists, called the OXP verifier. It does not work with OXZ's. The verifier detects unknown keys or wrong use of keys ''etc''. It can currently only be invoked from the command line. <br />
<br />
On Windows or Linux: <br />
Code: <br />
'''oolite.app/oolite --verify-oxp <path to OXP> '''<br />
<br />
On Mac OS X: <br />
Code: <br />
'''Oolite.app/Contents/MacOS/Oolite --verify-oxp <path to OXP>'''<br />
<br />
Most Mac users will not be familiar with using the command line. Look inside your application folder for a '''utilities folder'''. Inside that you will find a program called [https://en.wikipedia.org/wiki/Terminal_(macOS) Terminal]. <br><br />
Run it to open a terminal window. Now drop the oolite application on that window. That will generate the path to oolite on the command line. Delete the trailing space and paste the following text - including the trailing space- behind it: "/Contents/MacOS/Oolite --verify-oxp ". Now drop the oxp you want to verify on the window. That will again create the path to the oxp behind the last entry. <br><br />
When you select the window and hit the <return> key, the verification will start. It should now open the Console program, showing the results. <br><br />
'''Console''' is a log viewer developed by Apple Inc. and included with macOS, also in the utilities folder. It allows users to search through all of the system's logged messages, and can alert the user when certain types of messages are logged. The Console is generally used for troubleshooting when there is a problem with the computer. MacOS itself, as well as any applications that are used, send a constant stream of messages to the system in the form of log files. The console allows you to read the system logs, help find certain ones, monitor them, and filter their contents. See [[Debug OXP]] for more information.<br />
<br />
There is a lengthy file - '''OXP verifier design.txt''' tucked inside your Oolite installation with more information about it<br />
<br />
Note that it is possible to [http://www.aegidian.org/bb/viewtopic.php?f=2&t=21443 obtain graphical output] from Graphviz for OXP Verifier.<br />
<br />
=== Verifier BB threads ===<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=8&t=13400 plist Editor Pro for Windows] (2013 - full of relevant Red Herrings)<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=3&t=16865 lite --verify-oxp fails when path has spaces in it] (2014)<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=4&t=21359 OXP Develoopment and Plist files] (2023 - quick introduction)<br />
<br />
=== Correcting with plutil (Apple Macintosh Terminal utility) ===<br />
Since a very small mistake is enough to stop a .plist from being accepted, it's important to be exact about every letter and sign. The Mac Terminal utility has a very practical tool for catching parser errors. After opening Terminal, simply type plutil, add one space, and drag and drop the plist in question onto the Terminal window. This will cause the 'address' of the plist to be shown. Hit return, and Terminal will reveal whether or not the plist is OK. If it's not, you might be given a clue to what is wrong, and the line number of the error - or just a general note that "Unexpected character { at line 1"!<br />
<br />
==Unique names==<br />
On loading the oxps, Oolite will add all files in the AIs, Models, Sound and Scripts folders in one big folder for its own use. That means that all files need unique names or one file will overwrite another with the same name. Files in Textures are not pre-loaded, but when looking for a specific texture Oolite looks in all Texture folders until it finds a texture file with a matching name. If another oxp contains a texture with identical name, Oolite could use that texture.<br />
<br />
For the Config folder something similar happens. Here the plists all have the same name, but the content of all oxp plists is loaded per type in one big plist. e.g. all individual shipData.plist go in one big shipData.plist file. And within a single plist, all keys must be unique. When two plists use the same key, the later loading key will overwrite the former.<br />
<br />
Generally it is a good habit to precede your chosen filenames and keys with the name of the oxp, or another unique prefix, to make sure the names stay unique and no other oxp will use the same names.<br />
<br />
==Scripting with JavaScript==<br />
Older OXPs (from [[User:Aegidian|Aegidian]]'s day were written in Legacy Script: see [[Methods]]. Modern OXPs are written in JavaScript. Specifically oolite.jsVersion 185, an Oolite specific variant of '''ECMAv5'''. It is the same Spidermonkey version that Firefox 4 shipped with many years ago, but it is a special build for Oolite. This is the version that we have almost always had and it has not changed between versions of the game. [http://aegidian.org/bb/viewtopic.php?p=256623#p256623 It is unlikely to change] in the future.<br />
<br />
JavaScript is the preferred scripting interface for worldScripts and shipScripts. The legacy scripting interface (see [[script.plist]]) still works, but is not supported. See [[Scripting Oolite with JavaScript]] for more information.<br />
<br />
Note that most of the [[Legacy Scripting]] still works perfectly well (XML & OpenStep)!<br />
<br />
==Hidden settings==<br />
There are several [[Hidden_Settings_in_Oolite]] that make life for an oxp creator easier. One of them is the setting '''always-flush-cache'''. It makes every startup a bit slower, but it prevents Oolite working with cached data instead of your newly changed file. For someone that only does occasional oxp changes it will be enough to flush the cache by holding the shift key when starting Oolite but if you are writing oxps, this is the way to prevent frustrations.<br />
<br />
==Cookbook==<br />
* How to add dials to a HUD: http://aegidian.org/bb/viewtopic.php?p=290352#p290352<br />
* How to limit a station's shipyard to only offer a defined set of ships: http://aegidian.org/bb/viewtopic.php?p=293174#p293174<br />
* Ship/Station design with external docking ports: http://aegidian.org/bb/viewtopic.php?f=4&t=21574&p=293777<br />
<br />
== See Also ==<br />
*'''Context''': [http://www.aegidian.org/bb/viewtopic.php?p=275434#p275434 What can OXP's ''not'' change?] (2021)<br />
*It is often helpful to dip one's toes (claws?) in the water by experimenting with tweaking oxp's first: see [[How to tweak OXZ's]]<br />
*[[:Category:Oolite scripting]]<br />
*[[Javascript Operators]]<br />
*[[:Category:Oolite JavaScript Reference]]<br />
*[[:Category:Oolite Development]]<br />
*[[User:Montana05|Montana05]] recommends https://www.w3schools.com/js/js_array_sort.asp for better knowledge of the js on Oolite.<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=12149 OXP Development Best Practices] (2012-7)<br />
*Some older oxp's are written in [[Legacy Scripting]]<br />
*[https://github.com/OoliteProject/oolite/find/master Github] vanilla game code repository - the resources section at the bottom of the page contains possibly useful parts of vanilla game coding, with occasional annotations.<br />
=== Tools ===<br />
*[[List of software]] that is helpful for creating OXPs (eg. editorial packages for javascript or 3D model creators)<br />
*[[List of Planets used in OXPs]] for planets already used by other OXPs. Helps authors avoid overlapping with or breaking other OXPs.<br />
*[[OXP_howto_Game_Balance|OXP howto Game Balance]] to avoid conflicts from accidental gameplay changes.<br />
*[[Long Range Scanner]] is an OXP which allows you to jump around the star system to objects you have placed there - or to jump around within the galaxy. A "cheat" for players, but a useful tool for some OXP designers.<br />
<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=13422 What Tools Are Good For Windows OXP Programming?] (2013)<br />
<br />
==== Tutorials for Tools ====<br />
*[https://web.archive.org/web/20050317033938/http://oolite.aegidian.org/cyoship/ Oolite Tutorial - Meshwork Shipbuilding (OSX only)] via WayBack Machine<br />
*[https://web.archive.org/web/20060621211940/http://oolite.aegidian.org/cyoship2/ Oolite Tutorial - Wings 3D Shipbuilding (Cross-platform)] via WayBack Machine<br />
<br />
=== OXP tutorials ===<br />
Oolite changes affecting different varieties of OXPs happened with v.1.76 (2011), v.1.80 (2014) & v1.82 (2015).<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=4&t=20937 MasterClass: How to OXP (updating SoThisTC)] by [[User:Spara|Spara]] who teaches computing in Helsinki! (2021)<br />
*[https://archive.org/details/GettingStartedWithOoliteOXZDevelopment Getting started with OXZ Development] ''An .odt for Open Office'': By Bugbear (2012). 2 example OXPs: a pirate-ridden solar systems warning tool & Witchspace Blockades [http://www.aegidian.org/bb/viewtopic.php?f=4&t=17731 BB Thread (2015)]<br />
*[[OXP_tutorial|OXP Tutorial]] creating a new spaceship - and then tweaking it in different ways (2007-13)<br />
*[[OXP howto dockable stations|Creating a dockable station]] (2009-10)<br />
*[[User:Shipbuilder|Shipbuilder]] wrote a Shaders tutorial with resource packs (2013)<br />
<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=18837 OXP Performance] BB thread (mostly 2017-8): improving your OXP (speed, ''etc'')<br />
<br />
*[https://aegidian.org/bb/viewtopic.php?f=4&t=18284 The bare minimum for a game-recognizable ship OXP] (thread: 2016)<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=4&t=14135 How to make a simple OXP?] (thread: 2013) 3 OXPs - pop-up message at docking, set only Pythons for sale at Lave shipyard, create a new ship. <br />
<br />
*[[Escape Pod Locator OXP]] has notes on programming on the bottom of the page regarding beacon transmission & location<br />
<br />
=== Helpful OXPs for your OXP===<br />
There are a number of OXPs which have been specifically written to allow your OXP to use them:<br />
*[[Library OXP|Library]]: a collection of useful snippets and helpers. Its main purpose is to simplify or unify some common tasks used by OXPers. <br />
:*It can add dynamic maps, music & animation. <br />
:*It adds a Personal Assistant Device for the player with details of people met, medals awarded, Guild rankings, ''etc''.<br />
:*It allows in-game configuration of an oxp by the player.<br />
:*Add-on modules allows inspection of models and materials for creation of ship & station oxps.<br />
*[[GalCop Missions]] introduces many new pieces of equipment with wide varieties of use (Cargo Stoppers, Ejection Dampers, Range Finders, Solar Radiation Disrupter Missiles, Seismic Resonance Scanners, Patient Transport Modules ''etc''). It can also help with managing missions.<br />
*[[Diplomancy]] can be used to make states of war impact personally on the player<br />
*[[System Data Config]] helps re-organise the F7 screen to squeeze more information onto it<br />
<br />
==== While docked/stations ====<br />
*[[HD Backgrounds]] can provide a High Definition screenshot of a station lobby or other such for interaction with the player<br />
*[[BGS]] can help organise a customised docking or launching sequence (see the [[Riredi OXP]] or the [[Kiota Stations]]).<br />
*[[GNN]] can broadcast your news alerts (see how [[Diplomancy]] uses it for war & peace declarations). GNN also contains '''PhraseGen''' which can be used for randomizing text descriptions.<br />
*[[Station Validator]] will remember that a station has been destroyed and stop Oolite automatically replacing it on the next visit to the system<br />
*[[Station Dock Control]] can help interraction with other ships docked at the station<br />
*[[Bulletin Board System]] can help manage interractions at the station<br />
*[[Email System OXP]] can also help manage interractions at the station<br />
*[[Ship Storage Helper]] allows storage of the player's ship whilst doing other things (such as flying another ship!)<br />
*[[Equipment Storage OXP]] allows storage of equipment/goods whilst doing other things<br />
*[[Ship's Library]] allows reading documents with illustrations while docked (see the included Ship's Manual)<br />
*[[Station Options]] allows complex configurations of equipment, but could potentially also be used for managing dialogue with NPCs<br />
*[[Life in the Frontier]] was being expanded to cover more stations (Dodo/Ico/Rock Hermits and potentially OXP stations), but is currently mothballed. <br />
<br />
==== In-flight ====<br />
*[[MFD - Broadcast Comms]] can be used for in-flight interaction with NPC's<br />
*[[Bigships]] can be used to help with the AI for massive space ships which cannot dock at orbital stations<br />
*[[Montanas Resource Pack 01]] contains a number of resources for use (treasures, containers, escape/survival equipment)<br />
*[[Star System Lane Indicator]] - the older version contains a very graphical dynamic display (does not function properly, but boy! does it look good!)<br />
*[[SOTL Exploration]] contains exploration equipment and a non-automatic hyperspace jump<br />
*[[SOTL Altmap]] contains different politics, markets and NPCs with Torus Drives.<br />
*[[Resistance Commander]] & [[EscortDeck]] contain mechanisms for "managing" allied ships.<br />
<br />
==== Planet Surfaces ====<br />
*[[Planetfall OXP]] allows landing on the planet (used by [[Feudal States]] for access to the Royal Court, and by [[Astronaut]] for space-jumping)<br />
*[[Lave is Earth 8k]] contains night-time city lighting<br />
<br />
=== Packaging and distribution ===<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=16688 The All-in-One Guide to OXZ Packaging and Distribution].<br />
::And see [http://aegidian.org/bb/viewtopic.php?p=279034#p279034 this post] for AppleMac issues with the above.<br />
* Cim created [https://github.com/cim--/oxp-build-scripts some scripts to ease packaging] a project.<br />
*[[OXP Distribution]] The All-in-One Guide to OXP Packaging and Distribution (and [[OXP_standards]] for advice on which ways of doing things are supported and which are not).<br />
* Since the domain change to [https://oolite.space] the distribution of expansions has changed slightly. The new version is still subject to discussions and might change again. Here is a [[Publishing Procedure Comparison]].<br />
*[[Gameplay_and_Balance_Indicator|Gameplay Balance Indicator]] and [[OXP_Levelindicators|Difficulty Indicator]]. Add these to your wiki page to show effects on Game Balance and the Difficulty Level of your OXP/OXZ. The '''first''' indicates the impact on play (equipment making the game easier/more difficult), the '''second''' indicates the suggested [[Elite Rating]] needed to attempt the mission/defeat the ship ''etc''.<br />
<br />
[[Category:Oolite]]<br />
[[Category:Oolite scripting]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Documenting_your_artefacts&diff=81000Documenting your artefacts2024-02-04T11:50:54Z<p>Hiran: </p>
<hr />
<div>Once you created an OXP and want to show it to the world, you probably want to advertize the expansion's features.<br />
But players may also need some knowledge about the ships or equipment that you created. For example, if you create a new equipment type foo others will want to know what it is, what it does and how to use it.<br />
So how to do it?<br />
<br />
* Mandatory: At least create a wiki page with the page title identical to the expansion's name (as mentioned in the manifest, not the filename). <br />
* Optional: If you want to go further, create additional pages for all ships and equipment using their names as page title.<br />
* Automatic installation: Wrap your OXP into an OXZ and publish it on the [https://github.com/OoliteProject/oolite-expansion-catalog expansions catalog]. This will allow the Oolite builtin expansions manager or the [[Oolite Starter]] to offer and install your expansion.<br />
<br />
The [[Oolite Documentation Project]] is trying to cleanup technical debt in this respect.</div>Hiranhttps://wiki.alioth.net/index.php?title=Oolite_Starter&diff=80844Oolite Starter2024-01-23T06:59:53Z<p>Hiran: /* Links */</p>
<hr />
<div>Manage the selection of active OXZs before you restart your [[Jameson]]/saved game<br />
[[File:Oolite-oxp-icon.png|right|300px]]<br />
<br />
<br />
{{OXPNote|The newest version of this is simpler to install and is found here: https://github.com/HiranChaudhuri/OoliteStarter}}<br />
<br />
__FORCETOC__<br />
== Overview ==<br />
[[File:Oolite Start v.0.1.7.png|right]]<br />
Managing the 750+ OXZs and 400+ OXPs can be quite laborious. Especially if you want different selections for your different saved games. Oolite Starter is designed to help.<br />
<br />
[[User:Hiran|Hiran]]'s Oolite Starter in effect manages the Expansions Manager and your start games (Jamesons), easing the selection of different OXZs for different start games.<br />
<br />
The Linux (Debian/Ubuntu) versions work well, but the AppleMac version still has teething problems... (starting saved games from it).<br />
<br />
[[Mr Gimlet]] will talk you through the configuration in his own inimitable fashion.<br />
<br />
=== Development Plans ===<br />
*Oolite Starter is currently being expanded to manage the 400-odd OXPs not in OXZ format<br />
*Sort out AppleMac issues (if possible - our lack of a Mac Developer does not help!)<br />
*Support 'opening' an OXZ into OXP for hacking - if license permits<br />
*Support zipping an OXP into an OXZ and publishing it on the expansions manager manifest<br />
<br />
== Warning ==<br />
The instructions below were written for v.0.1.6. Much of this is now automated, with Mr Gimlet helping. Hiran has just published v.0.1.14<br />
<br />
=== Terminology ===<br />
*The terms ''Expansions'' <-> ''AddOns'' <-> ''OXZs''/''OXPs'' <-> ''Modifications'' are used interchangeably<br />
:OXZs (Oolite Expansion Zip folders) are managed by the in-game Expansions Manager and usually go in your Managed AddOns folder (this new format debuted in 2014)<br />
:OXPs (Oolite Expansion folders) were manually placed in your AddOns folders (they are usually older or experimental)<br />
<br />
*The terms ''Jamesons'' <-> ''Start Games'' <-> ''Saved Games'' are also used interchangeably<br />
<br />
----<br />
[[File:Oolite Starter (0.1.6) Start Game GUI.png|right|500px]]<br />
== Top Navigation ==<br />
Currently the Oolite Starter presents two tabs you can switch by clicking the buttons '''Start Game''' or '''Expansions''' in the top of the GUI.<br />
<br />
Depending on the success of your installation (see below), other mysterious button options may also foist themselves upon you!<br />
<br />
----<br />
<br />
== Start Games ==<br />
This gives you details about your save games/saved games/Jamesons (a novelty for AppleMac users!).<br />
You can move the divider between the table on the left and the details pane on the right. Stretch the window and space allocation to your taste.<br />
<br />
=== Buttons ===<br />
*RELOAD - Oolite Starter presents you the save games stored on your disk. Although the data gets refreshed e.g. after Oolite ends and potentially has added or updated a save game, you can still force a fresh loading here. It is very similar to the Reload button in your favourite web browser.<br />
*NEW - starts Oolite for a new Jameson (allowing use of [[Tutorial]] and selection of easy/normal/strict starts)<br />
*RESUME - resume an existing save game. Requires that you select a save game.<br />
<br />
=== Left Panel ===<br />
List of Jamesons/Saved Games with minor information<br />
<br />
*The table can be sorted by clicking the column header<br />
<br />
*Select the desired start game<br />
<br />
*Note that a cornucopia of details appears in the boxes to the right about that particular saved game<br />
<br />
=== Right Panel ===<br />
<br />
Once you select a save game in the table, some of it's details will be displayed on the right.<br />
Read it, enjoy but otherwise there is not much about it.<br />
<br />
----<br />
[[File:Oolite Starter (0.1.6) Expansions GUI.png|right|500px]]<br />
<br />
== Expansions GUI ==<br />
Here you can control the Ooniverse your games will play in. Add or remove addons as you please. Be aware though that once you resume a savegame you need to have the right OXPs installed (ideally those you had when you played and saved the game).<br />
<br />
A ''lot'' of information is presented on this GUI.<br />
<br />
You can freely move the divider between the table and the details pane to your taste.<br />
<br />
=== Filter box ===<br />
The combo box (drop down) selects the variety of expansions displayed (there are 7 on offer: all / Installed / Updatable / Not Installed / Enabled / Disabled / Not Online in the Expansions Manager)<br />
The RE box ([https://en.wikipedia.org/wiki/Regular_expression Regular Expression]) allows complex searches of the expansions on offer<br />
<br />
=== Buttons ===<br />
:'''Export''' exports the list of your currently enabled expansions into a expansion set (a file ending on .oolite-es). You can store this file for later use, or share it with others.<br />
:'''Activate''' will read one of the expansion sets you may have exported or received from others. It will then deactivate all installed expansions not in the list, and it will activate or install expansions that are in the list but not active. So after this is finished, you will have exactly the configuration specified in the expansion-set.<br />
:'''Validate''' performs unanaesthetised surgery on the list of enabled expansions and giving a report of unmet requirements or conflicts.<br />
<br />
:'''Reload''' - The list of expansions is built based on the online available Expansion Manager's manifest plus a scan of your local hard drive. While this is usually carried out when necessary (e.g. after you return from a flight in Oolite and may have downloaded additional expansions through the in-game expansions manager), the '''Reload''' button allows you to trigger the same scan again. It is similar to the reload button in your web browser.<br />
<br />
<br />
=== List of Expansions ===<br />
The contents of the list is scanned from OXPs available for download by the Expansions Manager plus what is found on your disk.<br />
The columns and additional data are all documented in [[manifest.plist]].<br />
The list can be sorted by clicking column headers, and obviously the filtering you may have chosen applies.<br />
<br />
The expansion '''Status''' column changes in case toggling between these 5 opposites:<br />
:'''O''' - Online available, so we can download if needed ''vs'' '''o''' - not online. It cannot be downloaded<br />
:'''L''' - Local file ("installed") ''vs'' '''l''' - not installed on your local disk <br />
:'''E''' - Enabled - it is in the AddOns or the ManagedAddOns folder ''vs'' '''e''' - it is in the Deactivated folder<br />
:'''R''' - Requires other expansions ''vs'' '''r''' - does not require any<br />
:'''C''' - Conflicts with other expansions ''vs'' '''c''' - doesn't<br />
<br />
Selecting any of the expansions in the list will fill in the details panel to the right.<br />
<br />
=== Right Panel ===<br />
The selected expansion is allowed to present some more data, and buttons on the right allow you to action on it:<br />
:'''Install''' will download a expansion and drop it in the ManagedAddOns folder<br />
:'''Enable''' will move the expansion from the Deactivated folder into the ManagedAddOns folder<br />
:'''Disable''' will move the expansion from AddOns or ManagedAddOns into the Deactivated folder<br />
:'''Remove''' will ''permanently'' extirpate the expansion from your local disk, consigning it to the Outer Darknesses beyond the Eight from which there is no return.<br />
<br />
<br />
----<br />
<br />
== Download ==<br />
*[https://github.com/HiranChaudhuri/OoliteStarter/releases: click on "Assets" for the various download packages]<br />
<br />
This is still being constantly updated (Aug '23) - but [[Mr Gimlet]] will let you know when the next update comes out.<br />
<br />
=== Instructions ===<br />
Download the relevant version for your computer and unzip/expand it where you wish it stored. <br />
<br />
The larger files (40-60Mb) contain the Java language files needed to run the application. If you already have v.17 or better of Java, you can download one of the 9Mb options. To find out, type '''java -version''' in your '''terminal''' utility application which will then respond with the version number if any.<br />
<br />
Note that the '''v0.1.6 .dmg''' does not run on the AppleMac.<br />
<br />
On an AppleMac you may wish to download the appropriate Java language version as well as the generic-zip package. You could try [https://jdk.java.net/ jdk.java.net]<br />
<br />
=== Configure the oolite-starter.example.properties file ===<br />
You will find the '''oolite-starter.example.properties''' file in the newly-expanded folder. Using a simple text editor, enter the absolute locations of<br />
* 1 Your Oolite game application/executable<br />
* 2 The folder/directory where your Saved Games are stored<br />
* 3 Your Managed AddOns folder/directory (oxz's)<br />
* 4 Your AddOns folder/directory (oxp's)<br />
* 5 A new folder/directory for currently unwanted oxz's/oxp's - and ''create'' this new folder/directory at that address!<br />
<br />
These are placed into the 5 lines which have ''not'' been commented out with "#" at the start<br />
<br />
Then rename the file, stripping out the word ''example'', to '''oolite-starter.properties'''<br />
<br />
----<br />
=== Running Oolite Start (AppleMac) ===<br />
<s>With your [[Terminal Utility|'''terminal''']] utility application open in front of you, use the change directory command - <font color="Red"> cd </font> - to navigate your way over into the relevant folder where you have hidden away Oolite Starter. Then type in - <font color="Red"> ./run.sh </font> - and you should see a spectral Oolite logo slowly materialise in the middle of your screen. Bingo! Any mistakes you have made in configuration will be painstakingly pointed out to you, one by one, so that you can fix them one by one and then restart Oolite Starter each time!</s><br />
<br />
Scrap the above. Hiran has made it ''much'' more user-friendly. <br />
<br />
Just get Oolite Starter (OS) going. Click the "Oolite Versions" tab at the top of the page, and then the "scan" button. Sip at a brew of Lapsang Souchong in a bone-china cup as Oolite Starter whizzes through your computer and pulls out copies of Oolite. The slice of lemon is not strictly necessary, but may facilitate matters. Then decide which you want to add to your list for playing... - and don't forget to tell OS where your AddOns/ManagedAddOns folders are - and to use it to create new disabled folders for the AddOns your current game is not using...<br />
<br />
=== Running Oolite Start (Linux) ===<br />
You will need a fattened goat, a sacrificial knive and a druidic headdress. Wave the goat in the air over your Linux computer while wearing the headdress. Intone the titles of 7 different Linux operating systems in a basso profundo and cut the throat of the goat. Make sure it splatters all over the # key on your keyboard.<br />
<br />
Oolite Starter should now spring to life and throw you screaming and kicking into the [[Tutorial]]!<br />
<br />
=== Running Oolite Start (Windows) ===<br />
You will need Euler's Number (to 365 decimal places), a [https://en.wikipedia.org/wiki/Real_tennis Real Tennis] racquet, a chilled glass of gin and tonic with a freshly cut slice of lime, and a working model of a [[Quaternion]]. Take the Quaternion, hit it seven times over the head with the racquet, and whilst sipping the G&T intone Euler's Number, sonorously and with an air of gravitas. If you abstain from alcohol, it is rumoured that a glass of coconut milk can have the same effect. Let us know!<br />
<br />
As you get dizzier and dizzier, Oolite Starter will start up and transport you to Lave!<br />
<br />
== Links ==<br />
* Oolite Starter came up [http://aegidian.org/bb/viewtopic.php?p=289311#p289311 in this forum thread] and it takes over the rest of that thread<br />
* [http://aegidian.org/bb/viewtopic.php?f=2&t=21552&p=293282&hilit=oolitestarter#p293282 Dedicated forum thread]<br />
* Developer: [[User:Hiran|Hiran]]<br />
* [[Nexus]] (Oolite Communicator)<br />
* [[Terminal Utility]]<br />
<br />
[[Category:Oolite]] [[Category:Oolite utilities]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Oolite_Starter&diff=80843Oolite Starter2024-01-23T06:59:32Z<p>Hiran: /* Links */</p>
<hr />
<div>Manage the selection of active OXZs before you restart your [[Jameson]]/saved game<br />
[[File:Oolite-oxp-icon.png|right|300px]]<br />
<br />
<br />
{{OXPNote|The newest version of this is simpler to install and is found here: https://github.com/HiranChaudhuri/OoliteStarter}}<br />
<br />
__FORCETOC__<br />
== Overview ==<br />
[[File:Oolite Start v.0.1.7.png|right]]<br />
Managing the 750+ OXZs and 400+ OXPs can be quite laborious. Especially if you want different selections for your different saved games. Oolite Starter is designed to help.<br />
<br />
[[User:Hiran|Hiran]]'s Oolite Starter in effect manages the Expansions Manager and your start games (Jamesons), easing the selection of different OXZs for different start games.<br />
<br />
The Linux (Debian/Ubuntu) versions work well, but the AppleMac version still has teething problems... (starting saved games from it).<br />
<br />
[[Mr Gimlet]] will talk you through the configuration in his own inimitable fashion.<br />
<br />
=== Development Plans ===<br />
*Oolite Starter is currently being expanded to manage the 400-odd OXPs not in OXZ format<br />
*Sort out AppleMac issues (if possible - our lack of a Mac Developer does not help!)<br />
*Support 'opening' an OXZ into OXP for hacking - if license permits<br />
*Support zipping an OXP into an OXZ and publishing it on the expansions manager manifest<br />
<br />
== Warning ==<br />
The instructions below were written for v.0.1.6. Much of this is now automated, with Mr Gimlet helping. Hiran has just published v.0.1.14<br />
<br />
=== Terminology ===<br />
*The terms ''Expansions'' <-> ''AddOns'' <-> ''OXZs''/''OXPs'' <-> ''Modifications'' are used interchangeably<br />
:OXZs (Oolite Expansion Zip folders) are managed by the in-game Expansions Manager and usually go in your Managed AddOns folder (this new format debuted in 2014)<br />
:OXPs (Oolite Expansion folders) were manually placed in your AddOns folders (they are usually older or experimental)<br />
<br />
*The terms ''Jamesons'' <-> ''Start Games'' <-> ''Saved Games'' are also used interchangeably<br />
<br />
----<br />
[[File:Oolite Starter (0.1.6) Start Game GUI.png|right|500px]]<br />
== Top Navigation ==<br />
Currently the Oolite Starter presents two tabs you can switch by clicking the buttons '''Start Game''' or '''Expansions''' in the top of the GUI.<br />
<br />
Depending on the success of your installation (see below), other mysterious button options may also foist themselves upon you!<br />
<br />
----<br />
<br />
== Start Games ==<br />
This gives you details about your save games/saved games/Jamesons (a novelty for AppleMac users!).<br />
You can move the divider between the table on the left and the details pane on the right. Stretch the window and space allocation to your taste.<br />
<br />
=== Buttons ===<br />
*RELOAD - Oolite Starter presents you the save games stored on your disk. Although the data gets refreshed e.g. after Oolite ends and potentially has added or updated a save game, you can still force a fresh loading here. It is very similar to the Reload button in your favourite web browser.<br />
*NEW - starts Oolite for a new Jameson (allowing use of [[Tutorial]] and selection of easy/normal/strict starts)<br />
*RESUME - resume an existing save game. Requires that you select a save game.<br />
<br />
=== Left Panel ===<br />
List of Jamesons/Saved Games with minor information<br />
<br />
*The table can be sorted by clicking the column header<br />
<br />
*Select the desired start game<br />
<br />
*Note that a cornucopia of details appears in the boxes to the right about that particular saved game<br />
<br />
=== Right Panel ===<br />
<br />
Once you select a save game in the table, some of it's details will be displayed on the right.<br />
Read it, enjoy but otherwise there is not much about it.<br />
<br />
----<br />
[[File:Oolite Starter (0.1.6) Expansions GUI.png|right|500px]]<br />
<br />
== Expansions GUI ==<br />
Here you can control the Ooniverse your games will play in. Add or remove addons as you please. Be aware though that once you resume a savegame you need to have the right OXPs installed (ideally those you had when you played and saved the game).<br />
<br />
A ''lot'' of information is presented on this GUI.<br />
<br />
You can freely move the divider between the table and the details pane to your taste.<br />
<br />
=== Filter box ===<br />
The combo box (drop down) selects the variety of expansions displayed (there are 7 on offer: all / Installed / Updatable / Not Installed / Enabled / Disabled / Not Online in the Expansions Manager)<br />
The RE box ([https://en.wikipedia.org/wiki/Regular_expression Regular Expression]) allows complex searches of the expansions on offer<br />
<br />
=== Buttons ===<br />
:'''Export''' exports the list of your currently enabled expansions into a expansion set (a file ending on .oolite-es). You can store this file for later use, or share it with others.<br />
:'''Activate''' will read one of the expansion sets you may have exported or received from others. It will then deactivate all installed expansions not in the list, and it will activate or install expansions that are in the list but not active. So after this is finished, you will have exactly the configuration specified in the expansion-set.<br />
:'''Validate''' performs unanaesthetised surgery on the list of enabled expansions and giving a report of unmet requirements or conflicts.<br />
<br />
:'''Reload''' - The list of expansions is built based on the online available Expansion Manager's manifest plus a scan of your local hard drive. While this is usually carried out when necessary (e.g. after you return from a flight in Oolite and may have downloaded additional expansions through the in-game expansions manager), the '''Reload''' button allows you to trigger the same scan again. It is similar to the reload button in your web browser.<br />
<br />
<br />
=== List of Expansions ===<br />
The contents of the list is scanned from OXPs available for download by the Expansions Manager plus what is found on your disk.<br />
The columns and additional data are all documented in [[manifest.plist]].<br />
The list can be sorted by clicking column headers, and obviously the filtering you may have chosen applies.<br />
<br />
The expansion '''Status''' column changes in case toggling between these 5 opposites:<br />
:'''O''' - Online available, so we can download if needed ''vs'' '''o''' - not online. It cannot be downloaded<br />
:'''L''' - Local file ("installed") ''vs'' '''l''' - not installed on your local disk <br />
:'''E''' - Enabled - it is in the AddOns or the ManagedAddOns folder ''vs'' '''e''' - it is in the Deactivated folder<br />
:'''R''' - Requires other expansions ''vs'' '''r''' - does not require any<br />
:'''C''' - Conflicts with other expansions ''vs'' '''c''' - doesn't<br />
<br />
Selecting any of the expansions in the list will fill in the details panel to the right.<br />
<br />
=== Right Panel ===<br />
The selected expansion is allowed to present some more data, and buttons on the right allow you to action on it:<br />
:'''Install''' will download a expansion and drop it in the ManagedAddOns folder<br />
:'''Enable''' will move the expansion from the Deactivated folder into the ManagedAddOns folder<br />
:'''Disable''' will move the expansion from AddOns or ManagedAddOns into the Deactivated folder<br />
:'''Remove''' will ''permanently'' extirpate the expansion from your local disk, consigning it to the Outer Darknesses beyond the Eight from which there is no return.<br />
<br />
<br />
----<br />
<br />
== Download ==<br />
*[https://github.com/HiranChaudhuri/OoliteStarter/releases: click on "Assets" for the various download packages]<br />
<br />
This is still being constantly updated (Aug '23) - but [[Mr Gimlet]] will let you know when the next update comes out.<br />
<br />
=== Instructions ===<br />
Download the relevant version for your computer and unzip/expand it where you wish it stored. <br />
<br />
The larger files (40-60Mb) contain the Java language files needed to run the application. If you already have v.17 or better of Java, you can download one of the 9Mb options. To find out, type '''java -version''' in your '''terminal''' utility application which will then respond with the version number if any.<br />
<br />
Note that the '''v0.1.6 .dmg''' does not run on the AppleMac.<br />
<br />
On an AppleMac you may wish to download the appropriate Java language version as well as the generic-zip package. You could try [https://jdk.java.net/ jdk.java.net]<br />
<br />
=== Configure the oolite-starter.example.properties file ===<br />
You will find the '''oolite-starter.example.properties''' file in the newly-expanded folder. Using a simple text editor, enter the absolute locations of<br />
* 1 Your Oolite game application/executable<br />
* 2 The folder/directory where your Saved Games are stored<br />
* 3 Your Managed AddOns folder/directory (oxz's)<br />
* 4 Your AddOns folder/directory (oxp's)<br />
* 5 A new folder/directory for currently unwanted oxz's/oxp's - and ''create'' this new folder/directory at that address!<br />
<br />
These are placed into the 5 lines which have ''not'' been commented out with "#" at the start<br />
<br />
Then rename the file, stripping out the word ''example'', to '''oolite-starter.properties'''<br />
<br />
----<br />
=== Running Oolite Start (AppleMac) ===<br />
<s>With your [[Terminal Utility|'''terminal''']] utility application open in front of you, use the change directory command - <font color="Red"> cd </font> - to navigate your way over into the relevant folder where you have hidden away Oolite Starter. Then type in - <font color="Red"> ./run.sh </font> - and you should see a spectral Oolite logo slowly materialise in the middle of your screen. Bingo! Any mistakes you have made in configuration will be painstakingly pointed out to you, one by one, so that you can fix them one by one and then restart Oolite Starter each time!</s><br />
<br />
Scrap the above. Hiran has made it ''much'' more user-friendly. <br />
<br />
Just get Oolite Starter (OS) going. Click the "Oolite Versions" tab at the top of the page, and then the "scan" button. Sip at a brew of Lapsang Souchong in a bone-china cup as Oolite Starter whizzes through your computer and pulls out copies of Oolite. The slice of lemon is not strictly necessary, but may facilitate matters. Then decide which you want to add to your list for playing... - and don't forget to tell OS where your AddOns/ManagedAddOns folders are - and to use it to create new disabled folders for the AddOns your current game is not using...<br />
<br />
=== Running Oolite Start (Linux) ===<br />
You will need a fattened goat, a sacrificial knive and a druidic headdress. Wave the goat in the air over your Linux computer while wearing the headdress. Intone the titles of 7 different Linux operating systems in a basso profundo and cut the throat of the goat. Make sure it splatters all over the # key on your keyboard.<br />
<br />
Oolite Starter should now spring to life and throw you screaming and kicking into the [[Tutorial]]!<br />
<br />
=== Running Oolite Start (Windows) ===<br />
You will need Euler's Number (to 365 decimal places), a [https://en.wikipedia.org/wiki/Real_tennis Real Tennis] racquet, a chilled glass of gin and tonic with a freshly cut slice of lime, and a working model of a [[Quaternion]]. Take the Quaternion, hit it seven times over the head with the racquet, and whilst sipping the G&T intone Euler's Number, sonorously and with an air of gravitas. If you abstain from alcohol, it is rumoured that a glass of coconut milk can have the same effect. Let us know!<br />
<br />
As you get dizzier and dizzier, Oolite Starter will start up and transport you to Lave!<br />
<br />
== Links ==<br />
* Oolite Starter came up [http://aegidian.org/bb/viewtopic.php?p=289311#p289311 here] and it takes over the rest of that thread<br />
* [http://aegidian.org/bb/viewtopic.php?f=2&t=21552&p=293282&hilit=oolitestarter#p293282 Dedicated forum thread]<br />
* Developer: [[User:Hiran|Hiran]]<br />
* [[Nexus]] (Oolite Communicator)<br />
* [[Terminal Utility]]<br />
<br />
[[Category:Oolite]] [[Category:Oolite utilities]]</div>Hiranhttps://wiki.alioth.net/index.php?title=User_talk:Hiran&diff=80695User talk:Hiran2024-01-11T07:13:28Z<p>Hiran: /* Index of Artefacts */</p>
<hr />
<div>== Index of Artefacts ==<br />
Hiran,<br />
<br />
I worked out how to make the OXPNote on your [[Index of artefacts]] page show up. I also added an Overview to explain things to the uninitiated.<br />
<br />
The template which you added at the top of your page was devised by Christian [[User:Treczoks|Treczoks]] for his monumental index of the galactic systems (He did the first two galaxies, Phkb finished the job some years later). If you are using it too, maybe we should consider modifying it. Any ideas?<br />
<br />
:''Cholmondeley 10:25, 15 May 2023 (BST)''<br />
<br />
<br />
I believe with the index being browsable on Github directly now the need for the same page in the wiki has vanished.<br />
https://ooliteproject.github.io/oolite-expansion-catalog/<br />
<br />
== Your addition to [[OXP howto]] ==<br />
Might it make sense if I eliminated the "cookbook" heading, adding your note instead into a new HUDs subsection under '''Helpful OXPs for your OXP'''?<br />
<br />
It would need to mention that:<br />
1) It is not an OXP & 2) It is a Joystick Precision Indicator (''not a generic dial''). I'll also mention the HUDSelector OXP and its ability to change the scanner settings.<br />
<br />
I do like your "Cookbook" heading but am unsure how it applies here, with the '''Helpful OXPs for your OXP''' section. Or should I just rename that to "Cookbook"?<br />
<br />
:''Cholmondeley 12:35, 13 August 2023 (BST)''<br />
<br />
<br />
I believe as we collect more and more 'recipies' we will need to arrange them into a page of their own - maybe even several pages.<br />
For only a handful I do not see the need to move them away, but you likely have a clearer picture what that page's content should be.<br />
<br />
== Message from User 2357 ==<br />
He's left you a message on the [[Talk:Branding]] wiki page! It now has my lengthy tutorial beneath it.<br />
<br />
:''Cholmondeley 10:26, 8 January 2024 (UTC)''</div>Hiranhttps://wiki.alioth.net/index.php?title=User_talk:Hiran&diff=80694User talk:Hiran2024-01-11T07:12:04Z<p>Hiran: /* Your addition to OXP howto */</p>
<hr />
<div>== Index of Artefacts ==<br />
Hiran,<br />
<br />
I worked out how to make the OXPNote on your [[Index of artefacts]] page show up. I also added an Overview to explain things to the uninitiated.<br />
<br />
The template which you added at the top of your page was devised by Christian [[User:Treczoks|Treczoks]] for his monumental index of the galactic systems (He did the first two galaxies, Phkb finished the job some years later). If you are using it too, maybe we should consider modifying it. Any ideas?<br />
<br />
:''Cholmondeley 10:25, 15 May 2023 (BST)''<br />
<br />
<br />
== Your addition to [[OXP howto]] ==<br />
Might it make sense if I eliminated the "cookbook" heading, adding your note instead into a new HUDs subsection under '''Helpful OXPs for your OXP'''?<br />
<br />
It would need to mention that:<br />
1) It is not an OXP & 2) It is a Joystick Precision Indicator (''not a generic dial''). I'll also mention the HUDSelector OXP and its ability to change the scanner settings.<br />
<br />
I do like your "Cookbook" heading but am unsure how it applies here, with the '''Helpful OXPs for your OXP''' section. Or should I just rename that to "Cookbook"?<br />
<br />
:''Cholmondeley 12:35, 13 August 2023 (BST)''<br />
<br />
<br />
I believe as we collect more and more 'recipies' we will need to arrange them into a page of their own - maybe even several pages.<br />
For only a handful I do not see the need to move them away, but you likely have a clearer picture what that page's content should be.<br />
<br />
== Message from User 2357 ==<br />
He's left you a message on the [[Talk:Branding]] wiki page! It now has my lengthy tutorial beneath it.<br />
<br />
:''Cholmondeley 10:26, 8 January 2024 (UTC)''</div>Hiranhttps://wiki.alioth.net/index.php?title=Branding&diff=80693Branding2024-01-11T07:07:09Z<p>Hiran: </p>
<hr />
<div>[[File:Oolite-logo3.png|right]]<br />
== Introduction ==<br />
This page attempts to preserve the historical heritage of ''Elite''/''Oolite'' branding, specifically in terms of logos, icons.<br />
<br />
Fonts came up from the OpenOffice documentation (Cheat Sheet etc) that is distributed in PDF format. As soon as the PDFs were generated using open source software only it became apparent that the documents were based on fonts only available in Microsoft Windows operating systems. From that moment on alternatives had to be found.<br />
<br />
== ''Elite'' branding history ==<br />
1984... [[Classic_Elite|Elite]]... [[David Braben]], [[Ian Bell]], [[Robert Holdstock]], and... Philip Castle.<br />
<br />
The first three names were responsible for the programming and the documentation ([http://www.elitehomepage.org/playguide.htm ''Elite'' Players' Guide]; [https://archive.org/details/elite_acornsoft_manual/mode/1up?view=theater ''The Space Trader's Flight Training Manual''] and [https://openretro.org/file/ec43acc68931c84951a13b6285ed4ccd64b5b787 ''The Dark Wheel''], Stock Code Numbers for the latter: SBG38/B1 and SBG38/B3, respectively, etc.), but it would probably not have had such a successful market-entrance had it not been for the fourth gentleman's eye-catching skills as an airbrush artist.<br />
<br />
On the [https://www.frontierastro.co.uk/Files/elite_misc.html "FrontierAstro ''Elite'' - Various Items"] page, approximately halfway down, we are briefly introduced to him, but his work is pretty much everywhere on that page.<br />
<br />
On [http://www.iancgbell.clara.net/elite/ Ian Bell's website], in the ''Elite'' Archives, in the file [http://www.elitehomepage.org/archive/a4120001.png a4120001.png], the "DECEMBER 1984" Acorn News report (scan), in the second column, third paragraph, [https://en.wikipedia.org/wiki/Philip_Castle Philip Castle] is authoritatively identified as the originator of ''Elite'' branding.<br />
<br />
== ''Oolite'' branding history ==<br />
7 April 2004, [[User:Aegidian|Aegidian]]'s [[Aegidian_devlog|''Oolite'' (progress)]] [https://oolite.livejournal.com/profile LiveJournal] introduced the [https://wiki.alioth.net/index.php/File:Oolite-logo1.png ''Oolite'' userpic], which can be downloaded from that [https://www.livejournal.com/allpics.bml?user=oolite page] (right-click, "Save Image As...") as a 100 pixels x 100 pixels .png image.<br />
<br />
16:15, 3 January 2006, Rxke apparently uploaded to the ''Elite'' Wiki a 128 x 128 [https://wiki.alioth.net/index.php/File:Oolite-logo2.png ''Oolite'' logo] version of the userpic.<br />
<br />
12:57, 7 May 2011, Ahruman uploaded to the ''Elite'' Wiki the 256 x 256 [https://wiki.alioth.net/index.php/File:Oolite-logo3.png "New (2011) ''Oolite'' icon"] by Eugene Chernyakov (seventh).<br />
<br />
Mon Oct 23, 2023 12:39 am, on the ''Oolite'' Bulletin Boards, in the Discussion forum, the [http://aegidian.org/bb/viewtopic.php?f=2&t=21464 "New splash screen and icon"] thread was posted by phkb, in which was suggested that the ''Oolite'' splash screen and icon had been around for a while now, and it was proposed that they were about due for a refresh. This discussion led to the new, red versions of the [https://wiki.alioth.net/index.php/File:Oolite-logo2.png 128 x 128] and [https://wiki.alioth.net/index.php/File:Oolite-logo3.png 256 x 256] logo-images, both uploaded to the ''Elite'' Wiki under the old filenames six days later by Phkb, and incorporated in the official [https://oolite.space/ oolite.space] website.<br />
<br />
== Caveat ==<br />
<br />
The substitutions of the 2023, red logo-images under old filenames were apparently made in an attempt to reduce effort in replacing old hyperlinks on five other wikipages with new filenames.<br />
<br />
The five wikipages were discovered as follows. On an ordinary ''Elite'' wikipage, in the left-hand margin, under "tools" > "Special pages" > "Media reports and uploads" > "File list", in the "Search for media name" search box, enter "oolite-logo", click the "Include old versions of files" tick-box and the "Go" button; then click the name hyperlink associated with the desired thumbnail; again, in the left-hand margin, under "tools" > "What links here".<br />
<br />
However, these 2023 substitutions have caused ''all'' references in the ''Elite'' Wiki, hyperlinking to those old filenames, to refer to the 2023, red logos, in stead of their original, blue logos -- even on old, "history" pages of ''Elite'' wikipages (e.g.: the very first, 05:22, 14 February 2006 version of the [https://wiki.alioth.net/index.php?title=Oolite_Main_Page&oldid=3181 ''Oolite'' Main Page]).<br />
<br />
Therefore, in an attempt (1) to prevent a similar loss of the commOonity's heritage on ''Elite'' Wiki history pages, and (2) to facilitate easier searching for older logo-versions, it is recommended that future, new-logo designs be named according to, and uploaded under filenames conforming to the established naming-scheme of "''Oolite''-logo#", where # is the next number in the sequence, and that all hyperlinks throughout the ''Elite'' wiki be updated accordingly. It is recommended that only a single, highest-resolution logo-image be uploaded, since the ''Elite'' Wiki has the functionality to scale the logo images: <nowiki>[[File:oolite-logo#.png|196px]]</nowiki>.<br />
<br />
If an older logo might be required for any purpose, the [https://wiki.alioth.net/index.php/Special:ListFiles?limit=1000&ilsearch=Oolite-logo&user=&ilshowall=1 "''Oolite''-logo" File list search-page] is recommended. (Include old versions of files.)<br />
<br />
= Logos and Icons =<br />
<br />
<br />
= Fonts =<br />
<br />
The font used in-game is a custom monospaced font. Oolite does not work with Truetype or Freetype fonts.<br />
<br />
The fonts in the documentation are ...<br />
<br />
The fonts used in the website oolite.space are ...<br />
<br />
The fonts used in the wiki are ...<br />
<br />
The fonts used in the forum are ...<br />
<br />
[[Category:Oolite]][[Category:Factual]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Branding&diff=80692Branding2024-01-11T06:54:28Z<p>Hiran: /* Introduction */</p>
<hr />
<div>[[File:Oolite-logo3.png|right]]<br />
== Introduction ==<br />
This page attempts to preserve the historical heritage of ''Elite''/''Oolite'' branding, specifically in terms of logos, icons and fonts.<br />
<br />
== ''Elite'' branding history ==<br />
1984... [[Classic_Elite|Elite]]... [[David Braben]], [[Ian Bell]], [[Robert Holdstock]], and... Philip Castle.<br />
<br />
The first three names were responsible for the programming and the documentation ([http://www.elitehomepage.org/playguide.htm ''Elite'' Players' Guide]; [https://archive.org/details/elite_acornsoft_manual/mode/1up?view=theater ''The Space Trader's Flight Training Manual''] and [https://openretro.org/file/ec43acc68931c84951a13b6285ed4ccd64b5b787 ''The Dark Wheel''], Stock Code Numbers for the latter: SBG38/B1 and SBG38/B3, respectively, etc.), but it would probably not have had such a successful market-entrance had it not been for the fourth gentleman's eye-catching skills as an airbrush artist.<br />
<br />
On the [https://www.frontierastro.co.uk/Files/elite_misc.html "FrontierAstro ''Elite'' - Various Items"] page, approximately halfway down, we are briefly introduced to him, but his work is pretty much everywhere on that page.<br />
<br />
On [http://www.iancgbell.clara.net/elite/ Ian Bell's website], in the ''Elite'' Archives, in the file [http://www.elitehomepage.org/archive/a4120001.png a4120001.png], the "DECEMBER 1984" Acorn News report (scan), in the second column, third paragraph, [https://en.wikipedia.org/wiki/Philip_Castle Philip Castle] is authoritatively identified as the originator of ''Elite'' branding.<br />
<br />
== ''Oolite'' branding history ==<br />
7 April 2004, [[User:Aegidian|Aegidian]]'s [[Aegidian_devlog|''Oolite'' (progress)]] [https://oolite.livejournal.com/profile LiveJournal] introduced the [https://wiki.alioth.net/index.php/File:Oolite-logo1.png ''Oolite'' userpic], which can be downloaded from that [https://www.livejournal.com/allpics.bml?user=oolite page] (right-click, "Save Image As...") as a 100 pixels x 100 pixels .png image.<br />
<br />
16:15, 3 January 2006, Rxke apparently uploaded to the ''Elite'' Wiki a 128 x 128 [https://wiki.alioth.net/index.php/File:Oolite-logo2.png ''Oolite'' logo] version of the userpic.<br />
<br />
12:57, 7 May 2011, Ahruman uploaded to the ''Elite'' Wiki the 256 x 256 [https://wiki.alioth.net/index.php/File:Oolite-logo3.png "New (2011) ''Oolite'' icon"] by Eugene Chernyakov (seventh).<br />
<br />
Mon Oct 23, 2023 12:39 am, on the ''Oolite'' Bulletin Boards, in the Discussion forum, the [http://aegidian.org/bb/viewtopic.php?f=2&t=21464 "New splash screen and icon"] thread was posted by phkb, in which was suggested that the ''Oolite'' splash screen and icon had been around for a while now, and it was proposed that they were about due for a refresh. This discussion led to the new, red versions of the [https://wiki.alioth.net/index.php/File:Oolite-logo2.png 128 x 128] and [https://wiki.alioth.net/index.php/File:Oolite-logo3.png 256 x 256] logo-images, both uploaded to the ''Elite'' Wiki under the old filenames six days later by Phkb, and incorporated in the official [https://oolite.space/ oolite.space] website.<br />
<br />
== Caveat ==<br />
<br />
The substitutions of the 2023, red logo-images under old filenames were apparently made in an attempt to reduce effort in replacing old hyperlinks on five other wikipages with new filenames.<br />
<br />
The five wikipages were discovered as follows. On an ordinary ''Elite'' wikipage, in the left-hand margin, under "tools" > "Special pages" > "Media reports and uploads" > "File list", in the "Search for media name" search box, enter "oolite-logo", click the "Include old versions of files" tick-box and the "Go" button; then click the name hyperlink associated with the desired thumbnail; again, in the left-hand margin, under "tools" > "What links here".<br />
<br />
However, these 2023 substitutions have caused ''all'' references in the ''Elite'' Wiki, hyperlinking to those old filenames, to refer to the 2023, red logos, in stead of their original, blue logos -- even on old, "history" pages of ''Elite'' wikipages (e.g.: the very first, 05:22, 14 February 2006 version of the [https://wiki.alioth.net/index.php?title=Oolite_Main_Page&oldid=3181 ''Oolite'' Main Page]).<br />
<br />
Therefore, in an attempt (1) to prevent a similar loss of the commOonity's heritage on ''Elite'' Wiki history pages, and (2) to facilitate easier searching for older logo-versions, it is recommended that future, new-logo designs be named according to, and uploaded under filenames conforming to the established naming-scheme of "''Oolite''-logo#", where # is the next number in the sequence, and that all hyperlinks throughout the ''Elite'' wiki be updated accordingly. It is recommended that only a single, highest-resolution logo-image be uploaded, since the ''Elite'' Wiki has the functionality to scale the logo images: <nowiki>[[File:oolite-logo#.png|196px]]</nowiki>.<br />
<br />
If an older logo might be required for any purpose, the [https://wiki.alioth.net/index.php/Special:ListFiles?limit=1000&ilsearch=Oolite-logo&user=&ilshowall=1 "''Oolite''-logo" File list search-page] is recommended. (Include old versions of files.)<br />
<br />
[[Category:Oolite]][[Category:Factual]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Shipdata.plist&diff=80594Shipdata.plist2024-01-04T16:08:14Z<p>Hiran: /* script */</p>
<hr />
<div>{{QuoteText|Text=The shipdata.plist would be more accurately called objectdata nowadays - a "ship" in Oolite might be a ship, a station, a rock, basically any solid object smaller than a planet (or moon)|Source=([http://www.aegidian.org/bb/viewtopic.php?p=275475#p275475 Cim])}}<br />
<br />
= Format =<br />
Shipdata.plist is in [[Property list]] format.<br />
The shipdata document is a dictionary of ships. Example:<br />
<br />
{<br />
"rsvh_adder" = {<br />
like_ship = "adder";<br />
is_external_dependency = yes;<br />
pilot = "oolite-hunter";<br />
roles = "rrs-vicious-hunter(1)";<br />
"missile_role" = "EQ_HARDENED_MISSILE";<br />
"script_info" = {<br />
"randomshipnames" = "hunter";<br />
"skilled_npc_role" = "hunter";<br />
};<br />
};<br />
<br />
"rsvh_asp" = {<br />
like_ship = "asp";<br />
is_external_dependency = yes;<br />
pilot = "oolite-hunter";<br />
roles = "rrs-vicious-hunter(1)";<br />
"aft_weapon_type" = "WEAPON_BEAM_LASER";<br />
"script_info" = {<br />
"randomshipnames" = "hunter";<br />
"skilled_npc_role" = "hunter";<br />
};<br />
};<br />
}<br />
<br />
'''shipdata.[[plist]]''' will provide Oolite with all the definitions necessary to include it as an entity in the game, be it ship, station, freak object or sub-entity [[shipdata_structure|(extra)]]. The following (property) entries are, for order's sake, listed alphabetically:<br />
<br />
= Ship keys=<br />
The following keys are used by all ships<br />
==accuracy==<br />
Used with missiles it has influence on tracking of target. Allowed values with missiles are between 0.0 and 10.0. When not defined, the system assigns to the missile the accuracy value of 0.0, which corresponds to the standard missile tracking behaviour.<br />
<br />
In 1.76 or earlier, when used with NPC ships it slightly enlarges the chance of shooting at greater distances, and makes a small improvement to their aim. Value with NPC ships is between -5 and 10 though all values between -5 and +1 will be increased to +1. When not defined, NPCs will be assigned a random value in the range +1 to +10.<br />
<br />
In 1.77 or later, when used with NPC ships it affects various aspects of the ship AI. Values can be assigned between -5 and +10. When not defined, a random value between -5 and +5 will be used. [[OXP_NPC_Combat_AI|NPC accuracy]] significantly affects the quality of the AI in combat.<br />
<br />
Example:<br />
"accuracy" = 8.3;<br />
<br />
== aft_eject_position ==<br />
Determines the XYZ point on the model from which cargo is ejected.<br />
<br />
Example:<br />
"aft_eject_position" = "0.0 -4.5 -23.0";<br />
<br />
== aft_weapon_type ==<br />
Assigns the ship's aft laser. <br />
Any weapon type from the [[equipment.plist]] can be used (and WEAPON_NONE). <br />
<br />
Example:<br />
"aft_weapon_type" = "WEAPON_BEAM_LASER";<br />
<br />
== ai_type ==<br />
Assigns an AI to the entity. This may be a previously existing AI, or one custom made for the occasion.<br />
<br />
Example:<br />
"ai_type" = "pirateAI.plist";<br />
<br />
== auto_ai ==<br />
This will autoswitch the ai to the appropriate one if a ship was added in one of its standard roles like trader or pirate. (true by default). See also the comment in the autoAIMap.plist inside Oolite. Defining auto_ai is only necessary when using one of the standard roles mentioned in the autoAIMap.plist for your ship. auto_ai does nothing for ships with custom roles.<br />
Example:<br />
"auto_ai" = yes;<br />
This auto_ai switch is also used for bounties. When auto_ai is false the ship will keep the bounty as defined for the ship but, when true and the ship is added in one of the populator roles, the ship will get the default bounty for that role.<br />
<br />
== auto_weapons ==<br />
{{oolite-prop-added|1.79}}<br />
<br />
This parameter if true (the default is false) indicates to the Oolite system populator (and potentially to OXPs) that they may change the weapons, missile load, equipment and other such parameters of this ship to make it better fit its role. This allows you to specify a single hull for multiple roles, and have the ship re-equipped to suit those roles. Ships intended for general addition to the spacelanes in standard roles and not intended to be significantly different in difficulty to the core ships should probably turn this on.<br />
<br />
Example:<br />
"auto_weapons" = yes;<br />
<br />
See [http://aegidian.org/bb/viewtopic.php?p=235800#p235800 here] for more detail<br />
<br />
== beacon ==<br />
A special feature for beacons and navigation aids.<br />
The string can be anything - the first letter was what was displayed in the advanced space compass before Oolite v.1.79. It is still the only display for the older [[HUD]]'s.<br />
<br />
Example: <br />
"beacon" = "X";<br />
<br />
Characters that are known to be used as identifiers for '''stations and other fixed objects''' are found on the page for the [[Advanced_Space_Compass#List_of_Navigational_Buoys|Advanced Space Compass]]. Most letters have been used multiple times in various OXPs. <br />
<br />
Since v.1.79 the HUD also displays a longer label; before that several HUD OXPs were available to do something similar (see [[Advanced Space Compass]]).<br />
<br />
We can also use custom icons with the compass. For that you must define a key in descriptions.plist with the same name as the beacon definition. Than define the icon in the same way as missile icons. (An array of x/y-coordinates that will be connected by lines). You can find more info at [http://aegidian.org/bb/viewtopic.php?f=4&t=9529 the Oolite BB].<br><br />
Example in shipdata:<br />
"beacon" = "fuelStation_location";<br />
Example in descriptions.plist<br />
"fuelStation_location" = (1, 2, -3, 2, -3, -4, 3, -4, 3, 4, -3, 4, -3, 3, 2, 3, 2, -3, 1, -3 );<br />
Before 1.75 the ships primary role was used for defining the icon name in descriptions.plist, but since 1.75 the beacon name itself is used.<br />
<br />
There are several devices which detect things from great distance: the Vanilla game's [[Advanced Space Compass]], [[The Galactic Almanac OXZ]], [[Telescope]] and the [[Long Range Scanner]]. The last is a cheat OXP useful for programmers. See the [http://www.aegidian.org/bb/viewtopic.php?p=281279#p281279 HIMSN thread] for details of making things invisible to them.<br />
<br />
== beacon_label ==<br />
{{oolite-prop-added|1.79}}<br />
<br />
A full label for the beacon. If this is not set, it will default to be the same as <code>beacon</code>, but it may be useful to have a beacon with a full label starting with a different letter than its code. The beacon label text will be expanded using the standard description rules<br />
"beacon_label" = "%H Station"; // Lave Station, Diso Station, etc.<br />
<br />
== bounty ==<br />
Sets a Cr. reward on the NPC's head, and is bound to give it trouble with the law . This bounty setting is overruled when adding ships in one of the populator roles like pirate, trader etc. Pirates are default added with a small bounty and traders are added clean. However, like the player, also the npc bounty can raise when attacking other clean ships or police vessels.<br />
<br />
Example:<br />
"bounty" = 50;<br />
<br />
== cargo_carried ==<br />
Determines the type of cargo carried as described in [[commodities]] and [[commodities.plist]]. Only one type can be specified. This key can be used for both ships and barrels.<br />
<br />
Example:<br />
"cargo_carried" = "Gold";<br />
<br />
When used for barrels, it is also possible to add several units in a pod by preceding the commodity name with a space separated number. Adding more than a ton in a pod is not possible. Defining a quantity for ships is not possible this way.<br><br />
It is possible to define a mix of random cargo for ships by using the string "SCARCE_GOODS" or "PLENTIFUL_GOODS", instead of a commodity name. The first selects random goods that are scarce at the main station, the second selects goods that are plentiful present at the main station. (Populator added traders heading toward the station always have scarce goods while traders heading from the main station always have plentiful goods on board. It would be wise to stick to this rule with custom ships.)<br><br />
To make cargo_carried working for ships, the cargo_type must be "CARGO_NOT_CARGO" to define the ship not being cargo itself. (see below)<br />
<br />
'''Note''': A bug introduced in 1.82 means that only commodity keys from the [[Trade-goods.plist]] are recognised here. That is "gold" will be recognised, whereas "Gold" will not. This bug is fixed in the 1.83/1.84 release.<br />
<br />
== [[cargo_type]] ==<br />
Determines if object is indeed cargo (CARGO_RANDOM, CARGO_SLAVES, CARGO_THARGOID, CARGO_ALLOY, CARGO_MINERALS, CARGO_CARRIED) or a ship, as below, which is not cargo. (CARGO_RANDOM is not fully random but means that a container can hold any kind of commodity.)<br><br />
<br />
Example:<br />
"cargo_type" = "CARGO_RANDOM";<br />
<br />
Will create random cargo, often based on availability in the system. When you want fixed cargo you can use:<br />
<br />
Example:<br />
"cargo_type" = "CARGO_CARRIED";<br />
"cargo_carried" = "4 Gold";<br />
<br />
You can also specify the cargo of a ship. use "cargo_type" = CARGO_NOT_CARGO and define the contents of the barrels it will give with "cargo_carried". In that case there must be no quantity defined, only the type of [[commodity]].<br />
<br />
Example:<br />
"cargo_type" = "CARGO_NOT_CARGO";<br />
"cargo_carried" = "Computers";<br />
<br />
Another notable type of cargo is the scripted item CARGO_SCRIPTED_ITEM, as exemplified by the cloaking device. When CARGO_SCRIPTED_ITEM is defined, the barrels will trigger scooping events for the ship-scripts. Other barrels don't trigger scooping events.<br><br />
The cargo barrels are stored in the ships hold like normal barrels when a cargo was defined for them with the JS method "setCargo". Without defined content, scripted barrels are removed after scooping. Scripted cargo works with any object that can be scooped. When you have scripted escape pods that must be preserved after scooping, fill it with one ton of Slaves.<br />
<br />
== cloak_automatic ==<br />
{{oolite-prop-added|1.75}}<br />
<br />
When false, the cloak of npc ships will never get activate automatic during combat, but is only activated by JS script commands. (True by default)<br />
<br />
Example:<br />
"cloak_automatic" = no;<br />
<br />
== cloak_passive ==<br />
When true, any firing of laser will deactivate the cloak. (False by default in 1.76 or earlier, true by default in 1.77 or later) <br />
<br />
Example:<br />
"cloak_passive" = yes;<br />
<br />
==conditions==<br />
With this option you can include an array of extra conditions when to add a ship. When the conditions are not met, the ship does not appear in a selection list by role. Useful when you have a standard ship like a trader that should only be added in certain systems.<br />
<br />
Example:<br />
"conditions" = (<br />
"systemGovernment_number equal 3",<br />
"systemEconomy_number lessthan 4"<br />
);<br />
<br />
==condition_script==<br />
''Available from Oolite 1.77 onwards''<br />
<br />
This option specifies a Javascript file which controls the addition of this ship. The <code>allowSpawnShip</code> function in that [[Oolite_JavaScript_Reference:_Condition_scripts|condition script]] will then be tested before the ship is added. Several ships can share a condition script.<br />
<br />
Example:<br />
"condition_script" = "myoxp_conditions.js";<br />
<br />
== counts_as_kill ==<br />
{{oolite-prop-added|1.75}}<br />
<br />
Killing this ship will not count as a kill by the player when set to false. (Default is true). Using this key prevents awarding kills to all kind of cargo, debris etc.<br />
<br />
Example:<br />
"counts_as_kill" = no;<br />
<br />
== custom_views==<br />
Will add the ability to display custom POVs of the player ship, in game toggled by pressing '''v'''. <br />
<br />
This is an array with any number of entries, one for each view, each with:<br />
*a '''view_description''' - giving a textual description of the view. <br />
*a '''view_position''' - relative to the origin of the ship model. <br />
*a '''view_orientation''' - this is a [[Quaternions|quaternion]] expressing a rotation from directly forwards. <br />
*a '''weapon_facing''' - FORWARD, AFT, PORT or STARBOARD. The weapon that will fire when that view is selected.<br />
<br />
The view_position is best chosen by selecting a facet, line or point in Wings and copying down the coordinates. <br />
<br />
For the view_orientation you will probably need a calculator but the basic method is to choose a unit vector (x y z) as the axis for a rotation then calculate the four values W X Y and Z for the quaternion as follows: <br />
<br />
W = the cosine of half the angle rotated about the axis xyz<br /><br />
X = the sine of half the angle rotated about xyz, multiplied by x<br /><br />
Y = the sine of half the angle rotated about xyz, multiplied by y <br /><br />
Z = the sine of half the angle rotated about xyz, multiplied by z <br /><br />
<br />
Four decimal places are probably enough accuracy for these values.<br />
<br />
Example:<br />
custom_views =<br />
(<br />
{<br />
view_description = "Front View";<br />
view_orientation = "0.0 0.0 1.0 0.0";<br />
view_position = "0.0 30.0 200.0";<br />
weapon_facing = "FORWARD";<br />
}<br />
);<br />
<br />
== death_actions ==<br />
Gives an opportunity to have a ship's death trigger one or a set of [[Shipdata.plist#script_actions|script_actions]]. It contains an array of legacy script expressions.<br />
<br />
Example:<br />
"death_actions" = ("spawn: explosive_shrapnel 1");<br />
<br />
== debris_role ==<br />
{{oolite-prop-added|1.74}}<br />
<br />
Specifies the kind of debris an asteroid or boulder generates. When not defined they default to generating 'ships' with role "boulder" or "splinter".<br />
<br />
Example:<br />
"debris_role" = "my_boulder_foo";<br />
<br />
See the discussion here: [http://www.aegidian.org/bb/viewtopic.php?f=4&t=10061 (RELEASE) Icesteroids V2] (2011-12) - about role circularity and about the vanilla game code creating alloys whenever anything big explodes!<br />
<br />
== density ==<br />
This real value is used to calculate a ships total mass. Default is 1.0. The mass of the ship is then 20 * density * volume.<br />
<br />
Ship's mass does not affect its flight under the non-inertial engines - see [[#thrust|thrust]]. It does affect:<br />
* changes in momentum, and damage done, in a collision<br />
* the minimum distance needed from this ship for another ship to open a witchspace wormhole (the blocking radius is the square root of a tenth of the mass)<br />
* the length of time a witchspace wormhole opened by this ship will remain open, and the radius of that wormhole.<br />
<br />
Example:<br />
"density" = 1.5;<br />
<br />
• See Eric Walch's comment on vanilla-game Coriolis stations [http://aegidian.org/bb/viewtopic.php?p=118196#p118196 here] (2010)<br />
<br />
== display_name ==<br />
States the model's name as it will be known to the ID computer. By default this is the same as "name". Added for multilingual oolite.<br />
<br />
Example:<br />
"display_name" = "ExampleShip Mark IX";<br />
<br />
== energy_recharge_rate ==<br />
The rate at which energy is replenished. Stations are at 100, Adders at 2. (Default value: 1)<br />
<br />
Example:<br />
"energy_recharge_rate" = "3.5";<br />
<br />
See [http://aegidian.org/bb/viewtopic.php?f=4&t=12152 Energy rates and recharge] for more detail (2012)<br />
<br />
== escape_pod_model ==<br />
With this entry ships can have custom escape pods. Defaults to "escape-capsule".<br />
<br />
'''Since v1.65:''' You have to specify the '''role''' of your custom escape pod (not its entry-name).<br />
<br />
'''Since v1.77:''' Deprecated in favour of <code>escape_pod_role</code>.<br />
<br />
Example:<br />
"escape_pod_model" = "custom_pod_role";<br />
<br />
'''Note:''' Each shipdata entry has an implicit unique role in the form of a shipdata key enclosed in square brackets - e.g. "[entry-name]". It might be useful if you want to use a specific escape pod that has no unique role.<br />
<br />
== escape_pod_role ==<br />
With this entry ships can have custom escape pods. It's almost the same as <code>escape_pod_model</code>, but has a less ambiguous name. Added in v1.77.<br />
<br />
The game first tries to spawn a pod using <code>escape_pod_role</code>, but if the property isn't set or a spawn fails, the game uses <code>escape_pod_model</code>. If the latter fails too, the game tries the "escape-capsule" role.<br />
<br />
Example:<br />
"escape_pod_model" = "custom_pod_role";<br />
<br />
== escorts ==<br />
Determines how many escorts an NPC shall have. Maximum is 16.<br />
<br />
Example:<br />
"escorts" = 4;<br />
Warning: Ships with scanClass = CLASS_POLICE should always have escorts set to zero. Oolite will set this value here and add wingmans instead of escorts. Without special scripting escorts won't escort a mother with CLASS_POLICE.<br><br />
For ships that are added in a trader role, the populator can decide to subtract escorts from the defined value when the system is estimated as safe. <br />
<br />
== escort_role ==<br />
Assigns the specific ship type to be the escort, by the ship's role. (Before Oolite 1.74 only the name "escort-role" is accepted.)<br />
<br />
Example:<br />
"escort_role" = "my_custom_escort_role";<br />
Escort ships will use the escortAI.plist unless "auto_ai" is set to false.<br />
<br />
<br />
==escort_roles==<br />
{{oolite-prop-added|1.79}}<br />
<br />
This property overrules <code>escorts</code>, <code>escort_role</code> and <code>escort_ship</code> to allow more flexible specification of a ship's escorts. It takes the form of a list of dictionaries, each containing a "role", "min" and "max" key. The ship will then get between "min" and "max" of that role of escort ship (specific ships can be added using the "[dataKey]" style of role), with "max" more likely in Anarchy systems and "min" more likely in Corporate States.<br />
<br />
escort_roles = (<br />
{ role = "escort"; min = -2; max = 2; },<br />
{ role = "escort-medium"; min = 0; max = 4; },<br />
{ role = "escort-heavy"; min = -4; max = 2; },<br />
{ role = ""; min = 0; max = 2; } // spare slots for wandering escorts<br />
);<br />
<br />
A negative number can be used for "min" - this makes it more likely that none of this type of escort will be used in safer systems, and makes the maximum number less likely in the more dangerous systems. In the example above, the ship will mainly be escorted by "escort-medium" ships, with a couple of "escort" ships likely in unsafe systems, and a small chance of "escort-heavy" ships also appearing in more dangerous systems.<br />
<br />
Leaving the role key blank allows the ship to have spare slots for escorts which are left unfilled when the ship is spawned. This can be used to simulate a willingness to hire additional escorts, or to indicate that the ship has already lost some of its escorts.<br />
<br />
The maximum number of escorts remains 16, and the list will be processed from top to bottom. Once 16 escorts are added no further entries will be considered.<br />
<br />
== escort_ship ==<br />
Assigns the specific ship type to be the escort, by the ship's name. (Before Oolite 1.74 only the name "escort-ship" is accepted.)<br />
<br />
Example:<br />
"escort_ship" = "cobramk1";<br />
Escort ships will use the escortAI.plist unless "auto_ai" is set to false.<br />
<br />
In Oolite 1.77 and later it is also possible to use <code>"escort_role" = "[cobramk1]"</code><br />
<br />
== exhaust ==<br />
The XYZ position(s) of exhaust plume(s), and the XYZ of the plume shape, ergo<br />
<br />
x y z width height length<br />
<br />
'''x y z''' is the position relative to the origin of the main model. <br />
<br />
'''width''' in meters, how far a plume extends on x axis, on each side of plume position. (x radius)<br />
<br />
'''height''' in meters, how far a plume extends on y axis, above and below of plume position. (y radius)<br />
<br />
'''length''' in meters, how long a plume is on z axis. (This value is in current Oolite versions ignored. Length is now derived from the ships speed)<br />
<br />
<br />
Below are 2 assigned plumes at coords 5, 0, -25 and -5, 0, -25, and each plume is 6 m wide and 4 m tall. (length info is ignored)<br />
<br />
Example:<br />
"exhaust" = (<br />
"5 0.0 -25 3.0 2.0 10.0",<br />
"-5 0.0 -25 3.0 2.0 10.0"<br />
);<br />
<br />
== exhaust_emissive_color ==<br />
{{oolite-prop-added|1.79}}<br />
<br />
Determines the colour of the exhausts.<br />
<br />
For the colour you can use either a [[Materials in Oolite#Colour specifiers|colour specifier]] or a [[Materials in Oolite#Named colours|named colour]]. <br />
<br />
Example:<br />
"exhaust_emissive_color" = "redColor";<br />
or<br />
"exhaust_emissive_color" = "1 0 0";<br />
<br />
== explosion_type ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
A list of [[explosions.plist]] entries describing how the ship explodes if destroyed.<br />
<br />
Example:<br />
"explosion_type" = ("oolite-default-asteroid-explosion");<br />
<br />
== extra_cargo ==<br />
Cargobay extension size can be customised. This is the amount the cargo capacity increases when an extra cargobay is installed. Default value is 15. It is only used with player ships.<br />
<br />
Example:<br />
"extra_cargo" = 25;<br />
<br />
== forward_weapon_type ==<br />
Assigns the ship's forward laser. <br />
Any weapon type from the [[equipment.plist]] can be used.<br> e.g.: WEAPON_PULSE_LASER, WEAPON_BEAM_LASER, WEAPON_MILITARY_LASER, WEAPON_MINING_LASER, WEAPON_PLASMA_CANNON, WEAPON_THARGOID_LASER and WEAPON_NONE. <br />
<br />
Example:<br />
"forward_weapon_type" = "WEAPON_BEAM_LASER";<br />
<br />
== frangible ==<br />
Determines if eventual sub-entities are "loose". By default any given object is already frangible, so the use of this line must be to negate that. <br />
If set to false, the object plus subentities will be regarded as a single object.<br />
If set to true, sub entities can be destroyed seperately from the main object. Frangible sub-entities can have a max_energy and an energy_recharge_rate that is independently set from the main entity.<br />
<br />
Example:<br />
"frangible" = no;<br />
<br />
== fragment_chance ==<br />
Determines if a ship breaks apart into fragments and generates parts with role "wreckage". By chance factor, or true/false. Default is 90% chance.<br />
The amount of wreckage is based on the ships mass with a maximum of 3. Wreckage is scaled to match the ships size but is very short living. (0.25s -> 1.25s)<br />
<br />
Example:<br />
"fragment_chance" = no;<br />
<br />
== fuel ==<br />
Determines an NPC ship's fuel storage, which will affect how it uses its Fuel Injectors and how far it can jump. If unspecified the default is zero (though ships added via the system populator will often be given some fuel anyway)<br />
<br />
Example:<br />
"fuel" = 70;<br />
<br />
== has_cloaking_device ==<br />
Determines if a ship has a cloacking device installed. By chance factor, or true/false.<br />
<br />
Example:<br />
"has_cloaking_device" = 0.5;<br />
<br />
== has_ecm ==<br />
Determines if a ship has the E.C.M system installed. By chance factor, or true/false.<br />
<br />
Example:<br />
"has_ecm" = 0.5;<br />
or<br />
"has_ecm" = no;<br />
<br />
== has_energy_bomb ==<br />
Determines if a ship has an energy bomb. If it has one, it might launch a mine with role "energy_bomb" as part of his fleeing behavior. currently the only build-in mine with this role is the q-bomb.<br>A ship will only deploy the bomb when it has also fuel-injectors and some fuel left to avoid getting killed by its own bomb. On average it will try to deploy the bomb once every 100 seconds during fleeing.<br />
<br />
Example: <br />
"has_energy_bomb" = yes;<br />
<br />
== has_escape_pod ==<br />
Determines if a ship has an escape pod. Can be either a boolean value, or a number from 0 to 1 expressing the likelihood of the equipment being present. Starting with version 1.65 ships can have multiple escape pods. To specify more than one escape pod, '''has_escape_pod''' must be set to a numeric value corresponding to the escape pods present on board.<br />
<br />
Examples:<br />
has_escape_pod = no;<br />
has_escape_pod = 0.75;<br />
has_escape_pod = 3;<br />
<br />
== has_fuel_injection ==<br />
Determines if a ship has the witchdrive fuel injector.<br />
<br />
Example:<br />
"has_fuel_injection" = 0.99;<br />
<br />
==has_military_jammer==<br />
Determines if a ship has a military jammer. Ships equipped with this item become invisible on the radar. <br />
Example:<br />
"has_military_jammer" = 0.75;<br />
<br />
==has_military_scanner_filter==<br />
Determines if a ship has a military jammer filter. Ships equipped with this item can see ships equipped with a military jammer on the radar. <br />
Example:<br />
"has_military_scanner_filter" = 0.50;<br />
<br />
== has_scoop ==<br />
Determines if a ship has a fuel/cargo scoop.<br />
<br />
Example:<br />
"has_scoop" = no;<br />
<br />
== has_scoop_message ==<br />
A key for cargo. Determines if a barrel generates a default scoop message when scooped. Default is true, but setting it to false suppresses any messages, so a scripts can generate its custom messages on scooping. (Added with Oolite 1.74)<br />
<br />
Example:<br />
"has_scoop_message" = no;<br />
<br />
== has_shield_booster==<br />
Determines if a ship has the shield booster. (enlarges max energy with 256)<br />
<br />
Example:<br />
"has_shield_booster" = 0.80;<br />
<br />
== has_shield_enhancer ==<br />
Determines if a ship has the coveted shield enhancer. (enlarges max energy with 256 and raises energy recharge rate with 50%)<br />
<br />
Example:<br />
"has_shield_enhancer" = 0.45;<br />
<br />
== heat_insulation ==<br />
This real number gives the amount of heat insulation of a ship. Default is 1.0 (2.0 for ships equipped with EQ_HEAT_SHIELD). Values below 0.125 will be increased to that minimum. This parameter is only for NPC ships and stations. Player ships ignore this and always start with 1.0 heat insulation and can add an additional 1.0 (for a total of 2.0) with the ship equipment EQ_HEAT_SHIELD. Heat insulation for NPCs is only a factor when close to the sun. Energy damage does not cause overheating (because otherwise it would be too easy to overheat NPC ships with missiles or lasers), but it can raise ships' temperature to the maximum safe level. Overheating occurs when a ship's temperature exceeds the safe level, which is determined by the heat insulation level. External temperature is determined by distance from the sun. Larger suns are hotter. Suns that are going nova are, unsurprisingly, even warmer. <br />
<br />
Example:<br />
"heat_insulation" = "2.0";<br />
<br />
NPC ships launched from stations are given the same heat insulation as the station if the station's is greater than the ship's. Courier ships generated by the core system populator are given a heat insulation level of 6.0. Escort ships (if any) receive at least the same heat insulation as the ship they are escorting. See [http://www.aegidian.org/bb/viewtopic.php?p=177357#p177357 BB Thread] (2012)<br />
<br />
Player ships use the same model as NPC ships for external temperature from the sun, but additionally simulate heat from air friction when inside planetary atmospheres, which is a factor that NPC ships ignore.<br />
<br />
== hud ==<br />
Used for a playership, to assign another HUD than the default one. Note that small ships get the second default - the hud-small.plist<br />
<br />
Example:<br />
"hud" = "specialhud.plist";<br />
<br />
== hyperspace_motor ==<br />
If set to false / NO, it will stop ships from executing normal hyperspace jump (player ships will still be able to execute galactic jumps). Default = true / YES. (Planned for Oolite 1.75)<br />
<br />
Examples:<br />
"hyperspace_motor" = no;<br />
<br />
hyperspace_motor=NO;<br />
<br />
== hyperspace_motor_spin_time ==<br />
Used to modify jump countdown time. Default = 15.<br />
<br />
Examples:<br />
"hyperspace_motor_spin_time" = "15";<br />
<br />
==injector_burn_rate==<br />
{{oolite-prop-added|1.81}}<br />
<br />
The default fuel burn rate of injectors on this ship, in deci-LY per second. The default is 0.25.<br />
<br />
"injector_burn_rate" = 0.25;<br />
<br />
==injector_speed_factor==<br />
{{oolite-prop-added|1.81}}<br />
<br />
The multiplier applied to the ship's maximum speed when it is using injectors. The default is 7.<br />
<br />
"injector_speed_factor" = 7;<br />
<br />
==is_external_dependency==<br />
This key should be added to ships that use like_ship references to ships in other oxps but don't depend on them. Normally will Oolite write errors in the log when it can't resolve a like_ship reference. When this key is set to YES, it will suppress the error generation.<br>WARNING: only set this key to YES when the model won't get added to the system without the other oxp installed or you will miss a valuable warning.<br />
<br />
Example:<br />
"is_external_dependency" = yes;<br />
<br />
==is_submunition==<br />
Key added for missiles with multiple warheads. When this key is set and the entity is spawn or fired by a missile, it inherits its parent as owner. This key must be set so the player will be awarded for a kill by submunition.<br />
<br />
Example:<br />
"is_submunition" = yes;<br />
<br />
==is_template==<br />
Set this to yes for ships which are only used through like_ships and are not intended to be used directly. If your (otherwise working) OXP generates warnings about ships with no roles or model attribute, you probably need this.<br />
<br />
Example:<br />
"is_template" = yes;<br />
<br />
== laser_color ==<br />
Determines a ship's laser colour.<br />
<br />
As colour you can use a [[Materials in Oolite#Colour specifiers|colour specifier]] or a [[Materials in Oolite#Named colours|named colour]]. The game requires laser colours to be reasonably bright; if the brightest colour component is less than 0.5, the colour will be brightened.<br />
<br />
Example:<br />
"laser_color" = "cyanColor"<br />
<br />
<br />
== launch_actions ==<br />
Triggers a script on the entity just after setup, also when called by spawn and addShip methods.<br />
Can be used to change to a custom AI, when a ship is generated by standard role. <br />
[[Shipdata.plist#script_actions|script_actions]]<br />
<br />
Example:<br />
"role = trader";<br />
"launch_actions" = (<br />
"setAITo: pirateAI.plist"<br />
);<br />
<br />
<br />
== like_ship ==<br />
Allows a shipdata entry (of a ship with many matching characteristics to another) to be short and sweet. With '''like_ship''' you can reference to another existing shipdata entry, and then only specify the differences to the 'original'. It takes the unique '''entry-identifier''' as argument. Of course you have to make sure that the 'original' you are referring to actually exists, or Oolite won't be able to create your ship.<br />
<br />
Works well together with the [[#is_template|is_template]]-key.<br />
<br />
Example:<br />
"my_ship" = {<br />
"like_ship" = "adder";<br />
"max_flight_speed" = "700";<br />
"name" = "Freak Turbo Adder";<br />
},<br />
<br />
== likely_cargo ==<br />
This is only used for ships with role asteroid and pirate. With asteroids it gives the likely number of boulders it breaks into. With pirates added by the [[System Populator]]: when lower than 16 it is the cargo, when higher than 15, it is changed in a random value between 0 and 15. This value is overridden by the actual scooped cargo if the pirate had scooped something.<br />
<br />
Example:<br />
"likely_cargo" = "2";<br />
<br />
== materials ==<br />
See [[Materials in Oolite]].<br />
<br />
<br />
== max_cargo ==<br />
Sets the ship's cargo limit. On explosion of trader ships added by the [[System Populator]], 10% of this value is used as likely cargo. When the result is lower than 16 it is the cargo, when higher than 15, it is changed in a random value between 0 and 15.<br />
<br />
Example:<br />
"max_cargo" = "5";<br />
<br />
== max_energy ==<br />
Sets the ship's energy value. (Default value: 200)<br />
<br />
Example:<br />
"max_energy" = "300";<br />
<br />
See [http://aegidian.org/bb/viewtopic.php?f=4&t=12152 Energy rates and recharge] for more detail (2012). Divide by 64 to get the rough number of energy banks.<br />
<br />
== max_flight_pitch ==<br />
Sets pitch factor. Will usually range from a sluggish 0.6 to a very sensitive 3.0<br />
<br />
Example:<br />
"max_flight_pitch" = "2.2";<br />
<br />
<br />
== max_flight_roll ==<br />
Sets roll factor. Will usually range from 0.8 to 4.6.<br />
<br />
Example:<br />
"max_flight_roll" = "4.2";<br />
<br />
<br />
== max_flight_speed ==<br />
Sets the model's top speed. Interceptors fly at 520 (0.52 LM), Shuttles at 80.<br />
<br />
Example:<br />
"max_flight_speed" = "320";<br />
<br />
== max_flight_yaw ==<br />
Sets yaw factor. Will usually range from a sluggish 0.6 to a very sensitive 3.0 When no value is defined it will use the same value as max_flight_pitch<br />
<br />
Example:<br />
"max_flight_yaw" = "2.2";<br />
<br />
== max_missiles ==<br />
Sets a ship's missile limit. Maximum allowable value for the player is 16 and for npc ships 32. When not defined, the value with "missiles" is used as max_missiles. When defining more than a few missiles, it could be wise to also define value for "missile_load_time" to avoid massive missile launches. npc ships are more likely to fire missiles the more they carry.<br />
<br />
Example:<br />
"max_missiles" = "1";<br />
<br />
== missile_launch_position ==<br />
Determines the XYZ point on the model from which a missile is launched.<br />
<br />
Example:<br />
"missile_launch_position" = "0.0 -2.25 10.0";<br />
<br />
This position should lie outside the bounding box of the core entity and not just outside of the ships mesh. Default value: (0, -4, 1)<br><br />
If the position does lie inside the bounding box, the launch position is shifted along its direction until the launched missile lies outside the bounding box of the central entity. (Bounding boxes of subentities are ignored) The collision radius of the launched missile is taken into account. The collision radius for a plain missile is 4.52 meter.<br />
<br />
== missile_load_time ==<br />
Defines the time in seconds before a new missile is ready to fire after one is fired. Mainly useful for npc ships that have many missiles.<br />
<br />
Example:<br />
"missile_load_time" = "2.1";<br />
<br />
<br />
== missiles ==<br />
Sets the number of missiles the ship is equipped with on ship creation. e.g. you can set this at zero and than use a dedicated script to fill up the bay with specific missiles.<br />
<br />
Example:<br />
"missiles" = "0";<br />
<br />
== missile_role ==<br />
Defines the type of missiles (or mines) an NPC ship is provided with. Default is "EQ_MISSILE". When missiles are loaded on ship creation, 90% will be of this type and 10% will be random, chosen from all possible NPC missiles and mines. Also affects the javascript [[Oolite_JavaScript_Reference:_Ship#selectNewMissile|selectNewMissile()]] command.<br />
The string defined inside missile_role needs both to be defined inside [[equipment.plist]], and be inside the '''roles''' property of the missile/mine shipdata entry. <br />
<br />
To assign a specific missile type to a newly bought player ship, its dependancies must be defined inside [[shipyard.plist]].<br />
<br />
Example: <br />
"missile_role" = "EQ_THARGON";<br />
<br />
== model ==<br />
Assigns the entity's corresponding '''.dat''' file that will be found with the exact same name in the ''Models'' folder.<br />
<br />
Example:<br />
"model" = "example_ship.dat";<br />
<br />
== model_scale_factor ==<br />
1.81 or later only.<br />
<br />
If this is set, the model specified in the <code>model</code> property will be scaled by this factor (the default is 1.0, of course). Additionally, all subentities will have both their positions and sizes scaled (recursively if necessary), and the weapon positions will also be multiplied by the scale factor.<br />
<br />
Player ships will also have their internal and external view positions multiplied by the scale factor.<br />
<br />
model_scale_factors on subentities will be ignored - the value for the main entity will be used instead.<br />
<br />
Example:<br />
"model_scale_factor" = 2.0;<br />
<br />
== name ==<br />
States the model's name as it will be known to the ID computer.<br />
<br />
Example:<br />
"name" = "ExampleShip Mark IX";<br />
<br />
== no_boulders ==<br />
With older versions, scripted asteroids had no boulders by default. Starting with 1.70 all asteroids produce boulders when hit by a mining laser. no_boulders can overwrite this to emulate the old situation. By chance factor, or true/false.<br />
<br />
Example:<br />
"no_boulders" = yes;<br />
<br />
== pilot ==<br />
Gives the ship a predefined pilot, defined in [[characters.plist]]. Can eject in pod, if available, and be captured.<BR><br />
By default every object starts with a pilot except buoys, missiles, cargo and rocks. By defining a specific pilot, any default pilot is replaced or a pilot is added to previously unpiloted objects.<br />
<br />
Example:<br />
"pilot" = "constrictor-mission-thief";<br />
<br />
When no pilot is defined, Oolite will create a random pilot based on the ships role. For custom roles this means that Oolite has no clue and the pilot might have other bounties/insurances than desired. For this reason contains Oolite, starting with v 1.75, some predefined pilots: "oolite-trader", "oolite-pirate", "oolite-hunter", "oolite-police", "oolite-miner", "oolite-passenger" and "oolite-slave". When using one of these pilots, a random bounty/insurance will be set appropriate for this pilot role. Pilot bounty is different as ship bounty but on ejecting the pilot inherits the highest of both values. (actually a bitwise OR of both values)<br />
<br />
== port_weapon_type ==<br />
{{oolite-prop-added|1.77}}<br />
<br />
Assigns the ship's port laser. <br />
Any weapon type from the [[equipment.plist]] can be used (and WEAPON_NONE). <br />
<br />
While not essential, you should generally assign the same weapon to [[#starboard_weapon_type|starboard_weapon_type]].<br />
<br />
Example:<br />
"port_weapon_type" = "WEAPON_BEAM_LASER";<br />
<br />
== reaction_time ==<br />
Sets the reaction time of the pilot of this ship. The default is 1.5 seconds.<br />
<br />
Example:<br />
"reaction_time" = 1.0; // this pilot is superhuman! or a cat<br />
<br />
== roles ==<br />
Assigns which [[role]](s) the entity should have, that can correspond to one specific, exclusive use, or several.<br />
<br />
The game engine constantly calls for generic roles to populate the universe. In the example below the ship in question will be considered twice as often (2.0) when a trader is called for, only one quarter as often (0.25) when looking for a hunter, and as often as any other pirate ships when looking for a pirate. Multiple roles are space separated. An explanation of the generic roles available in Oolite 1.79 or later is at [[Oolite_Ship_Roles]].<br />
<br />
'''NB:''' If the ship cannot be docked to, extra care should be taken to avoid using the words '''station''' or '''carrier''' as part of any of the ship's role names. When either of these words are inside the roles key, the ship is automatically given station attributes. Other ships might even fruitless try to dock with it, and it will affect how some ships / entities are shown on the scanner.<br />
<br />
Example:<br />
"roles" = "hunter(0.25) trader(2.0) pirate";<br />
<br />
or an exclusive role, simply:<br />
<br />
"roles" = "uniquely_named_role";<br />
<br />
This has the benefit of being the only ship to be selected when a [[Script.plist|script]] calls for the ''uniquely_named_role'' ship.<br />
<br />
An item from the [[commodities]] can also be named as a role, for when that commodity is floating in space and called upon, to be represented by a particular model.<br />
<br />
Example:<br />
"roles" = "Gold";<br />
<br />
Some roles are used by the game engine to populate systems, detect and define properties. (see also the [[System Populator]])<br />
Such roles include 'thargoid', 'missile' and 'energybomb'.<br />
Externally used equipment also needs specific mention of role, for example EQ_*_MINE and EQ_*_MISSILE.<br />
<br />
* [http://aegidian.org/bb/viewtopic.php?p=98050#p98050 1 1/2 pages of discussion of station population percentages] (2010)<br />
<br />
== rotational_velocity ==<br />
May be applied to a sub-entity, like the following entry to the [[Shipdata.plist#subentities|subentity]] spines of the [[Weeviloid Hunter]].<br />
Takes the form of [[Quaternions|quaternions]]. The following example enables rotation around the Z-axis.<br />
<br />
Example:<br />
"rotational_velocity" = "0.707 0.0 0.0 0.707";<br />
<br />
An explaining example taken from the Oolite Bulletin board.<br />
<br />
The rotational velocity key is rotation per second. For instance, if you want to rotate once per 20 seconds around the Z axis:<br />
<br />
a = 360 ° / 20 = 18 °<br />
<br />
[x, y, z] = [0, 0, 1]<br />
<br />
sin a ˜ 0.30902<br />
<br />
cos a ˜ 0.95106<br />
<br />
Q = (0.95106, 0, 0, 0.30902)<br />
<br />
'''shipdata.plist entry:'''<br />
"rotational_velocity"="0.95106 0.0 0.0 0.30902";<br />
<br />
In practical terms, one can therefore use <br />
"rotational_velocity"="3 0 0 1"<br />
To alter the speed of rotation increase number 3, for slower rotations, decrease for higher speed. For opposite rotational direction, change 1 to -1.[http://www.aegidian.org/bb/viewtopic.php?f=4&t=6899&p=93038&hilit=rotational+velocity+key#p93038 (ref: Arhuman BB 1/11-09)]<br />
<br />
== scan_class ==<br />
Will alter the model's appearance on the [[IFF system]]. If this line is omitted, it will usually become by default a standard ship entity (CLASS_NEUTRAL), appearing as a yellow flag on the radar (red if hostile to the player), but may be given a different scan class if added with other roles. There are other options.<br />
* CLASS_BUOY - green/yellow on scanner, will rotate in idle state, does not masslock<br />
* CLASS_CARGO - white on scanner, can be scooped, does not masslock<br />
* CLASS_MILITARY - purple on scanner, better pilots, will not attack other military ships, flashes purple/magenta if hostile to player<br />
* CLASS_MISSILE - cyan on scanner, will not avoid collisions<br />
* CLASS_POLICE - purple on scanner, will not attack other police ships, legal penalties for attacking, never has bounty, flashes purple/magenta if hostile to player<br />
* CLASS_ROCK - white on scanner, launched defense ships do not inherit scan class, does not masslock<br />
* CLASS_STATION - green on scanner, launched defense ships do not inherit scan class<br />
* CLASS_THARGOID - green/red on scanner, considered hostile to any non-thargoid ship<br />
* CLASS_NO_DRAW - invisible on scanner, cannot be targeted by missiles, does not masslock<br />
* CLASS_MINE - red/yellow on scanner, automatically set on mines launched by player to override existing scan class, does not masslock<br />
(This property was called "scanClass" before Oolite 1.74.)<br />
Scan classes marked as "does not masslock" will masslock the player anyway if they are hostile to the player (as condition will be Red)<br />
<br />
Scripts can define custom colours for ships on the [[IFF system]] so ships may have a scanner appearance different to the default for their scan class.<br />
<br />
Example:<br />
"scan_class" = "CLASS_ROCK";<br />
<br />
==== Developer Note ====<br />
Oolite uses scan_class internally to determine the behaviour of some ships (particularly with regard to who may shoot whom without incurring legal penalties). Bear this in mind and don't allocate CLASS_POLICE or CLASS_THARGOID to ships lightly!<br />
<br />
== scan_description ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
The description of the ship's legal status on the [[Scanner Targeting Enhancement]]. If this is absent, the default text for the scan class will be used.<br />
<br />
"scan_description" = "Unclaimed rock";<br />
<br />
== scanner_display_color1 ==<br />
Overrides the color that would normally be set by scanClass.<br />
<br />
Example:<br />
"scanner_display_color1" = "greenColor";<br />
<br />
== scanner_display_color2 ==<br />
Overrides the color that would normally be set by scanClass. If this is set, the ship will flash between the two colours.<br />
<br />
Example:<br />
"scanner_display_color2" = "redColor";<br />
<br />
== scanner_hostile_display_color1 ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
Overrides the color that would normally be set by scanClass when the ship is hostile and targeting the player.<br />
<br />
If no hostile colours are set, but normal colours are set, then the normal colours, not the scan class colours, will be used for a hostile ship.<br />
<br />
Example:<br />
"scanner_hostile_display_color1" = "greenColor";<br />
<br />
== scanner_hostile_display_color2 ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
Overrides the color that would normally be set by scanClass when the ship is hostile and targeting the player. If this is set, the ship will flash between the two colours.<br />
<br />
Example:<br />
"scanner_hostile_display_color2" = "redColor";<br />
<br />
== scanner_range ==<br />
Sets a custom scanner range. Standard is 25.6 km, thargoids have 50 km. Only applies to NPCs. However, at least since oolite 1.65 all defined scanner ranges are limited to 25.6 km, even for thargoids. This means it only makes sense defining shorter ranges than the maximum range.<br />
<br />
Example:<br />
"scanner_range" = "25600";<br />
<br />
== scoop_position ==<br />
Determines the XYZ point on the model from which cargo is scooped. (default is 0,0,0)<br />
<br />
Example:<br />
"scoop_position" = "0.0 -4.5 -23.0"<br />
<br />
Scooping for a player ship starts when the cargo collides with the front half of the bottom of the ship. Any other place of first contact leads to smashing the cargo in pieces. A good y-value for the position would therefor be half the size of the lowest body part of this area of the ship. For the z-value a point in the back side would be better.<br />
<br />
== script ==<br />
Specifies a [[Oolite_JavaScript_Reference:_Ship_script_event_handlers |Ship Script]] (through it's filename) to attach to the ship. Ship scripts written in [[Scripting Oolite with JavaScript|JavaScript]] are the preferred approach for scripting ships in current Oolite.<br />
<br />
== script_info ==<br />
A property list whose contents are available to JavaScript scripts, for whatever use they desire. It is exposed to JavaScript as the <code>[[Oolite JavaScript Reference: Ship#scriptInfo|scriptInfo]]</code> property of <code>Ship</code> objects.<br><br />
Take note that when using an ascii plist, the JS engine will read in all entries as strings. When you need an entry as number, you might need to explicit convert it to a number. This is specially true for booleans as a "NO" string will be read as true. For all normal keys its Oolite that does the conversion for you.<br />
<br />
A short overview about used [[OXP_scriptInfo|script_info keys in OXPs]].<br />
<br />
== script_actions ==<br />
Gives an oportunity to insert events such as in [[script.plist]], to involve a specific shipdata entity. As seen in the following example, this particular object checks if Player has a cloaking device, and if not, will award it. Should Player already have it, the gift will be in gold. See also [[scripts within shipdata]] for more detailled info.<br />
<br />
Example:<br />
"script_actions" =<br />
(<br />
"testForEquipment: EQ_CLOAKING_DEVICE",<br />
{<br />
"conditions"<br />
(<br />
"foundEquipment_bool equal NO"<br />
)<br />
"do"<br />
(<br />
"awardEquipment: EQ_CLOAKING_DEVICE"<br />
)<br />
"else"<br />
(<br />
"awardCargo: 100 Gold"<br />
)<br />
}<br />
);<br />
<br />
== setup_actions ==<br />
Arranges a process that may be necessary for some objects, like ball turrets.<br />
<br />
Example:<br />
"setup_actions" =<br />
(<br />
"initialiseTurret"<br />
);<br />
<br />
<br />
== shaders ==<br />
The ''shaders'' dictionary has the same structure as the ''[[#materials|materials]]'' dictionary. When [[Shaders in Oolite|shaders]] are available, the contents of the ''shaders'' dictionary are used in preference to those in ''materials''. If shaders are not available, the ''shaders'' dictionary is ignored.<br />
<br />
== ship_name ==<br />
{{oolite-prop-added|1.79}}<br />
<br />
The name of this individual ship (e.g. Pride of Lave), which is placed in [[Oolite_JavaScript_Reference:_Ship#shipUniqueName|ship.shipUniqueName]]. It rarely makes sense to set this property in <code>shipdata.plist</code>, except perhaps for a unique mission ship.<br />
<br />
== ship_class_name ==<br />
{{oolite-prop-added|1.79}}<br />
<br />
The name of this ship's class (e.g. Sidewinder), which is placed in [[Oolite_JavaScript_Reference:_Ship#shipClassName|ship.shipClassName]]. If this is not set, it will default to [[#name|name]], which is usually suitable.<br />
<br />
== show_damage ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
Whether to show sparks and other damage effects when this ship is hit.<br />
<br />
Defaults to on if energy recharge rate is greater than zero, off otherwise, for compatibility with previous hard-coded behaviour.<br />
<br />
== smooth ==<br />
Determines if the model will use glLightModel(GL_FLAT) or glLightModel(GL_SMOOTH).<br />
<br />
If true, then lighting effects will be interpolated across the polygons of the model, giving a more 'rounded' effect.<br />
<br />
Asteroids, Boulders and Splinters use this effect as do some other models.<br />
<br />
Example:<br />
"smooth" = yes;<br />
<br />
== spawn ==<br />
The spawn directory is only used when a ship is added with the command: "spawnShip: shipname". This command only allows to add one ship by name (not role!). The position and orientation are taken from a spawn directory that describes the position it is placed and the position it is looking at.<br />
<br />
Example<br />
"spawn"<br />
{<br />
"facing_position" = "spu 0 0 0";<br />
"position" = "wpu 0 0 0.2";<br />
}<br />
<br />
<br />
== starboard_weapon_type ==<br />
{{oolite-prop-added|1.77}}<br />
<br />
Assigns the ship's starboard laser. <br />
Any weapon type from the [[equipment.plist]] can be used (and WEAPON_NONE). <br />
<br />
While not essential, you should generally assign the same weapon to [[#port_weapon_type|port_weapon_type]].<br />
<br />
Example:<br />
"starboard_weapon_type" = "WEAPON_BEAM_LASER";<br />
<br />
== subentities ==<br />
An array of ''subentity definitions''. A ''subentity'' is an object attached to your ship. There are several types of subentity:<br />
* ''Static subentities'', the default type, are simply extra models. They are defined as separate shipdata.plist entries, so technically they’re ships, but they don’t have a mind of their own. If the main ship is [[#frangible|frangible]], static subentities can take damage and blow up separately from the main ship. They can also be individually exploded or removed by scripts.<br />
* ''Docks'' are recognized when setting up a station or carrier, and used to determine the station’s docking port parameters. After set-up, they work just like normal static subentities. The string "dock" in lowercase must be part of the old style name in order to get recognised as the dock subEntity.<br />
* ''Ball turrets'' turn to track the ship’s current target, and shoot plasma balls if the target is within range (6000 metres). A ball turret’s field of fire is a 157 ° cone centred on its original facing. Currently, ball turrets make no effort not to shoot their own ship, so it is up to the designer to ensure this field of fire is clear. Like a static subentity, a ball turret is based on a shipdata.plist entry so its appearance can be customized. Oolite provides a built-in shipdata entry for ball turrets called, imaginatively, '''ballturret'''. <br />
: For discussion on the effective range (before the reduction from the original 7500 to 7200) see [http://www.aegidian.org/bb/viewtopic.php?p=198854#p198854 here].<br />
:Note that the [[Vortex]] turrets can be switched off. This involved special scripting (basically removing and restoring the turrets by script). Needs a little fancy footwork when docked though or else if you dock with removed sub-entities (even deliberately removed ones) you'll get a maintenance overhaul offered which will put them back if purchased.<br />
* ''Flashers'' are blobs which glow with a pulsating light. From Oolite 1.74 onwards, constant light will also be an option. Note that while flashers appear luminous – they are unaffected by shadows – they do not cast light on other objects.<br />
* Random number of Subentities (''eg'' Cargo pods): see [http://www.aegidian.org/bb/viewtopic.php?f=4&t=18743 Can the number of entities a ship be randomized?] (2017)<br />
<br />
=== New-style subentity definition ===<br />
Oolite 1.73 introduced a more flexible, dictionary-based way of specifying subentities. A new-style subentity is a dictionary using the following keys:<br />
{| class="wikitable" border="1" cellpadding="3" cellspacing="0" style="width:100%"<br />
|+ Subentity definition properties<br />
! Name !! Type !! Description<br />
|-<br />
| '''type''' || string || One of: “'''standard'''”, “'''ball_turret'''”, “'''flasher'''”. If not specified, “standard” is assumed.<br />
|-<br />
| '''subentity_key''' || string || The key of a ''shipdata.plist'' entry. Required for '''standard''' and '''ball_turret''' subentities, ignored for flashers.<br />
|-<br />
| '''position''' || vector || The position of the subentity relative to its parent. (This can be specified as a string with three numbers in it, or an array of three numbers, or a dictionary with '''x''', '''y''' and '''z''' entries.) Default: (0, 0, 0).<br />
|-<br />
| '''orientation''' || [[quaternion]] || The orientation of the subentity. Ignored for flashers. (This can be specified as a string with four numbers in it, or an array of four numbers, or a dictionary with '''w''', '''x''', '''y''' and '''z''' entries.) Default: (1, 0, 0, 0), which corresponds to no rotation.<br />
|-<br />
| '''is_dock''' || boolean || True if the subentity is a dock; false by default. Only applies to '''standard''' subentities. '''Note:''' this is ''not'' implied by having “dock” in the '''subentity_key''', as it is for old-style subentity definitions. In Oolite 1.76 or earlier a station may only have at most one dock subentity.<br />
|}<br />
<br />
{| class="wikitable" border="1" cellpadding="3" cellspacing="0" style="width:100%"<br />
|+ Subentity definition properties for dock subentities (1.77 or later)<br />
! Name !! Type !! Description<br />
|-<br />
| '''allow_docking''' || boolean || ''In Oolite 1.77 or later'', whether the dock allows docking. Defaults to true. (and always true in 1.76). Ignored for non-docks.<br />
|-<br />
| '''allow_launching''' || boolean || ''In Oolite 1.77 or later'', whether the dock allows launching. Defaults to true. (and always true in 1.76). Ignored for non-docks.<br />
|-<br />
| '''disallowed_docking_collides''' || boolean || ''In Oolite 1.77 or later'', if this is true, ships attempting to dock here will collide with the dock if <code>allow_docking</code> is false. If it is false, ships attempting to dock here will be docked with the station anyway. Defaults to false. (and always false in 1.76). Ignored for non-docks.<br />
|-<br />
| '''dock_label''' || string || ''In Oolite 1.77 or later'', the name given to the dock by traffic control (overrides the display_name of the dock subentity). Defaults to "the docking bay", and ignored for non-docks. In Oolite 1.76 or earlier the concept of dock names is meaningless.<br />
|}<br />
See [[Multiple Docks]] for more information on dock subentities and stations with more than one dock in Oolite 1.77 or later.<br />
<br />
{| class="wikitable" border="1" cellpadding="3" cellspacing="0" style="width:100%"<br />
|+ Subentity definition properties for ball turrets<br />
! Name !! Type !! Description<br />
|-<br />
| '''fire_rate''' || number || Interval between shots in seconds, for '''ball_turret''' subentities. Default: 0.5; minimum: 0.25.<br />
|-<br />
| '''weapon_range''' || number || Range for '''ball_turret''' subentities. Default: 6000; maximum 7200.<br />
|-<br />
| '''weapon_energy''' || number || Weapon energy for '''ball_turret''' subentities. Default: 25; maximum 100.<br />
|}<br />
See [http://aegidian.org/bb/viewtopic.php?f=4&t=12085 New range of turrets] for more information on turret subentities (2012 discussion about modelling, quaternions, ''etc'').<br />
<br />
{| class="wikitable" border="1" cellpadding="3" cellspacing="0" style="width:100%"<br />
|+ Subentity definition properties for flashers<br />
! Name !! Type !! Description<br />
|-<br />
| '''color''' || [[Materials in Oolite#Colour specifiers|colour specifier]] || Single colour for a flasher. Ignored for non-flashers. Default value: '''redColor'''.<br />
|-<br />
| '''colors''' || array || Array of colour specifiers for a flasher. Ignored for non-flashers. Before 1.74, only the first entry was used. If not present, see '''color'''. '''Note:''' like [[#laser_color|laser_color]], flasher colours must be “reasonably bright”.<br />
|-<br />
| '''frequency''' || number || Pulse rate for flashers, in cycles per second. Ignored for non-flashers. If 0, the flasher will have full intensity all the time in Oolite 1.74 and later, but half intensity in earlier releases. Default: 2.<br />
|-<br />
| '''initially_on''' || boolean || Specifiers whether a flasher is turned on when created. Ignored for non-flashers. Default: yes.<br />
|-<br />
| '''phase''' || number || Pulse phase offset for flashers, in seconds. Ignored for non-flashers. (This value is simply added to the time to get the pulse parameter.) Default: 0.<br />
|-<br />
| '''size''' || positive number || Diameter of a flasher in metres. Ignored for non-flashers. Default: 8. (Why 8? I don’t remember.)<br />
|-<br />
| '''bright_fraction''' || number || ''In Oolite 1.77 or later'', a number between 0 and 1 defining the proportion of the flasher's cycle that the flasher is bright for. Ignored for non-flashers. The default (which mimics the behaviour of all flashers in 1.76 or earlier) is 0.5.<br />
|-<br />
|}<br />
<br />
=== Old-style subentity definition ===<br />
Prior to Oolite 1.73, this was the the only way to specify a subentity.<br />
<br />
An old-style subentity definition is a string with eight items separated by spaces. In the description below, words in bold correspond to keys in [[#New-style subentity definition|new-style definitions]]. There are two variants:<br />
<br />
==== Flashers ====<br />
For a flasher, the entry takes the form:<br />
*FLASHER* x y z hue frequency phase size<br />
''*FLASHER*'' must be precisely the string “*FLASHER*”, in capitals.<br />
<br />
''x'', ''y'' and ''z'' form the '''position'''.<br />
<br />
''hue'' specifies the [http://en.wikipedia.org/wiki/HSL_and_HSV HSV] hue component (in degrees) of '''color'''. Saturation and value are always 1.<br />
<br />
'''frequency''', '''phase''' and '''size''' are the same as in the new-style format.<br />
<br />
'''initially_on''' is false.<br />
<br />
==== Other subentities ====<br />
For a non-flasher, the entry takes the form:<br />
key x y z qw qx qy qz<br />
''key'' corresponds to '''subentity_key'''.<br />
<br />
''x'', ''y'' and ''z'' form the '''position'''.<br />
<br />
''qw'', ''qx'', ''qy'' and ''qz'' form the '''orientation'''.<br />
<br />
'''type''' is ''standard'' unless the command ''initialiseTurret'' is present in the [[#setup_actions|setup_actions]] of the subentity, in which case it is ''ball_turret''. Note that the ''initialiseTurret'' no longer does anything when executed in a script; its presence is only used as an indicator to set the ''is_turret'' property when old-style definitions are translated. If ''initialiseTurret'' is inside a condition, it will be ignored. The ''initialiseTurret'' command is not required or useful for turrets which are only referenced using new-style subentity definitions.<br />
<br />
'''is_dock''' is implied by having the string “dock” (in lowercase) in the ''key''.<br />
<br />
=== Links ===<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=3&t=19091 How are subentity scripts supposed to work ?] (2017)<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=11716 Ball turrets] (2012)<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=7222 Docking bay problems] (2009) - covers a range of issues<br />
*Some OXP's with subentities: <br />
:Thargoids: [[Stellar Serpents OXP]] (2010), [[Animated Ships]]/Butterflies (2011), [[Aquatics]] (2011: Hammerhead bulk carrier & the Aqualina stations), [[WildShips OXP]] (2012-14: moving elevators inside station struts)<br />
:[[Z GrOovy HPC pack]] (2014 - bought equipment is visible on ship!); [[Scrub]] (2022 - rotating rings)<br />
<br />
== sun_glare_filter ==<br />
{{oolite-prop-added|1.79}}<br />
<br />
The default strength of the sun glare filter on this ship. A number between 0 and 1, with the default being 0 (no filter)<br />
<br />
"sun_glare_filter" = 0.3;<br />
<br />
== track_contacts ==<br />
Tracks the movement of the ship and sends a "CLOSE CONTACT" message to other ship AI's. It uses a time consuming tracking, so only set to true when actually used.<br />
<br />
Example:<br />
"track_contacts" = yes;<br />
<br />
== throw_sparks ==<br />
{{oolite-prop-added|1.73}}<br />
<br />
Each new ship should start in seemingly good operating condition, unless specifically told not to. (false by default)<br />
<br />
Example:<br />
"throw_sparks" = yes;<br />
<br />
== thrust ==<br />
Gives the entity an 'inertia' value, telling how fast it can increase or reduce speed (in m/s^2). 0 for rocks and cargo, 50 for a very fast ship, 100 for a station. When used with turrets it defines the turn rate in revolutions per second (with 1 being an average value). <br />
<br />
Example:<br />
"thrust" = "25"<br />
<br />
== unpiloted ==<br />
Used to designate items that will never have a pilot, thus never turn aggressive and never eject a pod. By chance factor, or true/false.<br><br />
It will not add a pilot when set to false, but will remove any existing pilot when set to true.<br />
commsMessages can only be broadcasted by piloted ships. Ships are by default piloted. cargo , rocks, missiles etc. are not piloted by default.<br />
<br />
Example:<br />
"unpiloted" = yes;<br />
<br />
== view_position_.. ==<br />
Sets the ship's 4 point-of-view positions in XYZ relative to the model.<br />
<br />
Example:<br />
"view_position_aft" = "0.0 5.0 -20.0";<br />
"view_position_forward" = "0.0 1.9375 5.0";<br />
"view_position_port" = "-11.85 2.825 -3.5";<br />
"view_position_starboard" = "11.85 2.825 -3.5";<br />
<br />
<br />
== weapon_energy ==<br />
This setting works differently depending on the type of entity it's used for:<br><br />
<br />
<b>Missiles.</b> Changes the damage inflicted by the missile. Any value accepted.<br />
<br />
<b>NPC ships.</b> Changes the forward weapon damage to a value different to the default one. Values higher than 50 will be clamped to 50. Does not change the value for aft weapons or subEntity weapons.<br><br />
<i><b>N.B.</b> It does not have any effect on player ships.</i><br />
<br />
<b>turrets.</b> Unused for turrets. Set the turret weapon_energy in its [[Shipdata.plist#New-style_subentity_definition|subEntity directory]].<br />
<br />
Default values are: WEAPON_PLASMA_CANNON = 6.0; WEAPON_PULSE_LASER = 15.0; WEAPON_BEAM_LASER = 15.0; WEAPON_MINING_LASER = 50.0; WEAPON_THARGOID_LASER = 12.5; WEAPON_MILITARY_LASER = 23.0<br />
<br />
Example:<br />
"weapon_energy" = "17";<br />
<br />
== weapon_facings ==<br />
{{oolite-prop-added|1.77}}<br />
<br />
What weapon mounts are available on the ship. This is a bit-mask, so pick the mounts and add the numbers:<br />
<br />
1 - Forward<br /><br />
2 - Aft<br /><br />
4 - Port<br /><br />
8 - Starboard<br /><br />
<br />
Example: <br /><br />
Fore and aft weapon mounts only.<br />
<key>weapon_facings</key><br />
<integer>3</integer><br />
<br />
If omitted, defaults to 15 (all mounts). If a player ship has this specified, and the same property specified in shipyard.plist, the shipyard.plist property takes precedence.<br />
<br />
Weapons assigned to a mount that the ship does not have will be ignored. Scripting cannot be used to add weapons to these mounts later, either.<br />
<br />
== weapon_mount_mode ==<br />
{{oolite-prop-added|1.83}}<br />
<br />
This controls how multiple weapon mount points work. It has three possible values:<br />
* '''"single"''': this is the default, and replicates 1.82 and previous behaviour. In this mode, <code>weapon_position_*</code> properties are simple vector expressions, and there is exactly one mount per facing.<br />
* '''"split"''': In this mode, <code>weapon_position_*</code> properties are an array of vector expressions. A weapon fitted to this facing has the same heat and energy cost as a single standard weapon, and the damage output is divided equally between all mount points. (in other words, the distinction is mainly cosmetic)<br />
* '''"multiply"''': In this mode, <code>weapon_position_*</code> properties are an array of vector expressions. A weapon fitted to this facing has N times the heat and energy cost as a single standard weapon, and each mount point does normal damage. (in other words, the weapon is fitted N times at once)<br />
<br />
For best results with AI and the "target reticle sensitive" feature, if there are several weapon positions in a (rough) line, the middle one should be listed first.<br />
<br />
See [https://github.com/OoliteProject/oolite/pull/161 this comment] or [[Multiple Lasers]] for examples.<br />
<br />
== weapon_offset ==<br />
Removed after version 1.65 (it was used to change the offsetpoint of a plasma cannon.)<br />
<br />
== weapon_position_.. ==<br />
Plots the 'gunmouth' points of the model's 4 potential lasers.<br />
<br />
In 1.82 and earlier, and in 1.83 and later in the "single" <code>weapon_mount_mode</code>, these are vector expressions.<br />
<br />
Example:<br />
"weapon_position_aft" = "0.0 -5.0 -20.0";<br />
"weapon_position_forward" = "0.0 0.0417 16.6667";<br />
"weapon_position_port" = "-13.75 -2.0625 -1.875";<br />
"weapon_position_starboard" = "13.75 -2.0625 -1.875";<br />
<br />
In 1.83 and later, with "split" or "multiply" <code>weapon_mount_mode</code>, these values are specified as arrays of vector expressions. For example:<br />
"weapon_position_forward" = ( "0.0 3.0 32.0" , "-15.0 0.0 32.0" , "15.0 0.0 32.0" )<br />
<br />
= Station keys=<br />
The following keys are only used by stations or carriers.<br />
<br />
== allegiance ==<br />
An advisory flag that informs AIs how they should expect to be treated near or when attempting to dock with this station. See [[Oolite_JavaScript_Reference:_Station#allegiance|station.allegiance]] for the allowable values. If this is not set, the game will guess based on other station properties.<br />
<br />
Example:<br />
allegiance = "neutral";<br />
<br />
== allows_auto_docking ==<br />
{{oolite-prop-added|1.75}}<br />
<br />
When set false for a station, this station will not allow the use of a docking computer. Default value in "yes".<br />
<br />
Example:<br />
allows_auto_docking = "no";<br />
<br />
== allows_fast_docking ==<br />
{{oolite-prop-added|1.75}}<br />
<br />
When set true for a station, this station will allow fast docking with the docking computer. Default value in "no".<br />
<br />
Example:<br />
allows_fast_docking = "yes";<br />
<br />
== defense_ship ==<br />
Gives an oportunity to designate a particular ship by name that will defend a station/carrier. See also [[Shipdata.plist#defense_ship_role|defense_ship_role]]<br />
<br />
Example:<br />
defense_ship" = "my_defender";<br />
<br />
== defense_ship_role ==<br />
Gives an oportunity to designate a particular (group of) ships that will defend a station/carrier. This has to be specified in the [[Shipdata.plist#roles|roles]] of the ship(s) that are assigned to defend. When launched from a carrier the scan_class becomes that of the carrier. Default role is "police"/"interceptor" for normal stations and "hermit-ship" for stations of CLASS_ROCK. Defense ships with scanclass police or with a hermit-ship role launch with a policeInterceptAI.plist. All other ships use the ai_type as defined in shipdata.plist. After launch, all primary roles are changed into: "defense_ship"<br />
<br />
Example:<br />
"defense_ship_role" = " carrier_defenders";<br />
<br />
== equipment_price_factor ==<br />
Equipment price mask for dockables.<br />
<br />
Example:<br />
"equipment_price_factor" = "4.5";<br />
<br />
== equivalent_tech_level ==<br />
Sets shipyard tech level for dockables, different to the local system tech_level. Default value is the system tech_level.<br />
<br />
Example:<br />
"equivalent_tech_level" = 1;<br />
<br />
== has_npc_traffic ==<br />
Determines if a station launches NPC traffic. Default is "yes" for stationary stations, and "no" for stations with a non-zero maximum speed. When set to "no" the station will not launch random ships as part of the main Oolite system repopulator (though OXP scripts may still launch ships from it).<br />
<br />
The type of traffic launched depends on the [[#allegiance|allegiance]] property of the station (which also determines what, if any, ships may try to dock at it).<br />
<br />
Example:<br />
"has_npc_traffic" = yes;<br />
<br />
== has_patrol_ships ==<br />
{{oolite-prop-added|1.75}}<br />
<br />
Determines if a station launches periodic patrol ships. Default is "no". Main stations always have patrol ships.<br />
<br />
Example:<br />
"has_patrol_ships" = yes;<br />
<br />
== has_shipyard ==<br />
Determines if a station or carrier has a shipyard. By chance factor as number between 0 and 1, but it can also be an array of conditions. Default is "no", but for main stations has_shipyard is always "yes". (Name is valid starting with Oolite 1.74. Before it was called "hasShipyard".)<br />
<br />
Example:<br />
"has_shipyard" = "0.75";<br />
<br />
or<br />
<br />
"has_shipyard" = (<br />
"systemGovernment_number morethan 3",<br />
"systemEconomy_number lessthan 4"<br />
)<br />
<br />
== interstellar_undocking ==<br />
{{oolite-prop-added|1.75}}<br />
<br />
When set true for a station, this station will allow interstellar docking and undocking in interstellar space. When set to "no" the player docks in nearby normal space. Default value in "no". <br />
<br />
Example:<br />
interstellar_undocking = "yes";<br />
<br />
==is_carrier==<br />
Added as a tag for making the model be considered a carrier or station. An alternative to including ''carrier'' or ''station'' among the [[Shipdata.plist#roles|roles]]. When present this key even overrules station/carrier settings with roles. (Name is valid starting with Oolite 1.74. Before it was called "isCarrier".)<br />
<br />
Example:<br />
"is_carrier" = yes;<br />
<br />
== market ==<br />
Key that sets the market for stations and carriers. The name defines the key in [[commodities.plist]] that will be used as local market. Without a market key, the stations primaryRole is used as market. Added with test release 1.74 and no longer used in 1.81 or later, where it is replaced by the market_* properties below.<br />
<br />
Example:<br />
"market" = "none";<br />
<br />
== market_broadcast ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
If this is enabled the station's market will appear on the F8 screen if the player is in flight and has the station targeted. The default is enabled. This is ignored (and always true) if the station is the main station.<br />
<br />
"market_broadcast" = no;<br />
<br />
== market_capacity ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
The capacity in units per trade good of the station market. If omitted, the default market capacity of 127 units will be used. This is ignored if the station is the main station as it will use the system market, not its own.<br />
<br />
"market_capacity" = 31;<br />
<br />
== market_definition ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
An array of [[trade-goods.plist#Secondary_Market_Definitions|secondary market rules]] which modify some or all of the price, quantity, capacity and legal status of a good relative to the primary system market. This is ignored if the station is the main station as it will use the system market, not its own.<br />
<br />
"market_definition" = (<br />
{<br />
// export cheap clothes<br />
"type" = "class";<br />
"name" = "oolite-wearable";<br />
"price_multiplier" = 0.8;<br />
"price_randomiser" = 0.1;<br />
"quantity_multiplier" = 3.5;<br />
"quantity_randomiser" = 3.0;<br />
}, <br />
{<br />
// not really interested in other goods<br />
"type" = "default";<br />
"price_multiplier" = 0.55;<br />
"price_randomiser" = 0.25;<br />
"quantity_multiplier" = 0.0;<br />
"capacity" = 3;<br />
}<br />
);<br />
<br />
If the capacity set by a rule is larger than the market_capacity of the station, the market_capacity of the station is used instead.<br />
<br />
A blank array<br />
"market_definition" = ();<br />
will give a market identical to the primary system market.<br />
<br />
If this key is omitted, the station will have no market. This is roughly equivalent to<br />
"market_definition" = (<br />
{<br />
"type" = "default";<br />
"price_multiplier" = 0;<br />
"quantity_multiplier" = 0;<br />
"capacity" = 0;<br />
}<br />
);<br />
<br />
== market_monitored ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
If this is true, the market is subject to Cooperative law for the import and export of trade goods, and the player will gain the usual bounties for smuggling contraband. The default value is no. This is ignored (and effectively always true) if the station is the main station.<br />
<br />
market_monitored = yes;<br />
<br />
== market_script ==<br />
{{oolite-prop-added|1.81}}<br />
<br />
Allows a [[Oolite Market Scripts|market script]] to be used to modify trade prices. This overrides market_definition, if it is present.<br />
<br />
market_script = "myoxp_marketchanges.js";<br />
<br />
== max_defense_ships ==<br />
Designates how many ships a dockable entity (station, carrier) can launch in defense. Default value is 3. See also [[Station Ships]]<br />
<br />
Example:<br />
"max_defense_ships" = "10";<br />
<br />
== max_police ==<br />
Designates how many police or patrol ships a dockable entity (station, carrier) can launch. Default value is 8. See also [[Station Ships]]<br />
<br />
Example:<br />
"max_police " = "10";<br />
<br />
== max_scavengers ==<br />
Designates how many scavengers or miners a dockable entity (station, carrier) can launch. Default value is 3. See also [[Station Ships]]<br />
<br />
Example:<br />
"max_scavengers" = "10";<br />
<br />
== port_dimensions ==<br />
Defines the size of the docking port and takes 3 numbers, separated by "x". This key is generally of little use and can be skipped as it becomes overwritten by the actual size of the bounding box of the dock subentity when a correct dock subentity is defined.<br />
<br />
Example:<br />
"port_dimensions" = "65x30x500";<br />
<br />
Size of Oolites main-station dock is: 64.00 x 192.00 x 250.00 while the dimension of a rock-hermit dock is: 138.001 x 138.001 x 250.12 (W x H x L)<br><br />
These sizes may be relevant for ship dimensions as since Oolite 1.75 ships must fit in these docks to be allowed docking or launching.<br />
<br />
== port_radius ==<br />
Defines the size of the docking port radius. Or more precise, this is the distance from the station centre to the port location. Default value is 500. This key is generally of little use and can be skipped as it will be overwritten by the real position of the dock subentity.<br />
<br />
Example:<br />
"port_radius" = "500";<br />
<br />
== requires_docking_clearance ==<br />
Sets the requirement for docking clearance. Default is "no". See also [[Oolite_Docking_Clearance_Protocol_%28v1.72_or_later%29|DockingClearance]]<br />
<br />
Example:<br />
"requires_docking_clearance" = yes;<br />
<br />
==rotating==<br />
Given to a station when rotation is desired. Default is "no".<br />
<br />
Example:<br />
"rotating" = yes;<br />
<br />
== station_roll ==<br />
{{oolite-prop-added|1.74.2}}<br />
<br />
Determines the rotation speed of a station. Default value is determined by the systemwide station_roll in planetInfo.plist. If that is not defined, the default is 0.4. Negative values are also possible for a rotation in the other direction.<br />
<br />
'''Note''': unlike the other turn rate properties, for historical reasons <code>station_roll</code> is measured in right-angles/second, ''not'' radians/second.<br />
<br />
Example:<br />
"station_roll" = "-1.5"<br />
<br />
==tunnel_corners==<br />
{{oolite-prop-added|1.75}}<br />
<br />
Defines the number of corners in the docking tunnel. Ranges from 4 to 128. Default is "4".<br />
<br />
Example:<br />
"tunnel_corners" = 6;<br />
<br />
==tunnel_start_angle==<br />
{{oolite-prop-added|1.75}}<br />
<br />
Defines the position of the first corner of the docking tunnel in degrees. 0 means the first corner is straight up. Default is "45".<br />
<br />
Example:<br />
"tunnel_start_angle" = 0;<br />
<br />
==tunnel_aspect_ratio==<br />
Defines the proportion of the tunnel’s width to its height. Default is "2.67".<br />
<br />
Example:<br />
"tunnel_aspect_ratio" = 1;<br />
<br />
----<br />
= Links =<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=6232 understanding shipdata.plist] (2009)<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=4&t=3355 Orientation Issues] (Asteroid turns 180°, and want it to face planet, 2007)<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=20959 Empty System] (Removing stations and rock hermits from a system, 2021)<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=6&t=4729 Changing compass values of ships (from white to red)] (Hiding ships on the scanner, 2008)<br />
<br />
<br />
[[Category:Oolite]]<br />
[[Category:Oolite scripting]]</div>Hiranhttps://wiki.alioth.net/index.php?title=OXP_howto&diff=80593OXP howto2024-01-04T16:01:29Z<p>Hiran: /* Cookbook */</p>
<hr />
<div>:''Shortcut: EW:OXP and EW:HOWDS redirect here''</br><br />
[[Image:oolite-oxp-icon.png|100px|right|OXP icon]]<br />
==Overview==<br />
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 first appearances, there is no way to tell what is inside, as it's merely a folder with the added extension '''.oxp'''.<br />
Oolite Version 1.79 onwards supports also compressed files in ZIP format with extension '''.oxz'''. <br />
<br />
To learn starting with a non-compressed version have a look at [[OXP_tutorial]].<br />
<br />
{{QuoteText|Text=It's worth saying I think that compared with a lot of game addon architectures, the OXP architecture as designed by Giles is already very good at avoiding conflicts compared with a lot of other games<br />
- you can save your game, add, remove and upgrade lots of OXPs, load your game, and have it work<br />
- you can do this repeatedly, while incrementally upgrading the core game, for years<br />
- as a player you basically never have to care about load order; as an OXP developer, rarely<br />
<br />
It's also worth noting that a lot of types of OXP conflicts are inevitable due to resource conflicts - a planet can only have one diffuse map, a ship can only have one AI - or due to conceptual conflicts - OXP A removes all stations from a system; OXP B expects the player to dock there.|Source=([http://aegidian.org/bb/viewtopic.php?p=241733#p241733 Cim (3rd Lead Developer)])}}<br />
<br />
=== Oolite TR version ===<br />
The Oolite Developer Release/Test Release version is specially developed for testing out OXPs. It comes with a [[Debug OXP]]/Debug Console allowing one to spawn ships/station on demand, award oneself a test ship, detect the mass of another ship ''etc''.<br />
<br />
It is downloaded from the main Oolite website - currently http://www.oolite.space/download/<br />
<br />
== OXZ ==<br />
The new OXZ distribution format is strongly recommended. It makes version control and distribution just so much easier.<br />
<br />
To make an OXZ file, use a ZIP program to compress the contents of the OXP folder, so that the [[manifest.plist]] file is in the root of the ZIP file, and the folders (AI, Config, etc) are folders in the ZIP file. Then, rename the ZIP file so that its extension is '''.oxz'''. To inspect an OXZ file, open it with your ZIP program.<br />
<br />
Here is a sample: [[Media:X.0.1.oxz]] - just rename all "X" within to the title of your idea and put your name into the author fields. <br />
<br />
You can use [http://www.ghisler.com/download.htm Total Commander] or [http://en.wikipedia.org/wiki/Krusader Krusader] to edit files within '''.oxz''' directly, without unpacking.<br />
<br />
For more details read [http://aegidian.org/bb/viewtopic.php?f=4&t=16688 The All-in-One Guide to OXZ Packaging and Distribution].<br />
<br />
=== Creating an .oxz on an AppleMac ===<br />
When you compress the files/folders on the AppleMac to create the .oxz ''do not'' select them with your mouse! This way lies misery!<br />
<br />
Rather, ensure the relevant files/folders are inside one overall folder. Then, use '''command-a''' to select all the ''contents'' of this overall folder and then select '''compress''' from the file menu on the finder's menu bar. Finally, rename your newly-created .zip file as an .oxz<br />
<br />
==Structure==<br />
Inside the '''.oxp''' folder, or the '''.oxz''' file, it will at least contain a folder (Config, AIs, Models, Textures, etc...) that holds scripts, plists or other things like textures or models. It is down to the goal of the [[OXP]], which ways to combine elements to the OXP's contents. To get a feeling for it, simply take a look in other oxps. (If they are in .oxz format, any normal unzip program can inspect their contents - many will even let you edit the contents without having to unzip and rezip the file)<br />
<br />
The structure for OXPs:<br />
AddOns (folder)<br />
-.oxp (folder) - Holds requires.plist, manifest.plist and the other folders<br />
--> AIs (folder) - Holds AI plists<br />
--> Config (folder) - Holds all other plists<br />
--> Images (folder) - Holds background images<br />
--> Models (folder) - Holds the .dat files<br />
--> Music (folder) - Surprise - holds music files<br />
--> Scenarios (folder) - Holds new game scenarios (v1.79)<br />
--> Scripts (folder) - Holds scripts (worldScripts and shipScripts)<br />
--> Shaders (folder) - Holds Vertex and Fragment shaders (v1.69)<br />
--> Sounds (folder) - Holds sound files<br />
--> Textures (folder) - Holds models textures<br />
--> [[info.plist]] (file)<br />
--> [[manifest.plist]] (file) <br />
<br />
If the OXP is in the uncompressed OXP folder format, the .oxp folder must contain a [[requires.plist]] file. If it is in the compressed OXZ single-file format, it must contain a [[manifest.plist]] file.<br />
<br />
===AIs===<br />
The folder named AIs contains any AI.plist additions the OXP might use. <br />
<br />
* [[OXP howto AI|Making Oolite AI]]<br />
<br />
In Oolite 1.79 AIs may be written in Javascript using .js files in this folder. A helper library is provided to make writing complex JS AIs simpler.<br />
<br />
* [[Oolite PriorityAI Documentation]]<br />
* [[Oolite PriorityAI Tutorial]]<br />
<br />
===Config===<br />
All plist files except for those introducing new AIs, ''[[requires.plist]]'', ''[[manifest.plist]]'' or ''[[info.plist]]'', belong in Config.<br />
<br />
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. <br />
<br />
* [[OXP howto plist|Making Oolite plists]]<br />
<br><br />
This folder contains [[Property lists]] such as:<br />
<br />
* ''[[characters.plist]]'' that adds non-player characters to Oolite.<br />
* ''[[commodities.plist]]'' that contains information for each commodity in a market in 1.80 or earlier<br />
* ''[[crosshairs.plist]]'' that contains the look for your weapons (v1.73).<br />
* ''[[customsounds.plist]]'' that contains references to ingame used sounds.<br />
* ''[[descriptions.plist]]'' that adds vocabulary to Oolite texts.<br />
* ''[[effectdata.plist]]'' defines custom visual effects (v1.77).<br />
* ''[[equipment.plist]]'' lists upgrades available from the Shipyard.<br />
* ''[[explosions.plist]]'' customises things blowing up (v1.81)<br />
* ''[[global-settings.plist]]'' sets a few miscellaneous universal settings (v1.81)<br />
* ''[[gui-settings.plist]]'' settings for reformatting the GUI screens (v1.81)<br />
* ''[[hud.plist]]'' and ''[[hud.plist|hud-small.plist]]'' that allows for changes or a radically new ''Head-Up Display''.<br />
* ''[[illegal_goods.plist]]'' that contains a list of banned/forbidden items in 1.80 or earlier. GalCop has an eye on that.<br />
* ''[[Oolite_Keyboard_Controls|keyconfig.plist]]'' that allows for changes of the keymapping.<br />
* ''[[missiontext.plist]]'' contains texts for the mission screens.<br />
* ''[[OXPMessages.plist]]'' adds warnings to testversions of an oxp.<br />
* ''[[pirate-victim-roles.plist]]'' that defines which roles should act as traders. (deprecated in v1.79)<br />
* ''[[planetinfo.plist]]'' that plots system specific changes from the default. May also contain ''script actions''.<br />
* ''[[role-categories.plist]]'' for specifying groups of roles with similar properties (v1.79)<br />
* ''[[scenarios.plist]]'' lists the starting scenarios in the Scenarios folder (v1.79).<br />
* ''[[screenbackgrounds.plist]]'' that contains references to background images (v1.74).<br />
* ''[[Scripting Oolite with JavaScript|script.js]]'' is the successor of [[script.plist]] in JavaScript. It will be loaded in preference to script.plist if both exist and offers more flexibility and improved possibilities.<br />
* ''[[shipdata.plist]]'' that introduces any new entity (ships, stations, objects etc.) to Oolite.<br />
* ''[[shipdata-overrides.plist]]'' that selectively can replace shipentries in other shipdata.plists<br />
* ''[[shiplibrary.plist]]'' that gives information for the ship description library viewable from the startup screen (v1.79)<br />
* ''[[shipyard.plist]]'' that introduces new ships available for player purchase.<br />
* ''[[shipyard-overrides.plist]]'' that selectively can replace shipentries in other shipyard.plists<br />
* ''[[speech_pronunciation_guide.plist]]'' is another of the other custom methods.<br />
* ''[[trade-goods.plist]]'' defines trade goods in 1.81 and later<br />
* ''[[world-scripts.plist]]'' that contains a list of scripts (if more than one worldScript should be used).<br />
<br />
Deprecated:<br />
* ''[[demoships.plist]]'' that selects demoships to show on startup (replaced - approximately - by shiplibrary.plist in 1.79 and later)<br />
* ''[[script.plist]]'' to handle conditional ''script actions''. (deprecated)<br />
* ''[[script.oos]]'' was briefly introduced during 1.70 development but is now deprecated in favour of JS.)<br />
<br />
=== Models===<br />
Oolite models need to be in an Oolite specific format using the the '''.dat''' file extension. 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 - case sensitive!!!<br />
<br />
* [[OXP howto model|Making Oolite models]] - tutorials for Wings3D & Blender, notes on sub-entities, links ''etc''.<br />
* [http://aegidian.org/bb/viewtopic.php?f=4&t=12165 Model Converter utilities] (2012-17)<br />
* Video: [http://aegidian.org/bb/viewtopic.php?f=4&t=16123 From scratch to Mamba in under an hour] ([[Dertien]], 2013)<br />
<br />
===Scripts===<br />
Scripts are in text format. In this folder you can put both js scripts as well as legacy scripts. New OXPs should only use Javascript here.<br />
* [[Scripting_Oolite_with_JavaScript|Scripting Oolite with Javascript]]<br />
* [[Oolite_JavaScript_object_model|Scripting reference]]<br />
<br />
===Textures===<br />
<br />
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. <br />
<br />
* [[OXP howto texture|Making Oolite textures]]<br />
<br />
* [[Smivs'_texture_tutorial|Smivs' guide to making Oolite textures]]<br />
<br />
* [[Texturing tips and tricks by Theta Seven]]<br />
<br />
Viewing a specific texture and / or model in Oolite.<br />
"I made one. How do I proof it?"<br />
<br />
* [[Viewing a Texture or Model]]<br />
<br />
==OXP Verifier==<br />
<br />
Oolite has what amounts to a spell checker for shipdata.plist and some other plists, called the OXP verifier. It does not work with OXZ's. The verifier detects unknown keys or wrong use of keys ''etc''. It can currently only be invoked from the command line. <br />
<br />
On Windows or Linux: <br />
Code: <br />
'''oolite.app/oolite --verify-oxp <path to OXP> '''<br />
<br />
On Mac OS X: <br />
Code: <br />
'''Oolite.app/Contents/MacOS/Oolite --verify-oxp <path to OXP>'''<br />
<br />
Most Mac users will not be familiar with using the command line. Look inside your application folder for a '''utilities folder'''. Inside that you will find a program called [https://en.wikipedia.org/wiki/Terminal_(macOS) Terminal]. <br><br />
Run it to open a terminal window. Now drop the oolite application on that window. That will generate the path to oolite on the command line. Delete the trailing space and paste the following text - including the trailing space- behind it: "/Contents/MacOS/Oolite --verify-oxp ". Now drop the oxp you want to verify on the window. That will again create the path to the oxp behind the last entry. <br><br />
When you select the window and hit the <return> key, the verification will start. It should now open the Console program, showing the results. <br><br />
'''Console''' is a log viewer developed by Apple Inc. and included with macOS, also in the utilities folder. It allows users to search through all of the system's logged messages, and can alert the user when certain types of messages are logged. The Console is generally used for troubleshooting when there is a problem with the computer. MacOS itself, as well as any applications that are used, send a constant stream of messages to the system in the form of log files. The console allows you to read the system logs, help find certain ones, monitor them, and filter their contents. See [[Debug OXP]] for more information.<br />
<br />
There is a lengthy file - '''OXP verifier design.txt''' tucked inside your Oolite installation with more information about it<br />
<br />
Note that it is possible to [http://www.aegidian.org/bb/viewtopic.php?f=2&t=21443 obtain graphical output] from Graphviz for OXP Verifier.<br />
<br />
=== Verifier BB threads ===<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=8&t=13400 plist Editor Pro for Windows] (2013 - full of relevant Red Herrings)<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=3&t=16865 lite --verify-oxp fails when path has spaces in it] (2014)<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=4&t=21359 OXP Develoopment and Plist files] (2023 - quick introduction)<br />
<br />
=== Correcting with plutil (Apple Macintosh Terminal utility) ===<br />
Since a very small mistake is enough to stop a .plist from being accepted, it's important to be exact about every letter and sign. The Mac Terminal utility has a very practical tool for catching parser errors. After opening Terminal, simply type plutil, add one space, and drag and drop the plist in question onto the Terminal window. This will cause the 'address' of the plist to be shown. Hit return, and Terminal will reveal whether or not the plist is OK. If it's not, you might be given a clue to what is wrong, and the line number of the error - or just a general note that "Unexpected character { at line 1"!<br />
<br />
==Unique names==<br />
On loading the oxps, Oolite will add all files in the AIs, Models, Sound and Scripts folders in one big folder for its own use. That means that all files need unique names or one file will overwrite another with the same name. Files in Textures are not pre-loaded, but when looking for a specific texture Oolite looks in all Texture folders until it finds a texture file with a matching name. If another oxp contains a texture with identical name, Oolite could use that texture.<br />
<br />
For the Config folder something similar happens. Here the plists all have the same name, but the content of all oxp plists is loaded per type in one big plist. e.g. all individual shipData.plist go in one big shipData.plist file. And within a single plist, all keys must be unique. When two plists use the same key, the later loading key will overwrite the former.<br />
<br />
Generally it is a good habit to precede your chosen filenames and keys with the name of the oxp, or another unique prefix, to make sure the names stay unique and no other oxp will use the same names.<br />
<br />
==Scripting with JavaScript==<br />
Older OXPs (from [[User:Aegidian|Aegidian]]'s day were written in Legacy Script: see [[Methods]]. Modern OXPs are written in JavaScript. Specifically oolite.jsVersion 185, an Oolite specific variant of '''ECMAv5'''. It is the same Spidermonkey version that Firefox 4 shipped with many years ago, but it is a special build for Oolite. This is the version that we have almost always had and it has not changed between versions of the game. [http://aegidian.org/bb/viewtopic.php?p=256623#p256623 It is unlikely to change] in the future.<br />
<br />
JavaScript is the preferred scripting interface for worldScripts and shipScripts. The legacy scripting interface (see [[script.plist]]) still works, but is not supported. See [[Scripting Oolite with JavaScript]] for more information.<br />
<br />
Note that most of the [[Legacy Scripting]] still works perfectly well (XML & OpenStep)!<br />
<br />
==Hidden settings==<br />
There are several [[Hidden_Settings_in_Oolite]] that make life for an oxp creator easier. One of them is the setting '''always-flush-cache'''. It makes every startup a bit slower, but it prevents Oolite working with cached data instead of your newly changed file. For someone that only does occasional oxp changes it will be enough to flush the cache by holding the shift key when starting Oolite but if you are writing oxps, this is the way to prevent frustrations.<br />
<br />
==Cookbook==<br />
* How to add dials to a HUD: http://aegidian.org/bb/viewtopic.php?p=290352#p290352<br />
* How to limit a station's shipyard to only offer a defined set of ships: http://aegidian.org/bb/viewtopic.php?p=293174#p293174<br />
<br />
== See Also ==<br />
*'''Context''': [http://www.aegidian.org/bb/viewtopic.php?p=275434#p275434 What can OXP's ''not'' change?] (2021)<br />
*It is often helpful to dip one's toes (claws?) in the water by experimenting with tweaking oxp's first: see [[How to tweak OXZ's]]<br />
*[[:Category:Oolite scripting]]<br />
*[[Javascript Operators]]<br />
*[[:Category:Oolite JavaScript Reference]]<br />
*[[:Category:Oolite Development]]<br />
*[[User:Montana05|Montana05]] recommends https://www.w3schools.com/js/js_array_sort.asp for better knowledge of the js on Oolite.<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=12149 OXP Development Best Practices] (2012-7)<br />
*Some older oxp's are written in [[Legacy Scripting]]<br />
*[https://github.com/OoliteProject/oolite/find/master Github] vanilla game code repository - the resources section at the bottom of the page contains possibly useful parts of vanilla game coding, with occasional annotations.<br />
=== Tools ===<br />
*[[List of software]] that is helpful for creating OXPs (eg. editorial packages for javascript or 3D model creators)<br />
*[[List of Planets used in OXPs]] for planets already used by other OXPs. Helps authors avoid overlapping with or breaking other OXPs.<br />
*[[OXP_howto_Game_Balance|OXP howto Game Balance]] to avoid conflicts from accidental gameplay changes.<br />
*[[Long Range Scanner]] is an OXP which allows you to jump around the star system to objects you have placed there - or to jump around within the galaxy. A "cheat" for players, but a useful tool for some OXP designers.<br />
<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=13422 What Tools Are Good For Windows OXP Programming?] (2013)<br />
<br />
==== Tutorials for Tools ====<br />
*[https://web.archive.org/web/20050317033938/http://oolite.aegidian.org/cyoship/ Oolite Tutorial - Meshwork Shipbuilding (OSX only)] via WayBack Machine<br />
*[https://web.archive.org/web/20060621211940/http://oolite.aegidian.org/cyoship2/ Oolite Tutorial - Wings 3D Shipbuilding (Cross-platform)] via WayBack Machine<br />
<br />
=== OXP tutorials ===<br />
Oolite changes affecting different varieties of OXPs happened with v.1.76 (2011), v.1.80 (2014) & v1.82 (2015).<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=4&t=20937 MasterClass: How to OXP (updating SoThisTC)] by [[User:Spara|Spara]] who teaches computing in Helsinki! (2021)<br />
*[https://archive.org/details/GettingStartedWithOoliteOXZDevelopment Getting started with OXZ Development] ''An .odt for Open Office'': By Bugbear (2012). 2 example OXPs: a pirate-ridden solar systems warning tool & Witchspace Blockades [http://www.aegidian.org/bb/viewtopic.php?f=4&t=17731 BB Thread (2015)]<br />
*[[OXP_tutorial|OXP Tutorial]] creating a new spaceship - and then tweaking it in different ways (2007-13)<br />
*[[OXP howto dockable stations|Creating a dockable station]] (2009-10)<br />
*[[User:Shipbuilder|Shipbuilder]] wrote a Shaders tutorial with resource packs (2013)<br />
<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=18837 OXP Performance] BB thread (mostly 2017-8): improving your OXP (speed, ''etc'')<br />
<br />
*[https://aegidian.org/bb/viewtopic.php?f=4&t=18284 The bare minimum for a game-recognizable ship OXP] (thread: 2016)<br />
*[http://www.aegidian.org/bb/viewtopic.php?f=4&t=14135 How to make a simple OXP?] (thread: 2013) 3 OXPs - pop-up message at docking, set only Pythons for sale at Lave shipyard, create a new ship. <br />
<br />
*[[Escape Pod Locator OXP]] has notes on programming on the bottom of the page regarding beacon transmission & location<br />
<br />
=== Helpful OXPs for your OXP===<br />
There are a number of OXPs which have been specifically written to allow your OXP to use them:<br />
*[[Library OXP|Library]]: a collection of useful snippets and helpers. Its main purpose is to simplify or unify some common tasks used by OXPers. <br />
:*It can add dynamic maps, music & animation. <br />
:*It adds a Personal Assistant Device for the player with details of people met, medals awarded, Guild rankings, ''etc''.<br />
:*It allows in-game configuration of an oxp by the player.<br />
:*Add-on modules allows inspection of models and materials for creation of ship & station oxps.<br />
*[[GalCop Missions]] introduces many new pieces of equipment with wide varieties of use (Cargo Stoppers, Ejection Dampers, Range Finders, Solar Radiation Disrupter Missiles, Seismic Resonance Scanners, Patient Transport Modules ''etc''). It can also help with managing missions.<br />
*[[Diplomancy]] can be used to make states of war impact personally on the player<br />
*[[System Data Config]] helps re-organise the F7 screen to squeeze more information onto it<br />
<br />
==== While docked/stations ====<br />
*[[HD Backgrounds]] can provide a High Definition screenshot of a station lobby or other such for interaction with the player<br />
*[[BGS]] can help organise a customised docking or launching sequence (see the [[Riredi OXP]] or the [[Kiota Stations]]).<br />
*[[GNN]] can broadcast your news alerts (see how [[Diplomancy]] uses it for war & peace declarations). GNN also contains '''PhraseGen''' which can be used for randomizing text descriptions.<br />
*[[Station Validator]] will remember that a station has been destroyed and stop Oolite automatically replacing it on the next visit to the system<br />
*[[Station Dock Control]] can help interraction with other ships docked at the station<br />
*[[Bulletin Board System]] can help manage interractions at the station<br />
*[[Email System OXP]] can also help manage interractions at the station<br />
*[[Ship Storage Helper]] allows storage of the player's ship whilst doing other things (such as flying another ship!)<br />
*[[Equipment Storage OXP]] allows storage of equipment/goods whilst doing other things<br />
*[[Ship's Library]] allows reading documents with illustrations while docked (see the included Ship's Manual)<br />
*[[Station Options]] allows complex configurations of equipment, but could potentially also be used for managing dialogue with NPCs<br />
*[[Life in the Frontier]] was being expanded to cover more stations (Dodo/Ico/Rock Hermits and potentially OXP stations), but is currently mothballed. <br />
<br />
==== In-flight ====<br />
*[[MFD - Broadcast Comms]] can be used for in-flight interaction with NPC's<br />
*[[Bigships]] can be used to help with the AI for massive space ships which cannot dock at orbital stations<br />
*[[Montanas Resource Pack 01]] contains a number of resources for use (treasures, containers, escape/survival equipment)<br />
*[[Star System Lane Indicator]] - the older version contains a very graphical dynamic display (does not function properly, but boy! does it look good!)<br />
*[[SOTL Exploration]] contains exploration equipment and a non-automatic hyperspace jump<br />
*[[SOTL Altmap]] contains different politics, markets and NPCs with Torus Drives.<br />
*[[Resistance Commander]] & [[EscortDeck]] contain mechanisms for "managing" allied ships.<br />
<br />
==== Planet Surfaces ====<br />
*[[Planetfall OXP]] allows landing on the planet (used by [[Feudal States]] for access to the Royal Court, and by [[Astronaut]] for space-jumping)<br />
*[[Lave is Earth 8k]] contains night-time city lighting<br />
<br />
=== Packaging and distribution ===<br />
*[http://aegidian.org/bb/viewtopic.php?f=4&t=16688 The All-in-One Guide to OXZ Packaging and Distribution].<br />
::And see [http://aegidian.org/bb/viewtopic.php?p=279034#p279034 this post] for AppleMac issues with the above.<br />
* Cim created [https://github.com/cim--/oxp-build-scripts some scripts to ease packaging] a project.<br />
*[[OXP Distribution]] The All-in-One Guide to OXP Packaging and Distribution (and [[OXP_standards]] for advice on which ways of doing things are supported and which are not).<br />
* Since the domain change to [https://oolite.space] the distribution of expansions has changed slightly. The new version is still subject to discussions and might change again. Here is a [[Publishing Procedure Comparison]].<br />
*[[Gameplay_and_Balance_Indicator|Gameplay Balance Indicator]] and [[OXP_Levelindicators|Difficulty Indicator]]. Add these to your wiki page to show effects on Game Balance and the Difficulty Level of your OXP/OXZ. The '''first''' indicates the impact on play (equipment making the game easier/more difficult), the '''second''' indicates the suggested [[Elite Rating]] needed to attempt the mission/defeat the ship ''etc''.<br />
<br />
[[Category:Oolite]]<br />
[[Category:Oolite scripting]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Galactic_Hyperdrive&diff=80584Galactic Hyperdrive2024-01-02T22:55:16Z<p>Hiran: /* Overview */</p>
<hr />
<div>One shot hyperdrive engines, for jumping to the next of [[The Eight|the eight]] galaxies.<br />
{{Infobox EquipStats Oolite| title = Vanilla game<br />
|image = <br />
|equipName = Galactic Hyperdrive<br />
|equipCost = 5,000₢<br />
|equipTL = 11<br />
}}<br />
<br />
== Overview ==<br />
Trigger the galactic hyperdrive by pressing <font color="Red">'''g'''</font> on your astrogation console. It catapults you to the next galaxy.<br />
<br />
A Galactic Hyperdrive doesn't use any fuel (all the fuel is contained in the device) and can be purchased for 5,000₢ at any planet with a tech level of 11 or over.<br />
<br />
Due to difficulties in long-range communication, criminal records are not shared between the galactic sectors: so regardless of your criminal rating, you come out legally Clean when you emerge into a new galaxy. Thus the Galactic Hyperdrive is sometimes used by mobsterpilots to escape prosecution.<br />
<br />
Depending on which additional OXPs you have installed, the behaviour of the galactic hyperdrive can be slightly different. Read on.<br />
<br />
[[File:Cb68h001 cl galdrive.png|thumb|80px|right|[[Coluber HUD CH01|Coluber HUD]]: Galactic Hyperdrive icon]]<br />
----<br />
<br />
== OXPs ==<br />
There are several relevant OXPs. Some merely tweak the vanilla game Galactic Hyperdrive. But GalDrivePod is an additional hyperdrive which is loaded on a missile pylon and needs priming just like any other piece of OXP equipment.<br />
<br />
*[[Galactic Hyperdrive OXP]] allows a choice of destinations in the next Galaxy<br />
*[[Galactic Hyperdrive Reimagined]] makes the vanilla game equipment rechargeable by sunskimming, and the Galactic Hyperjump take time (several days) which can wreck some mission OXPs.<br />
*[[Galactic Misjump OXP]] - what happens if you misjump between galaxies? By [[User:Cim|Cim]].<br />
*[[GalDrivePod]] provides a (second?) pylon-mounted Galactic Drive allowing one to leave the "unreachable areas" in the next galaxy (by [[User:Smivs|Smivs]]).<br />
<br />
=== Also relevant ===<br />
*[[Galaxy Names OXP]] by [[User:Wildeblood|Wildeblood]] - also downloadable through the in-game [[Expansions Manager]] (an Ambience .oxp): puts the galaxy names onto the F6 screen.<br />
*[[Bounty System]] prevents loss of "illegal" status on jumping to the next galaxy.<br />
*Note that various OXP stations will have a different TL to that of the main station and may possibly stock the Galactic Hyperdrive - but the price may be rather different!<br />
<br />
----<br />
== Classic Elite ==<br />
For the [[BBC_Micro| BBC Micro]] version of Classic Elite, the Galactic Hyperdrive entry points are ''' fixed ''' for each galaxy:<br />
<br />
# '''Usle''', (85,99) TL: 9, Confederacy, '' purchase next Galactic Hyperdrive at Enonla.''<br />
# '''Ororra''', (96,95) TL : 4, Confederacy, '' purchase next Galactic Hyperdrive at Resori.''<br />
# '''Xeines''', (90,111) TL : 3, Anarchy, '' purchase next Galactic Hyperdrive at Alace.''<br />
# '''Soenisti''', (99,103) TL : 4, Anarchy, '' purchase next Galactic Hyperdrive at Biante.''<br />
# '''Ceinan''', (105,93) TL : 7, Confederacy, '' purchase next Galactic Hyperdrive at Sotidi.''<br />
# '''Intisoar''', (99,102) TL : 7, Confederacy<br />
# '''Beritere''', (106,95) TL : 3, Anarchy<br />
# '''Cecees''', (94,96) TL : 8, Anarchy<br />
<br />
The system chosen is the one encompassed by the smallest rectangular search box centred on (96,96). The choice of '96' was driven by the desire to generate an '0x60' Op-code in this vicinity of the 6502 machine code, an [http://www.atarimax.com/jindroush.atari.org/aopc.html#RTS RTS] command that could be reached by nearby branch instructions. The observation that the system government is either Anarchy or Confederacy appears unrelated as the connection to the coordinate calculations is indirect.<br />
<br />
=== Ian Bell & Classic Elite variants ===<br />
In a text-only trading version of Elite coded by [http://www.iancgbell.clara.net/elite/text/index.htm Ian Bell] in C around 1999 the ''planet number'' is conserved across a galactic hyperdrive jump. These are listed in the [[Oolite planet list|planet list]] but are not visible to the player. This choice gives the appearance of random, but predictable, entry points (determined by your departure planet). This choice allows access to the large isolated island of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]] and is responsible for the the ancient warning "If you leave Galaxy 7 from [[Sector7/Rainza|Rainza]] you will end up at [[Sector8/Oresrati|Oresrati]] in Galaxy 8". <br />
<br />
This choice was implemented in some post-classic versions of Elite, including [[ArcElite]].<br />
<br />
----<br />
== Theory ==<br />
Why only one-way travel? See the discussion of Cody's theory in [[The Eight]].<br />
<br />
Some older fanfiction/technobabble on Elite's engine drives can be found [https://web.archive.org/web/20101008045456/http://elite.hughesd.co.uk/ here] .<br />
<br />
[[Category:Classic]]<br />
<br />
{{NavBox - Oolite Equipment}} [[Category:Equipment]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Galactic_Hyperdrive&diff=80583Galactic Hyperdrive2024-01-02T22:48:36Z<p>Hiran: /* Overview */</p>
<hr />
<div>One shot hyperdrive engines, for jumping to the next of [[The Eight|the eight]] galaxies.<br />
{{Infobox EquipStats Oolite| title = Vanilla game<br />
|image = <br />
|equipName = Galactic Hyperdrive<br />
|equipCost = 5,000₢<br />
|equipTL = 11<br />
}}<br />
<br />
== Overview ==<br />
Trigger the galactic hyperdrive by pressing <font color="Red">'''g'''</font> on your astrogation console.<br />
<br />
A Galactic Hyperdrive doesn't use any fuel (all the fuel is contained in the device) and can be purchased for 5,000₢ at any planet with a tech level of 11 or over.<br />
<br />
Due to difficulties in long-range communication, criminal records are not shared between the galactic sectors: so regardless of your criminal rating, you come out legally Clean when you emerge into a new galaxy. Thus the Galactic Hyperdrive is sometimes used by mobsterpilots to escape prosecution.<br />
<br />
Depending on which additional OXPs you have installed, the behaviour of the galactic hyperdrive can be slightly different. Read on.<br />
<br />
[[File:Cb68h001 cl galdrive.png|thumb|80px|right|[[Coluber HUD CH01|Coluber HUD]]: Galactic Hyperdrive icon]]<br />
----<br />
<br />
== OXPs ==<br />
There are several relevant OXPs. Some merely tweak the vanilla game Galactic Hyperdrive. But GalDrivePod is an additional hyperdrive which is loaded on a missile pylon and needs priming just like any other piece of OXP equipment.<br />
<br />
*[[Galactic Hyperdrive OXP]] allows a choice of destinations in the next Galaxy<br />
*[[Galactic Hyperdrive Reimagined]] makes the vanilla game equipment rechargeable by sunskimming, and the Galactic Hyperjump take time (several days) which can wreck some mission OXPs.<br />
*[[Galactic Misjump OXP]] - what happens if you misjump between galaxies? By [[User:Cim|Cim]].<br />
*[[GalDrivePod]] provides a (second?) pylon-mounted Galactic Drive allowing one to leave the "unreachable areas" in the next galaxy (by [[User:Smivs|Smivs]]).<br />
<br />
=== Also relevant ===<br />
*[[Galaxy Names OXP]] by [[User:Wildeblood|Wildeblood]] - also downloadable through the in-game [[Expansions Manager]] (an Ambience .oxp): puts the galaxy names onto the F6 screen.<br />
*[[Bounty System]] prevents loss of "illegal" status on jumping to the next galaxy.<br />
*Note that various OXP stations will have a different TL to that of the main station and may possibly stock the Galactic Hyperdrive - but the price may be rather different!<br />
<br />
----<br />
== Classic Elite ==<br />
For the [[BBC_Micro| BBC Micro]] version of Classic Elite, the Galactic Hyperdrive entry points are ''' fixed ''' for each galaxy:<br />
<br />
# '''Usle''', (85,99) TL: 9, Confederacy, '' purchase next Galactic Hyperdrive at Enonla.''<br />
# '''Ororra''', (96,95) TL : 4, Confederacy, '' purchase next Galactic Hyperdrive at Resori.''<br />
# '''Xeines''', (90,111) TL : 3, Anarchy, '' purchase next Galactic Hyperdrive at Alace.''<br />
# '''Soenisti''', (99,103) TL : 4, Anarchy, '' purchase next Galactic Hyperdrive at Biante.''<br />
# '''Ceinan''', (105,93) TL : 7, Confederacy, '' purchase next Galactic Hyperdrive at Sotidi.''<br />
# '''Intisoar''', (99,102) TL : 7, Confederacy<br />
# '''Beritere''', (106,95) TL : 3, Anarchy<br />
# '''Cecees''', (94,96) TL : 8, Anarchy<br />
<br />
The system chosen is the one encompassed by the smallest rectangular search box centred on (96,96). The choice of '96' was driven by the desire to generate an '0x60' Op-code in this vicinity of the 6502 machine code, an [http://www.atarimax.com/jindroush.atari.org/aopc.html#RTS RTS] command that could be reached by nearby branch instructions. The observation that the system government is either Anarchy or Confederacy appears unrelated as the connection to the coordinate calculations is indirect.<br />
<br />
=== Ian Bell & Classic Elite variants ===<br />
In a text-only trading version of Elite coded by [http://www.iancgbell.clara.net/elite/text/index.htm Ian Bell] in C around 1999 the ''planet number'' is conserved across a galactic hyperdrive jump. These are listed in the [[Oolite planet list|planet list]] but are not visible to the player. This choice gives the appearance of random, but predictable, entry points (determined by your departure planet). This choice allows access to the large isolated island of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]] and is responsible for the the ancient warning "If you leave Galaxy 7 from [[Sector7/Rainza|Rainza]] you will end up at [[Sector8/Oresrati|Oresrati]] in Galaxy 8". <br />
<br />
This choice was implemented in some post-classic versions of Elite, including [[ArcElite]].<br />
<br />
----<br />
== Theory ==<br />
Why only one-way travel? See the discussion of Cody's theory in [[The Eight]].<br />
<br />
Some older fanfiction/technobabble on Elite's engine drives can be found [https://web.archive.org/web/20101008045456/http://elite.hughesd.co.uk/ here] .<br />
<br />
[[Category:Classic]]<br />
<br />
{{NavBox - Oolite Equipment}} [[Category:Equipment]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Galactic_Hyperdrive&diff=80575Galactic Hyperdrive2023-12-31T22:38:32Z<p>Hiran: /* Operation */</p>
<hr />
<div>One shot hyperdrive engines, used to make one jump to another level galaxy of which there are [[eight]].<br />
{{Infobox EquipStats Oolite| title = Vanilla game<br />
|image = <br />
|equipName = Galactic Hyperdrive<br />
|equipCost = 5,000₢<br />
|equipTL = 11<br />
}}<br />
<br />
== Overview ==<br />
A Galactic Hyperdrive doesn't use any fuel (all the fuel is contained in the device) and can be purchased for 5,000₢ at any planet with a tech level of 11 or over. Due to difficulties in long-range communication, criminal records are not shared between the galactic sectors: so regardless of your criminal rating, you come out Clean when you emerge into a new galaxy. Thus the Galactic Hyperdrive is sometimes used by mobsterpilots to escape prosecution.<br />
<br />
[[File:Cb68h001 cl galdrive.png|thumb|80px|right|[[Coluber HUD CH01|Coluber HUD]]: Galactic Hyperdrive icon]]<br />
----<br />
== Operation ==<br />
<br />
This need not work in the current version:<br />
''After purchasing a Galactic Hyperdrive, use the prime-able equipment (N-key) menu while in flight to activate its programmer. Then press the n key repeatedly to cycle through a menu of reachable systems in the next galactic sector.'' <br />
<br />
Once you have selected your preferred destination, press g to initiate a galactic hyperspace jump.<br />
<br />
To view a chart of the galactic sector that a very long range 'galactic' jump will take you to, press F6 while on the long-range chart screen.<br />
* F6 - Short range chart<br />
* F6, F6 - Galactic chart<br />
* F6, F6, F6 - Next Galactic chart<br />
<br />
When a galactic jump is made the Naval Hyperdrive Programmer, if fitted, is automatically put into safe stowage. This has two beneficial effects: the programmer cannot be damaged in combat while stowed, and the prime-able equipment menu is not cluttered with an impractical item. When a new Galactic Hyperdrive is purchased, the programmer is automatically brought out of stowage.<br />
<br />
== Oolite ==<br />
In [[Oolite]], the Galactic Hyperdrive warps you to the nearest chart location that matches your previous one. That means, if you are at the corner of the galaxy in Galaxy 1, you will end up at the same corner of Galaxy 2 after the jump. If your arrival would leave you in a very isolated region (for example systems like Oresrati in [[Oolite_planet_list/Galaxy_8|Galaxy 8]], the lower left hand cluster of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]], the two islands of isolated systems in [[Oolite_planet_list/Galaxy_6|Galaxy 6]] etc.) then your arrival point is moved to the main cluster. <br />
<br />
Recent java script additions allow other choices for OXP writers. Key "galactic_hyperspace_behaviour" equals one of <br />
"BEHAVIOUR_STANDARD"<br />
"BEHAVIOUR_ALL_SYSTEMS_REACHABLE"<br />
"BEHAVIOUR_FIXED_COORDINATES"<br />
<br />
For "all systems reachable" the default relocation behaviour of Oolite is disabled and your arrival system will not be changed if you arrived in an isolated region of the chart.<br />
<br />
For "fixed coordinates" the engine will look in planetinfo.plist for a key named "galactic_hyperspace_fixed_coords", from which it will read the actual coordinates that will be used as arrival point in the next galaxy. If none is found, then coordinates (96,96) will be used, as in the Classic version.<br />
<br />
[[File:Galdrive-progammer 1.png|thumb|320px|right|Galactic Hyperdrive OXP allows a choice of destinations in the next galaxy]]<br />
=== OXPs ===<br />
*[[Galaxy Names OXP]] by [[User:Wildeblood|Wildeblood]] - also downloadable through the in-game [[Expansions Manager]] (an Ambience .oxp): puts the galaxy names onto the F6 screen.<br />
*[[GalDrivePod]] provides a (second?) pylon-mounted Galactic Drive allowing one to leave the "unreachable areas" in the next galaxy (by [[User:Smivs|Smivs]]).<br />
*[[Galactic Hyperdrive OXP]] allows a choice of destinations in the next Galaxy<br />
*[[Galactic Misjump OXP]] - what happens if you misjump between galaxies? By [[User:Cim|Cim]].<br />
<br />
----<br />
== Classic Elite ==<br />
For the [[BBC_Micro| BBC Micro]] version of Classic Elite, the Galactic Hyperdrive entry points are ''' fixed ''' for each galaxy:<br />
<br />
# '''Usle''', (85,99) TL: 9, Confederacy, '' purchase next Galactic Hyperdrive at Enonla.''<br />
# '''Ororra''', (96,95) TL : 4, Confederacy, '' purchase next Galactic Hyperdrive at Resori.''<br />
# '''Xeines''', (90,111) TL : 3, Anarchy, '' purchase next Galactic Hyperdrive at Alace.''<br />
# '''Soenisti''', (99,103) TL : 4, Anarchy, '' purchase next Galactic Hyperdrive at Biante.''<br />
# '''Ceinan''', (105,93) TL : 7, Confederacy, '' purchase next Galactic Hyperdrive at Sotidi.''<br />
# '''Intisoar''', (99,102) TL : 7, Confederacy<br />
# '''Beritere''', (106,95) TL : 3, Anarchy<br />
# '''Cecees''', (94,96) TL : 8, Anarchy<br />
<br />
The system chosen is the one encompassed by the smallest rectangular search box centred on (96,96). The choice of '96' was driven by the desire to generate an '0x60' Op-code in this vicinity of the 6502 machine code, an [http://www.atarimax.com/jindroush.atari.org/aopc.html#RTS RTS] command that could be reached by nearby branch instructions. The observation that the system government is either Anarchy or Confederacy appears unrelated as the connection to the coordinate calculations is indirect.<br />
<br />
=== Ian Bell & Classic Elite variants ===<br />
In a text-only trading version of Elite coded by [http://www.iancgbell.clara.net/elite/text/index.htm Ian Bell] in C around 1999 the ''planet number'' is conserved across a galactic hyperdrive jump. These are listed in the [[Oolite planet list|planet list]] but are not visible to the player. This choice gives the appearance of random, but predictable, entry points (determined by your departure planet). This choice allows access to the large isolated island of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]] and is responsible for the the ancient warning "If you leave Galaxy 7 from [[Sector7/Rainza|Rainza]] you will end up at [[Sector8/Oresrati|Oresrati]] in Galaxy 8". <br />
<br />
This choice was implemented in some post-classic versions of Elite, including [[ArcElite]].<br />
<br />
----<br />
== Theory ==<br />
Why only one-way travel? See the discussion of Cody's theory in [[The Eight]].<br />
<br />
Some older fanfiction/technobabble on Elite's engine drives can be found [https://web.archive.org/web/20101008045456/http://elite.hughesd.co.uk/ here] .<br />
<br />
[[Category:Classic]]<br />
<br />
{{NavBox - Oolite Equipment}} [[Category:Equipment]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Galactic_Hyperdrive&diff=80574Galactic Hyperdrive2023-12-31T22:23:03Z<p>Hiran: /* Operation */</p>
<hr />
<div>One shot hyperdrive engines, used to make one jump to another level galaxy of which there are [[eight]].<br />
{{Infobox EquipStats Oolite| title = Vanilla game<br />
|image = <br />
|equipName = Galactic Hyperdrive<br />
|equipCost = 5,000₢<br />
|equipTL = 11<br />
}}<br />
<br />
== Overview ==<br />
A Galactic Hyperdrive doesn't use any fuel (all the fuel is contained in the device) and can be purchased for 5,000₢ at any planet with a tech level of 11 or over. Due to difficulties in long-range communication, criminal records are not shared between the galactic sectors: so regardless of your criminal rating, you come out Clean when you emerge into a new galaxy. Thus the Galactic Hyperdrive is sometimes used by mobsterpilots to escape prosecution.<br />
<br />
[[File:Cb68h001 cl galdrive.png|thumb|80px|right|[[Coluber HUD CH01|Coluber HUD]]: Galactic Hyperdrive icon]]<br />
----<br />
== Operation ==<br />
<br />
After purchasing a Galactic Hyperdrive, use the prime-able equipment (N-key) menu while in flight to activate its programmer. Then press the n key repeatedly to cycle through a menu of reachable systems in the next galactic sector. Once you have selected your preferred destination, press g to initiate a galactic hyperspace jump.<br />
<br />
To view a chart of the galactic sector that a very long range 'galactic' jump will take you to, press F6 while on the long-range chart screen.<br />
* F6 - Short range chart<br />
* F6, F6 - Galactic chart<br />
* F6, F6, F6 - Next Galactic chart<br />
<br />
When a galactic jump is made the Naval Hyperdrive Programmer, if fitted, is automatically put into safe stowage. This has two beneficial effects: the programmer cannot be damaged in combat while stowed, and the prime-able equipment menu is not cluttered with an impractical item. When a new Galactic Hyperdrive is purchased, the programmer is automatically brought out of stowage.<br />
<br />
== Oolite ==<br />
In [[Oolite]], the Galactic Hyperdrive warps you to the nearest chart location that matches your previous one. That means, if you are at the corner of the galaxy in Galaxy 1, you will end up at the same corner of Galaxy 2 after the jump. If your arrival would leave you in a very isolated region (for example systems like Oresrati in [[Oolite_planet_list/Galaxy_8|Galaxy 8]], the lower left hand cluster of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]], the two islands of isolated systems in [[Oolite_planet_list/Galaxy_6|Galaxy 6]] etc.) then your arrival point is moved to the main cluster. <br />
<br />
Recent java script additions allow other choices for OXP writers. Key "galactic_hyperspace_behaviour" equals one of <br />
"BEHAVIOUR_STANDARD"<br />
"BEHAVIOUR_ALL_SYSTEMS_REACHABLE"<br />
"BEHAVIOUR_FIXED_COORDINATES"<br />
<br />
For "all systems reachable" the default relocation behaviour of Oolite is disabled and your arrival system will not be changed if you arrived in an isolated region of the chart.<br />
<br />
For "fixed coordinates" the engine will look in planetinfo.plist for a key named "galactic_hyperspace_fixed_coords", from which it will read the actual coordinates that will be used as arrival point in the next galaxy. If none is found, then coordinates (96,96) will be used, as in the Classic version.<br />
<br />
[[File:Galdrive-progammer 1.png|thumb|320px|right|Galactic Hyperdrive OXP allows a choice of destinations in the next galaxy]]<br />
=== OXPs ===<br />
*[[Galaxy Names OXP]] by [[User:Wildeblood|Wildeblood]] - also downloadable through the in-game [[Expansions Manager]] (an Ambience .oxp): puts the galaxy names onto the F6 screen.<br />
*[[GalDrivePod]] provides a (second?) pylon-mounted Galactic Drive allowing one to leave the "unreachable areas" in the next galaxy (by [[User:Smivs|Smivs]]).<br />
*[[Galactic Hyperdrive OXP]] allows a choice of destinations in the next Galaxy<br />
*[[Galactic Misjump OXP]] - what happens if you misjump between galaxies? By [[User:Cim|Cim]].<br />
<br />
----<br />
== Classic Elite ==<br />
For the [[BBC_Micro| BBC Micro]] version of Classic Elite, the Galactic Hyperdrive entry points are ''' fixed ''' for each galaxy:<br />
<br />
# '''Usle''', (85,99) TL: 9, Confederacy, '' purchase next Galactic Hyperdrive at Enonla.''<br />
# '''Ororra''', (96,95) TL : 4, Confederacy, '' purchase next Galactic Hyperdrive at Resori.''<br />
# '''Xeines''', (90,111) TL : 3, Anarchy, '' purchase next Galactic Hyperdrive at Alace.''<br />
# '''Soenisti''', (99,103) TL : 4, Anarchy, '' purchase next Galactic Hyperdrive at Biante.''<br />
# '''Ceinan''', (105,93) TL : 7, Confederacy, '' purchase next Galactic Hyperdrive at Sotidi.''<br />
# '''Intisoar''', (99,102) TL : 7, Confederacy<br />
# '''Beritere''', (106,95) TL : 3, Anarchy<br />
# '''Cecees''', (94,96) TL : 8, Anarchy<br />
<br />
The system chosen is the one encompassed by the smallest rectangular search box centred on (96,96). The choice of '96' was driven by the desire to generate an '0x60' Op-code in this vicinity of the 6502 machine code, an [http://www.atarimax.com/jindroush.atari.org/aopc.html#RTS RTS] command that could be reached by nearby branch instructions. The observation that the system government is either Anarchy or Confederacy appears unrelated as the connection to the coordinate calculations is indirect.<br />
<br />
=== Ian Bell & Classic Elite variants ===<br />
In a text-only trading version of Elite coded by [http://www.iancgbell.clara.net/elite/text/index.htm Ian Bell] in C around 1999 the ''planet number'' is conserved across a galactic hyperdrive jump. These are listed in the [[Oolite planet list|planet list]] but are not visible to the player. This choice gives the appearance of random, but predictable, entry points (determined by your departure planet). This choice allows access to the large isolated island of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]] and is responsible for the the ancient warning "If you leave Galaxy 7 from [[Sector7/Rainza|Rainza]] you will end up at [[Sector8/Oresrati|Oresrati]] in Galaxy 8". <br />
<br />
This choice was implemented in some post-classic versions of Elite, including [[ArcElite]].<br />
<br />
----<br />
== Theory ==<br />
Why only one-way travel? See the discussion of Cody's theory in [[The Eight]].<br />
<br />
Some older fanfiction/technobabble on Elite's engine drives can be found [https://web.archive.org/web/20101008045456/http://elite.hughesd.co.uk/ here] .<br />
<br />
[[Category:Classic]]<br />
<br />
{{NavBox - Oolite Equipment}} [[Category:Equipment]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Galactic_Hyperdrive&diff=80573Galactic Hyperdrive2023-12-31T22:22:36Z<p>Hiran: /* Operation */</p>
<hr />
<div>One shot hyperdrive engines, used to make one jump to another level galaxy of which there are [[eight]].<br />
{{Infobox EquipStats Oolite| title = Vanilla game<br />
|image = <br />
|equipName = Galactic Hyperdrive<br />
|equipCost = 5,000₢<br />
|equipTL = 11<br />
}}<br />
<br />
== Overview ==<br />
A Galactic Hyperdrive doesn't use any fuel (all the fuel is contained in the device) and can be purchased for 5,000₢ at any planet with a tech level of 11 or over. Due to difficulties in long-range communication, criminal records are not shared between the galactic sectors: so regardless of your criminal rating, you come out Clean when you emerge into a new galaxy. Thus the Galactic Hyperdrive is sometimes used by mobsterpilots to escape prosecution.<br />
<br />
[[File:Cb68h001 cl galdrive.png|thumb|80px|right|[[Coluber HUD CH01|Coluber HUD]]: Galactic Hyperdrive icon]]<br />
----<br />
== Operation ==<br />
<br />
After purchasing a Galactic Hyperdrive, use the prime-able equipment (N-key) menu while in flight to activate its programmer. Then press the n key repeatedly to cycle through a menu of reachable systems in the next galactic sector. Once you have selected your preferred destination, press g to initiate a galactic hyperspace jump.<br />
<br />
To view a chart of the galactic sector that a very long range 'galactic' jump will take you to, press F6 while on the long-range chart screen.<br />
F6 - Short range chart<br />
F6, F6 - Galactic chart<br />
F6, F6, F6 - Next Galactic chart<br />
<br />
When a galactic jump is made the Naval Hyperdrive Programmer, if fitted, is automatically put into safe stowage. This has two beneficial effects: the programmer cannot be damaged in combat while stowed, and the prime-able equipment menu is not cluttered with an impractical item. When a new Galactic Hyperdrive is purchased, the programmer is automatically brought out of stowage.<br />
<br />
== Oolite ==<br />
In [[Oolite]], the Galactic Hyperdrive warps you to the nearest chart location that matches your previous one. That means, if you are at the corner of the galaxy in Galaxy 1, you will end up at the same corner of Galaxy 2 after the jump. If your arrival would leave you in a very isolated region (for example systems like Oresrati in [[Oolite_planet_list/Galaxy_8|Galaxy 8]], the lower left hand cluster of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]], the two islands of isolated systems in [[Oolite_planet_list/Galaxy_6|Galaxy 6]] etc.) then your arrival point is moved to the main cluster. <br />
<br />
Recent java script additions allow other choices for OXP writers. Key "galactic_hyperspace_behaviour" equals one of <br />
"BEHAVIOUR_STANDARD"<br />
"BEHAVIOUR_ALL_SYSTEMS_REACHABLE"<br />
"BEHAVIOUR_FIXED_COORDINATES"<br />
<br />
For "all systems reachable" the default relocation behaviour of Oolite is disabled and your arrival system will not be changed if you arrived in an isolated region of the chart.<br />
<br />
For "fixed coordinates" the engine will look in planetinfo.plist for a key named "galactic_hyperspace_fixed_coords", from which it will read the actual coordinates that will be used as arrival point in the next galaxy. If none is found, then coordinates (96,96) will be used, as in the Classic version.<br />
<br />
[[File:Galdrive-progammer 1.png|thumb|320px|right|Galactic Hyperdrive OXP allows a choice of destinations in the next galaxy]]<br />
=== OXPs ===<br />
*[[Galaxy Names OXP]] by [[User:Wildeblood|Wildeblood]] - also downloadable through the in-game [[Expansions Manager]] (an Ambience .oxp): puts the galaxy names onto the F6 screen.<br />
*[[GalDrivePod]] provides a (second?) pylon-mounted Galactic Drive allowing one to leave the "unreachable areas" in the next galaxy (by [[User:Smivs|Smivs]]).<br />
*[[Galactic Hyperdrive OXP]] allows a choice of destinations in the next Galaxy<br />
*[[Galactic Misjump OXP]] - what happens if you misjump between galaxies? By [[User:Cim|Cim]].<br />
<br />
----<br />
== Classic Elite ==<br />
For the [[BBC_Micro| BBC Micro]] version of Classic Elite, the Galactic Hyperdrive entry points are ''' fixed ''' for each galaxy:<br />
<br />
# '''Usle''', (85,99) TL: 9, Confederacy, '' purchase next Galactic Hyperdrive at Enonla.''<br />
# '''Ororra''', (96,95) TL : 4, Confederacy, '' purchase next Galactic Hyperdrive at Resori.''<br />
# '''Xeines''', (90,111) TL : 3, Anarchy, '' purchase next Galactic Hyperdrive at Alace.''<br />
# '''Soenisti''', (99,103) TL : 4, Anarchy, '' purchase next Galactic Hyperdrive at Biante.''<br />
# '''Ceinan''', (105,93) TL : 7, Confederacy, '' purchase next Galactic Hyperdrive at Sotidi.''<br />
# '''Intisoar''', (99,102) TL : 7, Confederacy<br />
# '''Beritere''', (106,95) TL : 3, Anarchy<br />
# '''Cecees''', (94,96) TL : 8, Anarchy<br />
<br />
The system chosen is the one encompassed by the smallest rectangular search box centred on (96,96). The choice of '96' was driven by the desire to generate an '0x60' Op-code in this vicinity of the 6502 machine code, an [http://www.atarimax.com/jindroush.atari.org/aopc.html#RTS RTS] command that could be reached by nearby branch instructions. The observation that the system government is either Anarchy or Confederacy appears unrelated as the connection to the coordinate calculations is indirect.<br />
<br />
=== Ian Bell & Classic Elite variants ===<br />
In a text-only trading version of Elite coded by [http://www.iancgbell.clara.net/elite/text/index.htm Ian Bell] in C around 1999 the ''planet number'' is conserved across a galactic hyperdrive jump. These are listed in the [[Oolite planet list|planet list]] but are not visible to the player. This choice gives the appearance of random, but predictable, entry points (determined by your departure planet). This choice allows access to the large isolated island of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]] and is responsible for the the ancient warning "If you leave Galaxy 7 from [[Sector7/Rainza|Rainza]] you will end up at [[Sector8/Oresrati|Oresrati]] in Galaxy 8". <br />
<br />
This choice was implemented in some post-classic versions of Elite, including [[ArcElite]].<br />
<br />
----<br />
== Theory ==<br />
Why only one-way travel? See the discussion of Cody's theory in [[The Eight]].<br />
<br />
Some older fanfiction/technobabble on Elite's engine drives can be found [https://web.archive.org/web/20101008045456/http://elite.hughesd.co.uk/ here] .<br />
<br />
[[Category:Classic]]<br />
<br />
{{NavBox - Oolite Equipment}} [[Category:Equipment]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Galactic_Hyperdrive&diff=80572Galactic Hyperdrive2023-12-31T22:21:00Z<p>Hiran: /* Operation */</p>
<hr />
<div>One shot hyperdrive engines, used to make one jump to another level galaxy of which there are [[eight]].<br />
{{Infobox EquipStats Oolite| title = Vanilla game<br />
|image = <br />
|equipName = Galactic Hyperdrive<br />
|equipCost = 5,000₢<br />
|equipTL = 11<br />
}}<br />
<br />
== Overview ==<br />
A Galactic Hyperdrive doesn't use any fuel (all the fuel is contained in the device) and can be purchased for 5,000₢ at any planet with a tech level of 11 or over. Due to difficulties in long-range communication, criminal records are not shared between the galactic sectors: so regardless of your criminal rating, you come out Clean when you emerge into a new galaxy. Thus the Galactic Hyperdrive is sometimes used by mobsterpilots to escape prosecution.<br />
<br />
[[File:Cb68h001 cl galdrive.png|thumb|80px|right|[[Coluber HUD CH01|Coluber HUD]]: Galactic Hyperdrive icon]]<br />
----<br />
== Operation ==<br />
<br />
- Prime the equipment...<br />
- Trigger the equipment...<br />
<br />
== Oolite ==<br />
In [[Oolite]], the Galactic Hyperdrive warps you to the nearest chart location that matches your previous one. That means, if you are at the corner of the galaxy in Galaxy 1, you will end up at the same corner of Galaxy 2 after the jump. If your arrival would leave you in a very isolated region (for example systems like Oresrati in [[Oolite_planet_list/Galaxy_8|Galaxy 8]], the lower left hand cluster of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]], the two islands of isolated systems in [[Oolite_planet_list/Galaxy_6|Galaxy 6]] etc.) then your arrival point is moved to the main cluster. <br />
<br />
Recent java script additions allow other choices for OXP writers. Key "galactic_hyperspace_behaviour" equals one of <br />
"BEHAVIOUR_STANDARD"<br />
"BEHAVIOUR_ALL_SYSTEMS_REACHABLE"<br />
"BEHAVIOUR_FIXED_COORDINATES"<br />
<br />
For "all systems reachable" the default relocation behaviour of Oolite is disabled and your arrival system will not be changed if you arrived in an isolated region of the chart.<br />
<br />
For "fixed coordinates" the engine will look in planetinfo.plist for a key named "galactic_hyperspace_fixed_coords", from which it will read the actual coordinates that will be used as arrival point in the next galaxy. If none is found, then coordinates (96,96) will be used, as in the Classic version.<br />
<br />
[[File:Galdrive-progammer 1.png|thumb|320px|right|Galactic Hyperdrive OXP allows a choice of destinations in the next galaxy]]<br />
=== OXPs ===<br />
*[[Galaxy Names OXP]] by [[User:Wildeblood|Wildeblood]] - also downloadable through the in-game [[Expansions Manager]] (an Ambience .oxp): puts the galaxy names onto the F6 screen.<br />
*[[GalDrivePod]] provides a (second?) pylon-mounted Galactic Drive allowing one to leave the "unreachable areas" in the next galaxy (by [[User:Smivs|Smivs]]).<br />
*[[Galactic Hyperdrive OXP]] allows a choice of destinations in the next Galaxy<br />
*[[Galactic Misjump OXP]] - what happens if you misjump between galaxies? By [[User:Cim|Cim]].<br />
<br />
----<br />
== Classic Elite ==<br />
For the [[BBC_Micro| BBC Micro]] version of Classic Elite, the Galactic Hyperdrive entry points are ''' fixed ''' for each galaxy:<br />
<br />
# '''Usle''', (85,99) TL: 9, Confederacy, '' purchase next Galactic Hyperdrive at Enonla.''<br />
# '''Ororra''', (96,95) TL : 4, Confederacy, '' purchase next Galactic Hyperdrive at Resori.''<br />
# '''Xeines''', (90,111) TL : 3, Anarchy, '' purchase next Galactic Hyperdrive at Alace.''<br />
# '''Soenisti''', (99,103) TL : 4, Anarchy, '' purchase next Galactic Hyperdrive at Biante.''<br />
# '''Ceinan''', (105,93) TL : 7, Confederacy, '' purchase next Galactic Hyperdrive at Sotidi.''<br />
# '''Intisoar''', (99,102) TL : 7, Confederacy<br />
# '''Beritere''', (106,95) TL : 3, Anarchy<br />
# '''Cecees''', (94,96) TL : 8, Anarchy<br />
<br />
The system chosen is the one encompassed by the smallest rectangular search box centred on (96,96). The choice of '96' was driven by the desire to generate an '0x60' Op-code in this vicinity of the 6502 machine code, an [http://www.atarimax.com/jindroush.atari.org/aopc.html#RTS RTS] command that could be reached by nearby branch instructions. The observation that the system government is either Anarchy or Confederacy appears unrelated as the connection to the coordinate calculations is indirect.<br />
<br />
=== Ian Bell & Classic Elite variants ===<br />
In a text-only trading version of Elite coded by [http://www.iancgbell.clara.net/elite/text/index.htm Ian Bell] in C around 1999 the ''planet number'' is conserved across a galactic hyperdrive jump. These are listed in the [[Oolite planet list|planet list]] but are not visible to the player. This choice gives the appearance of random, but predictable, entry points (determined by your departure planet). This choice allows access to the large isolated island of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]] and is responsible for the the ancient warning "If you leave Galaxy 7 from [[Sector7/Rainza|Rainza]] you will end up at [[Sector8/Oresrati|Oresrati]] in Galaxy 8". <br />
<br />
This choice was implemented in some post-classic versions of Elite, including [[ArcElite]].<br />
<br />
----<br />
== Theory ==<br />
Why only one-way travel? See the discussion of Cody's theory in [[The Eight]].<br />
<br />
Some older fanfiction/technobabble on Elite's engine drives can be found [https://web.archive.org/web/20101008045456/http://elite.hughesd.co.uk/ here] .<br />
<br />
[[Category:Classic]]<br />
<br />
{{NavBox - Oolite Equipment}} [[Category:Equipment]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Galactic_Hyperdrive&diff=80571Galactic Hyperdrive2023-12-31T22:20:46Z<p>Hiran: </p>
<hr />
<div>One shot hyperdrive engines, used to make one jump to another level galaxy of which there are [[eight]].<br />
{{Infobox EquipStats Oolite| title = Vanilla game<br />
|image = <br />
|equipName = Galactic Hyperdrive<br />
|equipCost = 5,000₢<br />
|equipTL = 11<br />
}}<br />
<br />
== Overview ==<br />
A Galactic Hyperdrive doesn't use any fuel (all the fuel is contained in the device) and can be purchased for 5,000₢ at any planet with a tech level of 11 or over. Due to difficulties in long-range communication, criminal records are not shared between the galactic sectors: so regardless of your criminal rating, you come out Clean when you emerge into a new galaxy. Thus the Galactic Hyperdrive is sometimes used by mobsterpilots to escape prosecution.<br />
<br />
[[File:Cb68h001 cl galdrive.png|thumb|80px|right|[[Coluber HUD CH01|Coluber HUD]]: Galactic Hyperdrive icon]]<br />
----<br />
== Operation ==<br />
- Prime the equipment...<br />
- Trigger the equipment...<br />
<br />
== Oolite ==<br />
In [[Oolite]], the Galactic Hyperdrive warps you to the nearest chart location that matches your previous one. That means, if you are at the corner of the galaxy in Galaxy 1, you will end up at the same corner of Galaxy 2 after the jump. If your arrival would leave you in a very isolated region (for example systems like Oresrati in [[Oolite_planet_list/Galaxy_8|Galaxy 8]], the lower left hand cluster of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]], the two islands of isolated systems in [[Oolite_planet_list/Galaxy_6|Galaxy 6]] etc.) then your arrival point is moved to the main cluster. <br />
<br />
Recent java script additions allow other choices for OXP writers. Key "galactic_hyperspace_behaviour" equals one of <br />
"BEHAVIOUR_STANDARD"<br />
"BEHAVIOUR_ALL_SYSTEMS_REACHABLE"<br />
"BEHAVIOUR_FIXED_COORDINATES"<br />
<br />
For "all systems reachable" the default relocation behaviour of Oolite is disabled and your arrival system will not be changed if you arrived in an isolated region of the chart.<br />
<br />
For "fixed coordinates" the engine will look in planetinfo.plist for a key named "galactic_hyperspace_fixed_coords", from which it will read the actual coordinates that will be used as arrival point in the next galaxy. If none is found, then coordinates (96,96) will be used, as in the Classic version.<br />
<br />
[[File:Galdrive-progammer 1.png|thumb|320px|right|Galactic Hyperdrive OXP allows a choice of destinations in the next galaxy]]<br />
=== OXPs ===<br />
*[[Galaxy Names OXP]] by [[User:Wildeblood|Wildeblood]] - also downloadable through the in-game [[Expansions Manager]] (an Ambience .oxp): puts the galaxy names onto the F6 screen.<br />
*[[GalDrivePod]] provides a (second?) pylon-mounted Galactic Drive allowing one to leave the "unreachable areas" in the next galaxy (by [[User:Smivs|Smivs]]).<br />
*[[Galactic Hyperdrive OXP]] allows a choice of destinations in the next Galaxy<br />
*[[Galactic Misjump OXP]] - what happens if you misjump between galaxies? By [[User:Cim|Cim]].<br />
<br />
----<br />
== Classic Elite ==<br />
For the [[BBC_Micro| BBC Micro]] version of Classic Elite, the Galactic Hyperdrive entry points are ''' fixed ''' for each galaxy:<br />
<br />
# '''Usle''', (85,99) TL: 9, Confederacy, '' purchase next Galactic Hyperdrive at Enonla.''<br />
# '''Ororra''', (96,95) TL : 4, Confederacy, '' purchase next Galactic Hyperdrive at Resori.''<br />
# '''Xeines''', (90,111) TL : 3, Anarchy, '' purchase next Galactic Hyperdrive at Alace.''<br />
# '''Soenisti''', (99,103) TL : 4, Anarchy, '' purchase next Galactic Hyperdrive at Biante.''<br />
# '''Ceinan''', (105,93) TL : 7, Confederacy, '' purchase next Galactic Hyperdrive at Sotidi.''<br />
# '''Intisoar''', (99,102) TL : 7, Confederacy<br />
# '''Beritere''', (106,95) TL : 3, Anarchy<br />
# '''Cecees''', (94,96) TL : 8, Anarchy<br />
<br />
The system chosen is the one encompassed by the smallest rectangular search box centred on (96,96). The choice of '96' was driven by the desire to generate an '0x60' Op-code in this vicinity of the 6502 machine code, an [http://www.atarimax.com/jindroush.atari.org/aopc.html#RTS RTS] command that could be reached by nearby branch instructions. The observation that the system government is either Anarchy or Confederacy appears unrelated as the connection to the coordinate calculations is indirect.<br />
<br />
=== Ian Bell & Classic Elite variants ===<br />
In a text-only trading version of Elite coded by [http://www.iancgbell.clara.net/elite/text/index.htm Ian Bell] in C around 1999 the ''planet number'' is conserved across a galactic hyperdrive jump. These are listed in the [[Oolite planet list|planet list]] but are not visible to the player. This choice gives the appearance of random, but predictable, entry points (determined by your departure planet). This choice allows access to the large isolated island of systems in [[Oolite_planet_list/Galaxy_7|Galaxy 7]] and is responsible for the the ancient warning "If you leave Galaxy 7 from [[Sector7/Rainza|Rainza]] you will end up at [[Sector8/Oresrati|Oresrati]] in Galaxy 8". <br />
<br />
This choice was implemented in some post-classic versions of Elite, including [[ArcElite]].<br />
<br />
----<br />
== Theory ==<br />
Why only one-way travel? See the discussion of Cody's theory in [[The Eight]].<br />
<br />
Some older fanfiction/technobabble on Elite's engine drives can be found [https://web.archive.org/web/20101008045456/http://elite.hughesd.co.uk/ here] .<br />
<br />
[[Category:Classic]]<br />
<br />
{{NavBox - Oolite Equipment}} [[Category:Equipment]]</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80445AppleMac2023-12-21T19:40:13Z<p>Hiran: /* Solution 2: Configure Oolite to access the expansion catalog from the new URL */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 (and previous)==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Manage expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://www.oolite.space/#oxp.<br />
You can sort the list by clicking the column header and download it using the icon on the right.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names. And while we are at it, uninstall expansions by simply removing them from the directory.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]]). The file is in [[Property list]] format, which used to be human-readable but today is binary. <br />
<br />
While Oolite is not running, open a terminal window (command prompt) and run this command:<br />
defaults write org.aegidian.oolite oxz-index-url http://addons.oolite.space/api/1.0/overview<br />
<br />
On future startup the Oolite builtin expansion manager should find the correct index of expansions.<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MacOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*MacOS Version 11+ problem: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*AppleMac problems (Compilation, Game Sounds ''etc''.): [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20789 BB Index of AppleMac Issues] (2023)<br />
<br />
=== Techniques ===<br />
*[[Terminal Utility]] - an AppleMac utility useful for [[The Dark Side|dark-sided]] deeds of derring-do!<br />
<br />
=== Humour ===<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80436AppleMac2023-12-21T00:04:56Z<p>Hiran: /* Solution 1: Install expansions manually. It is effort but possible */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 (and previous)==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Manage expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://www.oolite.space/#oxp.<br />
You can sort the list by clicking the column header and download it using the icon on the right.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names. And while we are at it, uninstall expansions by simply removing them from the directory.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]]). The file is written in [[Property list]] format. <br />
<br />
While Oolite is not running, open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
Save the document. On future startup the Oolite builtin expansion manager should find the correct index of expansions.<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MacOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80435AppleMac2023-12-21T00:03:06Z<p>Hiran: /* Solution 1: Install expansions manually. It is effort but possible */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 (and previous)==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://www.oolite.space/#oxp.<br />
You can sort the list by clicking the column header and download it using the icon on the right.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]]). The file is written in [[Property list]] format. <br />
<br />
While Oolite is not running, open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
Save the document. On future startup the Oolite builtin expansion manager should find the correct index of expansions.<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MacOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80434AppleMac2023-12-20T23:57:01Z<p>Hiran: /* Solution 1: Install expansions manually. It is effort but possible */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 (and previous)==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://www.oolite.space/#oxp.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]]). The file is written in [[Property list]] format. <br />
<br />
While Oolite is not running, open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
Save the document. On future startup the Oolite builtin expansion manager should find the correct index of expansions.<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MacOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=Scripting_Oolite_with_JavaScript&diff=80432Scripting Oolite with JavaScript2023-12-20T23:18:30Z<p>Hiran: /* See Also */</p>
<hr />
<div>[[Oolite]] 1.68 and later supports scripts written in [http://en.wikipedia.org/wiki/ECMAScript ECMAScript] (more commonly known as [http://en.wikipedia.org/wiki/JavaScript JavaScript]) in addition to its traditional model based on [[property lists]]. This page provides an overview of how JavaScript is used in Oolite. The page [[Oolite JavaScript Reference: object model]] provides reference for Oolite-specific objects and methods. The page [[Oolite JavaScript Reference: World script event handlers]] provides reference for the event handlers Oolite supports. The language standards and some tutorials can be found through the Wiki links provided above. The announcement [http://aegidian.org/bb/viewtopic.php?p=130332#p130332 here] may be of use (scroll down to "Javascipt").<br />
<br />
== Using JavaScript ==<br />
<br />
Currently, JavaScript 6 is supported for “worldScripts”, that is, as a replacement for scripts in ''script.plist'' and shipScripts, that acts as expansion for the ships AI. While a ''script.plist'' file may contain any number of separate scripts, a single JavaScript file may contain only one script.<br />
<br />
If your OXP only uses one script, place a JavaScript file named ''script.js'' (or ''script.es'') in the OXP’s ''Config'' directory. If you wish to use multiple scripts, you may instead create file named ''world-scripts.plist'' in the ''Config'' directory. This [[property list]] file should consist of an array of worldScript names; the named scripts should exist in a directory named ''Scripts'' inside your OXP. As with most “atomic” files (files which cannot be merged), such script files must have a unique name to avoid conflicts with other OXPs. Using the [[world-scripts.plist]] method, you can combine JavaScript, plist and OOS scripts however you wish.<br />
<br />
Whereas plist scripts are based on polling – all scripts are run at semi-regular intervals, whether they need to be or not – scripts written in JavaScript are “event driven” – different functions, or ''event handlers'', in the script are called in response to state changes in the game, or when other events of interest happen. For instance, <code>willExitWitchSpace</code> is called just before player exits witchspace, and <code>alertConditionChanged</code> is called whenever the alert condition changes. <br />
<br />
See the [[Oolite JavaScript event handler reference|event handler reference]] for a full list of handlers and when Oolite will call them.<br />
<br />
<br />
=== script.js File Template ===<br />
<br />
Copy and paste this template into a file called script.js in the OXP Config directory. Ensure you change at least the Name value. '''Every script must have a unique name.''' If multiple scripts with the same name are encountered, Oolite will arbitrarily select one and discard the others.<br />
<br />
Note: If you do not want to react to one of these events anyway you can fully remove that function. This list is complete now as it is easier for novice users to remove than to add.<br />
<br />
<pre>this.name = "My OXP Script";<br />
this.author = "Your Name Here";<br />
this.copyright = "(C) 2021 Me.";<br />
this.licence = "CC-NC-by-SA 2.0";<br />
this.description = "This OXP doesn't do very much yet.";<br />
this.version = "1.0 alpha 1";<br />
<br />
"use strict";<br />
<br />
// Game State<br />
<br />
this.gamePaused = function()<br />
{<br />
log(this.name, "gamePaused()");<br />
}<br />
<br />
this.gameResumed = function()<br />
{<br />
log(this.name, "gameResumed()");<br />
}<br />
<br />
this.playerWillSaveGame = function(reason)<br />
{<br />
log(this.name, "playerWillSaveGame("+reason+")");<br />
}<br />
<br />
this.startUp = function()<br />
{<br />
log(this.name, "startup()");<br />
}<br />
<br />
this.startUpComplete = function()<br />
{<br />
log(this.name, "startupComplete()");<br />
}<br />
<br />
// Docking<br />
<br />
this.shipWillDockWithStation = function(station)<br />
{<br />
log(this.name, "shipWillDockWithStation("+station+")");<br />
}<br />
<br />
this.shipDockedWithStation = function(station)<br />
{<br />
log(this.name, "shipDockedWithStation("+station+")");<br />
}<br />
<br />
this.shipWillLaunchFromStation = function(stationLaunchedFrom)<br />
{<br />
log(this.name, "shipWillLaunchFromStation("+stationLaunchedFrom+")");<br />
}<br />
<br />
this.shipLaunchedFromStation = function(stationLaunchedFrom)<br />
{<br />
log(this.name, "shipLaunchedFromStation("+stationLaunchedFrom+")");<br />
}<br />
<br />
this.playerStartedAutoPilot = function()<br />
{<br />
log(this.name, "playerStartedAutoPilot()");<br />
}<br />
<br />
this.playerCancelledAutoPilot = function()<br />
{<br />
log(this.name, "playerCancelledAutoPilot()");<br />
}<br />
<br />
this.playerDockingClearanceCancelled = function()<br />
{<br />
log(this.name, "playerDockingClearanceCancelled()");<br />
}<br />
<br />
this.playerDockingClearanceExpired = function()<br />
{<br />
log(this.name, "playerDockingClearanceExpired()");<br />
}<br />
<br />
this.playerDockingClearanceGranted = function()<br />
{<br />
log(this.name, "playerDockingClearanceGranted()");<br />
}<br />
<br />
this.playerDockingRefused = function()<br />
{<br />
log(this.name, "playerDockingRefused()");<br />
}<br />
<br />
this.playerRequestedDockingClearance = function(message)<br />
{<br />
log(this.name, "playerRequestedDockingClearance("+message+")");<br />
}<br />
<br />
this.playerRescuedEscapePod = function(fee, reason, occupant)<br />
{<br />
log(this.name, "playerRescuedEscapePod("+fee + ", " + reason + ", " + occupant+")");<br />
}<br />
<br />
this.playerCompletedContract = function(type, result, fee, contract)<br />
{<br />
log(this.name, "playerCompletedContract("+fee + ", " + reason + ", " + occupant+")");<br />
}<br />
<br />
this.playerEnteredContract = function(type, contract)<br />
{<br />
log(this.name, "playerEnteredContract("+type + ", " + contract + ")");<br />
}<br />
<br />
// Witchspace jumps<br />
<br />
this.playerStartedJumpCountdown = function(type, seconds)<br />
{<br />
log(this.name, "playerStartedJumpCountdown("+type + ", " + seconds + ")");<br />
}<br />
<br />
this.playerCancelledJumpCountdown = function()<br />
{<br />
log(this.name, "playerCancelledJumpCountdown()");<br />
}<br />
<br />
this.playerJumpFailed = function(reason)<br />
{<br />
log(this.name, "playerJumpFailed(" + reason + ")" );<br />
}<br />
<br />
this.shipWillEnterWitchspace = function(cause, destination)<br />
{<br />
log(this.name, "shipWillEnterWitchspace(" + cause + ", " + destination + ")");<br />
}<br />
<br />
this.shipWillExitWitchspace = function()<br />
{<br />
log(this.name, "shipWillEnterWitchspace()");<br />
}<br />
<br />
this.shipExitedWitchspace = function()<br />
{<br />
log(this.name, "shipExitedWitchspace()");<br />
}<br />
<br />
this.playerEnteredNewGalaxy = function(galaxyNumber)<br />
{<br />
log(this.name, "playerEnteredNewGalaxy(" + galaxyNumber + ")");<br />
}<br />
<br />
// Enter/Exit Aegis<br />
this.shipEnteredStationAegis = function(station)<br />
{<br />
log(this.name, "shipEnteredStationAegis(" + station + ")");<br />
}<br />
<br />
this.shipExitedStationAegis = function(station)<br />
{<br />
log(this.name, "shipExitedStationAegis(" + station + ")");<br />
}<br />
<br />
this.shipEnteredPlanetaryVicinity = function(planet)<br />
{<br />
log(this.name, "shipEnteredPlanetaryVicinity(" + planet + ")");<br />
}<br />
<br />
this.shipExitedPlanetaryVicinity = function(planet)<br />
{<br />
log(this.name, "shipExitedPlanetaryVicinity(" + planet + ")");<br />
}<br />
<br />
this.shipApproachingPlanetSurface = function(planet)<br />
{<br />
log(this.name, "shipApproachingPlanetSurface(" + planet + ")");<br />
}<br />
<br />
this.shipLeavingPlanetSurface = function(planet)<br />
{<br />
log(this.name, "shipLeavingPlanetSurface(" + planet + ")");<br />
}<br />
<br />
// Combat<br />
<br />
this.alertConditionChanged = function(newCondition, oldCondition)<br />
{<br />
log(this.name, "alertConditionChanged(" + newCondition + ", " + oldCondition + ")");<br />
}<br />
<br />
this.playerTargetedMissile = function(missile)<br />
{<br />
log(this.name, "playerTargetedMissile(" + missile + ")");<br />
}<br />
<br />
this.shipAttackedOther = function(other)<br />
{<br />
log(this.name, "shipAttackedOther(" + other + ")");<br />
}<br />
<br />
this.shipAttackedWithMissile = function(missile, whom)<br />
{<br />
log(this.name, "shipAttackedWithMissile(" + missile + ", " + whom + ")");<br />
}<br />
<br />
this.shipBeingAttacked = function(whom)<br />
{<br />
log(this.name, "shipBeingAttacked(" + whom + ")");<br />
}<br />
<br />
this.shipBeingAttackedByCloaked = function()<br />
{<br />
log(this.name, "shipBeingAttackedByCloaked()");<br />
}<br />
<br />
this.shipKilledOther = function(whom, damageType)<br />
{<br />
log(this.name, "shipKilledOther(" + whom + ", " + damageType + ")");<br />
}<br />
<br />
this.shipReleasedEquipment = function(mine)<br />
{<br />
log(this.name, "shipReleasedEquipment(" + mine + ")");<br />
}<br />
<br />
<br />
this.shipTargetDestroyed = function(target)<br />
{<br />
log(this.name, "shipTargetDestroyed(" + target + ")");<br />
}<br />
<br />
this.shipDied = function(whom, why)<br />
{<br />
log(this.name, "shipDied(" + whom + ", " + why + ")");<br />
}<br />
<br />
this.shipFiredMissile = function(missile, target)<br />
{<br />
log(this.name, "shipFiredMissile(" + missile + ", " + target + ")");<br />
}<br />
<br />
this.shipTargetLost = function(target)<br />
{<br />
log(this.name, "shipTargetLost(" + target + ")");<br />
}<br />
<br />
this.shipTargetCloaked = function()<br />
{<br />
log(this.name, "shipTargetCloaked()");<br />
}<br />
<br />
this.weaponsSystemsToggled = function(state)<br />
{<br />
log(this.name, "weaponsSystemsToggled(" + state + ")");<br />
}<br />
<br />
// Equipment and Cargo<br />
<br />
this.equipmentAdded = function(equipmentKey)<br />
{<br />
log(this.name, "equipmentAdded(" + equipmentKey + ")");<br />
}<br />
<br />
this.equipmentDamaged = function(equipment)<br />
{<br />
log(this.name, "equipmentDamaged(" + equipment + ")");<br />
}<br />
<br />
this.equipmentRemoved = function(equipmentKey)<br />
{<br />
log(this.name, "equipmentRemoved(" + equipmentKey + ")");<br />
}<br />
<br />
this.equipmentRepaired = function(equipment)<br />
{<br />
log(this.name, "equipmentRepaired(" + equipment + ")");<br />
}<br />
<br />
this.playerBoughtCargo = function(commodity, units, price)<br />
{<br />
log(this.name, "playerBoughtCargo(" + commodity + ", " + units + ", " + price + ")");<br />
}<br />
<br />
this.playerBoughtEquipment = function(equipment, paid)<br />
{<br />
log(this.name, "playerBoughtEquipment(" + equipment + ", " + paid + ")");<br />
}<br />
<br />
this.playerBoughtNewShip = function(ship, price)<br />
{<br />
log(this.name, "playerBoughtNewShip(" + ship + ", " + price + ")");<br />
}<br />
<br />
this.playerChangedPrimedEquipment = function(equipmentKey)<br />
{<br />
log(this.name, "playerChangedPrimedEquipment(" + equipmentKey + ")");<br />
}<br />
<br />
this.playerReplacedShip = function(ship)<br />
{<br />
log(this.name, "playerReplacedShip(" + ship + ")");<br />
}<br />
<br />
this.playerSoldCargo = function(commodity, units, price)<br />
{<br />
log(this.name, "playerSoldCargo(" + commodity + ", " + units + ", " + price + ")");<br />
}<br />
<br />
this.shipScoopedFuel = function()<br />
{<br />
log(this.name, "shipScoopedFuel()");<br />
}<br />
<br />
this.shipScoopedOther = function(whom)<br />
{<br />
log(this.name, "shipScoopedOther(" + whom + ")");<br />
}<br />
<br />
this.playerWillBuyNewShip = function(dataKey, shipyard, price, tradeIn)<br />
{<br />
log(this.name, "playerWillBuyNewShip(" + dataKey + ", " + shipyard + ", " + price + ", " + tradeIn + ")");<br />
}<br />
<br />
this.playerWillReplaceShip = function(dataKey)<br />
{<br />
log(this.name, "playerWillReplaceShip(" + dataKey + ")");<br />
}<br />
<br />
// Other<br />
<br />
this.chartHightlightModeChanged = function(newMode)<br />
{<br />
log(this.name, "chartHightlightModeChanged(" + newMode + ")");<br />
}<br />
<br />
this.compassTargetChanged = function(whom, mode)<br />
{<br />
log(this.name, "compassTargetChanged(" + whom + ", " + mode + ")");<br />
}<br />
<br />
this.dayChanged = function(newday)<br />
{<br />
log(this.name, "dayChanged(" + newday + ")");<br />
}<br />
<br />
this.escapePodSequenceOver = function() <br />
{<br />
log(this.name, "escapePodSequenceOver()");<br />
}<br />
<br />
this.guiScreenChanged = function(to, from)<br />
{<br />
log(this.name, "guiScreenChanged(" + to + ", " + from + ")");<br />
}<br />
<br />
this.guiScreenWillChange = function(to, from)<br />
{<br />
log(this.name, "guiScreenWillChange(" + to + ", " + from + ")");<br />
}<br />
<br />
this.infoSystemChanged = function(to, from)<br />
{<br />
log(this.name, "infoSystemChanged(" + to + ", " + from + ")");<br />
}<br />
<br />
this.infoSystemWillChange = function(to, from)<br />
{<br />
log(this.name, "infoSystemWillChange(" + to + ", " + from + ")");<br />
}<br />
<br />
this.mfdKeyChanged = function(activeMFD, mfdKey)<br />
{<br />
log(this.name, "mfdKeyChanged(" + activeMFD + ", " + mfdKey + ")");<br />
}<br />
<br />
this.missionChoiceWasReset= function()<br />
{<br />
log(this.name, "missionChoiceWasReset()");<br />
}<br />
<br />
this.missionScreenEnded = function()<br />
{<br />
log(this.name, "missionScreenEnded()");<br />
}<br />
<br />
this.missionScreenOpportunity= function()<br />
{<br />
log(this.name, "missionScreenOpportunity()");<br />
}<br />
<br />
this.reportScreenEnded = function()<br />
{<br />
log(this.name, "reportScreenEnded()");<br />
}<br />
<br />
this.selectedMFDChanged = function(activeMFD)<br />
{<br />
log(this.name, "selectedMFDChanged(" + activeMFD + ")");<br />
}<br />
<br />
this.shipCollided = function(otherShip)<br />
{<br />
log(this.name, "shipCollided(" + otherShip + ")");<br />
}<br />
<br />
this.shipSpawned = function(ship)<br />
{<br />
log(this.name, "shipSpawned(" + ship + ")");<br />
}<br />
<br />
this.shipLaunchedEscapePod = function(escapepod)<br />
{<br />
log(this.name, "shipLaunchedEscapePod(" + escapepod + ")");<br />
}<br />
<br />
<br />
this.systemInformationChanged = function(galaxy,system,key,newValue)<br />
{<br />
log(this.name, "systemInformationChanged(" + galaxy + ", " + system + ", " + key + ", " + newValue + ")");<br />
}<br />
<br />
this.viewDirectionChanged = function(viewString)<br />
{<br />
log(this.name, "viewDirectionChanged(" + viewString + ")");<br />
}<br />
<br />
this.shipTakingDamage = function()<br />
{<br />
log(this.name, "shipTakingDamage()");<br />
}<br />
<br />
</pre><br />
<br />
=== AppleMacs ===<br />
... Strict semicolon parsing is a Mac thing. Windows and Linux use GNUstep to parse plists and that apparently is more relaxed syntax-wise than whatever it is that the Mac uses. [[User:Another_commander|Another_commander]] from [http://www.aegidian.org/bb/viewtopic.php?p=262814#p262814 A possible solution?] (2018).<br />
<br />
== What your computer will do with the Javascript ==<br />
The JavaScript is not interpreted directly, but rather is compiled to bytecode at load time. (The compiled bytecode is stored in Oolite’s cache. The exception is the eval() function, which compiles and then runs its argument, but there should be no reason to use this in Oolite except in the debug console script.) Any overhead related to parsing is thus a one-time cost. However, as it’s a completely dynamically typed language, opportunities for type-based optimizations are very limited. On the other hand, some types such as “small” integers (in the range ±1 billion and a bit) can be special-cased easily at run time. ([http://www.aegidian.org/bb/viewtopic.php?p=47013#p47013 Jens Ayton/Ahruman (2008)]<br />
<br />
== Understanding Javascript ==<br />
JensAyton/Ahruman (2011): I’ve been talking recently about prototype chains and constructors and how everyone should have been spelling system with a lowercase s, except when they shouldn’t, so I thought it would be nice to at least skim through the underlying concepts from an Oolitey perspective.<br />
<br />
All but the most primitive programming languages have some sort of type system, a way of formalizing the fact that while text, numbers and spaceships are all buckets of bytes to the machine, they mean different things at the higher level of abstraction where the programmer works. Types can be associated with labels, such as variables and properties, or with values; in JavaScript, they’re always associated with values. (This is known as ''dynamic typing'', as opposed to ''static typing''.)<br />
<br />
JavaScript almost has a very simple, uniform type system, in which every value is either an object, null (representing “no value”), or undefined (indicating a variable or property does not exist.) In actuality JavaScript’s type system is far more complex for pragmatic reasons, including performance, browser security concerns and, not least, the fact that the entire language was designed and implemented in one week by one guy. But all the things Oolite defines are ''objects'', so we can mostly pretend the simple type system actually exists.<br />
<br />
In JavaScript, an ''object'' is a collection of ''properties''. Each property has an ''identifier'' (which can be a string or a number), some attributes specifying things like whether it can be modified, and a value. If the value is a function (or, technically, any callable object), it’s called a ''method''. There is one special rule for methods: if you call a function by referring to it as a property of an object, that object is accessible as this from within the function. For example, if you call someObject.method(), this will refer to the same object as someObject while method() is running. The function itself is not tied to the object, and the same function can be a method of different objects, even under different names.<br />
<br />
One of the complications that would be nice to gloss over, but is going to be quite important, is that ''properties can be faked''. Normally, you set the value of a given property and it stays set until you change it, but there is an alternative: a property can be based on ''accessors'', where a function is called to get the value (and, optionally, a second function is called to set the value). Historically, it was only possible for host objects – i.e., ones defined by Oolite or the JavaScript engine – to create such properties, but there is a SpiderMonkey extension to do it from scripts and ECMAScript 5th Edition adds a new, standardized way. Host objects mostly do it for performance; for instance, instead of setting the position property of each ship’s JavaScript representation every frame, and creating a new JavaScript Vector3D each time, it’s done on the fly on those occasions where a script actually asks for it.<br />
<br />
The model as described so far is strictly sufficient, but it does have an important flaw: to create multiple similar objects, it would be necessary to create each object and then set each property for it, even if it’s a default value or an accessor-backed property. Most object-oriented programming systems address this problem using a concept called a class, where each object belongs to a fixed class and each class represents one possible set of properties, and classes can be based on other classes forming an inheritance hierarchy. JavaScript uses a simpler yet more flexible model, in which each object can inherit behaviour from another object, known as its ''prototype''. If you attempt to access a property of an object, but the property does not exist, the prototype is consulted, and if necessary its prototype in turn; this is known as following the prototype chain.<br />
<br />
Say o is an object with (initially) no properties, and p is o’s prototype, also with no properties. If you set p.foo to 3, and then request o.foo, you get 3. Further changes to p.foo are also reflected in o.foo. If you set o.bar to 5, then request o.bar, you get 5, but p.bar is still not defined.<br />
<br />
If you set o.foo to 7, then o gets its own foo property which shadows p’s. From then on, the two are distinct, unless you delete o.foo, at which point it again inherits p.foo.<br />
<br />
Transferring this to Oolite objects, it should come to no surprise that all ships have, in their prototype chains, an object which defines the common properties of ships; we can call it the ''[[Oolite JavaScript Reference: Ship|Ship Prototype]]''. The Ship Prototype inherits behaviour from the ''[[Oolite JavaScript Reference: Entity|Entity Prototype]]'', which defines the common properties of all entities (for instance, both ships and planets have a position property, which is an accessor-backed property of the Entity Prototype).<br />
<br />
In order to create an object with a specific prototype from within JavaScript, you use a ''constructor'', which is a function designed to set up a new object in conjunction with the new operator. In Oolite, you’ll most often use the constructors [[Oolite JavaScript Reference: Vector3D|Vector3D]] and [[Oolite JavaScript Reference: Vector3D|Timer]], as in this.v = new Vector3D(1, 0, 0);. When an object is created using new, its prototype is set to the value of the constructor’s prototype property. Note that this is not the constructor’s prototype, but a normal property whose name is prototype. Here is an example of how you might use this to define your own object hierarchy:<br />
<br />
var p = { foo: 3 };<br />
function P()<br />
{<br />
this.bar = 5;<br />
}<br />
P.prototype = p;<br />
<br />
o = new P;<br />
// o is now an object whose prototype is p.<br />
// In ECMAv5 and trunk (even oldjs builds) you can test this with Object.getPrototypeOf(o) == p.<br />
// In earlier versions, you can use o.__proto__ == p, which is a SpiderMonkey extension.<br />
<br />
log(o.foo); // 3<br />
log(o.bar); // 5<br />
p.foo = 4;<br />
log(o.foo); // 4<br />
<br />
// By the way, the new operator also set o’s “constructor” property to the function P.<br />
<br />
The same relationships are supposed to apply to Oolite-defined objects, and in trunk they do. For example, Object.getPrototypeOf(player.ship) == PlayerShip.prototype should be true, and now is. For that matter, new PlayerShip also “works”, by throwing an exception telling you you’re not allowed to make your own players. If you follow the prototype chain, PlayerShip.prototype’s prototype is equal to Ship.prototype, Ship.prototype’s prototype is Entity.prototype, Entity.prototype’s prototype is Object.prototype and Object.prototype’s prototype is null.<br />
<br />
In Oolite v.1.74 and earlier, most of the type names that should have been constructors instead referred to prototypes, because I was Doing It Wrong. This lead to a bunch of problems which I’ve sort of muddled through, such as compatibility methods for some objects unexpectedly becoming methods of Object.prototype. Another side effect was that you could call methods (or accessor-backed properties) on the prototypes by referring to the purported constructor name. For cases where only one object can exist, like the player ship, the method implementations ignore the this parameter and use the native Objective-C object directly, which is why you could call PlayerShip.awardCargo() instead of player.ship.awardCargo(). (In Oolite v.1.75, you could instead call PlayerShip.prototype.awardCargo(), but you’re much less likely to end up in that situation by mistake. Also, it’s very definitely not guaranteed to work in future.)<br />
<br />
So, let’s look at the root of the problem, namely the naming of Oolite JavaScript Reference pages. Let’s take [[Oolite JavaScript Reference: System|System]] as an example. The name is System with a capital S, referring to the name of the constructor – which, to the extent there is such a thing in JavaScript, is the type name. The second sentence of the introduction tells you that there’s one instance of System, and it’s available as the global variable system. (A “global variable” is one that’s visible to all code without any special qualification, unless there’s a local variable “shadowing” it. In JavaScript, global variables are actually properties of a “global object”, which is why it says “global property.”)<br />
<br />
The bulk of the article is divided into three sections, Properties, Methods and Static Methods. All this wiki's Javascript reference pages use this structure, although they elide empty sections. The terminology is wrong, and refers to concepts from C++ rather than JavaScript; it’s written that way because that’s how they’re referred to in the SpiderMonkey programming interface and because I started writing the documentation before I fully grokked the language.<br />
<br />
In actuality, the Properties section contains non-method properties of the System Prototype – which in Oolite v.1.75 is System.prototype but in earlier versions is accidentally System itself – and which are inherited by instances, in this case system. Methods is similar, for properties that happen to be functions. Static Methods contains methods that don’t apply to a particular instance – in this case, functions dealing with other systems – and are attached to the constructor.<br />
<br />
This distinction may be clearer if we look at a type which has more than one instance and also has “static methods”, namely [[Oolite JavaScript Reference: Vector3D|Vector3D]]. It makes sense to call someEntity.position.add([1, 0, 0]); this adds the vector (1, 0, 0) to the vector someEntity.position (following the special rule that arrays can be automatically converted to vectors). It doesn’t make sense to call Vector3D.add([1, 0, 0]), because Vector3D doesn’t refer to any specific vector, and in fact it raises an exception, “Vector3D.add is not a function”, because even in earlier versions Vector3D is the constructor rather than the prototype. (In Oolite v.1.74, Vector3D.prototype.add([1, 0, 0]) returns undefined; in trunk, it returns (1, 0, 0). In future versions, it might do some other thing, whatever seems the most efficient non-crashing behaviour.) On the other hand, Vector3D.randomDirectionAndLength() creates a new vector that isn’t related to any existing vector; it doesn’t make sense to call player.ship.position.randomDirectionAndLength().<br />
<br />
As I said, the terminology is all wrong, but “fixing” it wouldn’t really make things better. A new Oolite scripter seeing the categories Properties of System.prototype and Properties of System wouldn’t be better off than now. Explaining the distinction in terms specific to each type at the start of the page would be a horrible, mind-damaging thing that would make it much harder for people to actually understand (so please don’t “helpfully” do that). What’s needed is a simple yet basically correct summary of this information, but I’m pathologically incapable of writing it.<br />
<br />
As a reward for reading all the way through this short and simplified summary, here’s a fun function you can copy straight into the console. It should work in any version of Oolite which actually has a console:<br />
<br />
this.protoChain = function (object)<br />
{<br />
function pr(v)<br />
{<br />
// Get prototype of v, boxing it if it’s a primitive.<br />
if (typeof Object.getPrototypeOf == "function") return Object.getPrototypeOf(new Object(v));<br />
else return v.__proto__;<br />
}<br />
var result = "", first = true;<br />
for (;;)<br />
{<br />
var proto = pr(object);<br />
if (!proto) return result;<br />
if (!first) result += ": ";<br />
else first = false;<br />
result += proto.constructor.name || "<anonymous>";<br />
object = proto;<br />
}<br />
}<br />
<br />
In trunk, protoChain(player.ship) returns “PlayerShip: Ship: Entity: Object”. In Oolite v.1.74, you get “Object: Object: Object: Object”, which is distinctly wrong albeit mildly amusing to fans of Catch-22. In either, protoChain(new Vector3D) returns “Vector3D: Object”, and protoChain([]) returns “Array: Object”. It also deals with (''i.e.'', correctly lies about) primitive values; protoChain(5) returns “Number: Object”.<br />
<br />
''Note that Ahruman's masterpiece versions of Oolite came after this article - v.1.76.1 & v.1.77.1: the Article is [http://www.aegidian.org/bb/viewtopic.php?f=4&t=8968 Understanding JavaScript, maybe]''<br />
<br />
== See Also ==<br />
* [[Oolite Javascript basics]] - 2022 essay by [[User:Massively Locked|Massively Locked]]<br />
* [https://developer.mozilla.org/en/JavaScript/Reference Mozilla JavaScript reference pages] (check for JavaScript 6)<br />
* [[Oolite JavaScript event handler reference]]<br />
* [[Oolite JavaScript object model]]<br />
<!-- * [[JavaScript test OXP]] --><br />
* [[Variables in Oolite JavaScripts]]<br />
* [[Javascript Operators]]<br />
* [[Handling OXP Dependencies with JavaScript]]<br />
* [[Optimization tips]]<br />
* [http://www.aegidian.org/bb/viewtopic.php?p=221738#p221738 Writing a debug message into the latest.log] (2014)<br />
<br />
* [http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/ Linear algebra for game developers] (First of 4 parts, recommended by Ahruman in 2010)<br />
<br />
=== History ===<br />
* [http://aegidian.org/bb/viewtopic.php?f=6&t=2784 Anyone want to write scripts using JavaScript?] ([[David Taylor|Dajt]], 2007)<br />
<br />
=== Updating Javascript/Spidermonkey ===<br />
* [http://www.aegidian.org/bb/viewtopic.php?p=275357#p275357 Issues with updating] (2021)<br />
<br />
[[Category:Oolite]]<br />
[[Category:Oolite scripting]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Scripting_Oolite_with_JavaScript&diff=80431Scripting Oolite with JavaScript2023-12-20T23:17:40Z<p>Hiran: /* Using JavaScript */</p>
<hr />
<div>[[Oolite]] 1.68 and later supports scripts written in [http://en.wikipedia.org/wiki/ECMAScript ECMAScript] (more commonly known as [http://en.wikipedia.org/wiki/JavaScript JavaScript]) in addition to its traditional model based on [[property lists]]. This page provides an overview of how JavaScript is used in Oolite. The page [[Oolite JavaScript Reference: object model]] provides reference for Oolite-specific objects and methods. The page [[Oolite JavaScript Reference: World script event handlers]] provides reference for the event handlers Oolite supports. The language standards and some tutorials can be found through the Wiki links provided above. The announcement [http://aegidian.org/bb/viewtopic.php?p=130332#p130332 here] may be of use (scroll down to "Javascipt").<br />
<br />
== Using JavaScript ==<br />
<br />
Currently, JavaScript 6 is supported for “worldScripts”, that is, as a replacement for scripts in ''script.plist'' and shipScripts, that acts as expansion for the ships AI. While a ''script.plist'' file may contain any number of separate scripts, a single JavaScript file may contain only one script.<br />
<br />
If your OXP only uses one script, place a JavaScript file named ''script.js'' (or ''script.es'') in the OXP’s ''Config'' directory. If you wish to use multiple scripts, you may instead create file named ''world-scripts.plist'' in the ''Config'' directory. This [[property list]] file should consist of an array of worldScript names; the named scripts should exist in a directory named ''Scripts'' inside your OXP. As with most “atomic” files (files which cannot be merged), such script files must have a unique name to avoid conflicts with other OXPs. Using the [[world-scripts.plist]] method, you can combine JavaScript, plist and OOS scripts however you wish.<br />
<br />
Whereas plist scripts are based on polling – all scripts are run at semi-regular intervals, whether they need to be or not – scripts written in JavaScript are “event driven” – different functions, or ''event handlers'', in the script are called in response to state changes in the game, or when other events of interest happen. For instance, <code>willExitWitchSpace</code> is called just before player exits witchspace, and <code>alertConditionChanged</code> is called whenever the alert condition changes. <br />
<br />
See the [[Oolite JavaScript event handler reference|event handler reference]] for a full list of handlers and when Oolite will call them.<br />
<br />
<br />
=== script.js File Template ===<br />
<br />
Copy and paste this template into a file called script.js in the OXP Config directory. Ensure you change at least the Name value. '''Every script must have a unique name.''' If multiple scripts with the same name are encountered, Oolite will arbitrarily select one and discard the others.<br />
<br />
Note: If you do not want to react to one of these events anyway you can fully remove that function. This list is complete now as it is easier for novice users to remove than to add.<br />
<br />
<pre>this.name = "My OXP Script";<br />
this.author = "Your Name Here";<br />
this.copyright = "(C) 2021 Me.";<br />
this.licence = "CC-NC-by-SA 2.0";<br />
this.description = "This OXP doesn't do very much yet.";<br />
this.version = "1.0 alpha 1";<br />
<br />
"use strict";<br />
<br />
// Game State<br />
<br />
this.gamePaused = function()<br />
{<br />
log(this.name, "gamePaused()");<br />
}<br />
<br />
this.gameResumed = function()<br />
{<br />
log(this.name, "gameResumed()");<br />
}<br />
<br />
this.playerWillSaveGame = function(reason)<br />
{<br />
log(this.name, "playerWillSaveGame("+reason+")");<br />
}<br />
<br />
this.startUp = function()<br />
{<br />
log(this.name, "startup()");<br />
}<br />
<br />
this.startUpComplete = function()<br />
{<br />
log(this.name, "startupComplete()");<br />
}<br />
<br />
// Docking<br />
<br />
this.shipWillDockWithStation = function(station)<br />
{<br />
log(this.name, "shipWillDockWithStation("+station+")");<br />
}<br />
<br />
this.shipDockedWithStation = function(station)<br />
{<br />
log(this.name, "shipDockedWithStation("+station+")");<br />
}<br />
<br />
this.shipWillLaunchFromStation = function(stationLaunchedFrom)<br />
{<br />
log(this.name, "shipWillLaunchFromStation("+stationLaunchedFrom+")");<br />
}<br />
<br />
this.shipLaunchedFromStation = function(stationLaunchedFrom)<br />
{<br />
log(this.name, "shipLaunchedFromStation("+stationLaunchedFrom+")");<br />
}<br />
<br />
this.playerStartedAutoPilot = function()<br />
{<br />
log(this.name, "playerStartedAutoPilot()");<br />
}<br />
<br />
this.playerCancelledAutoPilot = function()<br />
{<br />
log(this.name, "playerCancelledAutoPilot()");<br />
}<br />
<br />
this.playerDockingClearanceCancelled = function()<br />
{<br />
log(this.name, "playerDockingClearanceCancelled()");<br />
}<br />
<br />
this.playerDockingClearanceExpired = function()<br />
{<br />
log(this.name, "playerDockingClearanceExpired()");<br />
}<br />
<br />
this.playerDockingClearanceGranted = function()<br />
{<br />
log(this.name, "playerDockingClearanceGranted()");<br />
}<br />
<br />
this.playerDockingRefused = function()<br />
{<br />
log(this.name, "playerDockingRefused()");<br />
}<br />
<br />
this.playerRequestedDockingClearance = function(message)<br />
{<br />
log(this.name, "playerRequestedDockingClearance("+message+")");<br />
}<br />
<br />
this.playerRescuedEscapePod = function(fee, reason, occupant)<br />
{<br />
log(this.name, "playerRescuedEscapePod("+fee + ", " + reason + ", " + occupant+")");<br />
}<br />
<br />
this.playerCompletedContract = function(type, result, fee, contract)<br />
{<br />
log(this.name, "playerCompletedContract("+fee + ", " + reason + ", " + occupant+")");<br />
}<br />
<br />
this.playerEnteredContract = function(type, contract)<br />
{<br />
log(this.name, "playerEnteredContract("+type + ", " + contract + ")");<br />
}<br />
<br />
// Witchspace jumps<br />
<br />
this.playerStartedJumpCountdown = function(type, seconds)<br />
{<br />
log(this.name, "playerStartedJumpCountdown("+type + ", " + seconds + ")");<br />
}<br />
<br />
this.playerCancelledJumpCountdown = function()<br />
{<br />
log(this.name, "playerCancelledJumpCountdown()");<br />
}<br />
<br />
this.playerJumpFailed = function(reason)<br />
{<br />
log(this.name, "playerJumpFailed(" + reason + ")" );<br />
}<br />
<br />
this.shipWillEnterWitchspace = function(cause, destination)<br />
{<br />
log(this.name, "shipWillEnterWitchspace(" + cause + ", " + destination + ")");<br />
}<br />
<br />
this.shipWillExitWitchspace = function()<br />
{<br />
log(this.name, "shipWillEnterWitchspace()");<br />
}<br />
<br />
this.shipExitedWitchspace = function()<br />
{<br />
log(this.name, "shipExitedWitchspace()");<br />
}<br />
<br />
this.playerEnteredNewGalaxy = function(galaxyNumber)<br />
{<br />
log(this.name, "playerEnteredNewGalaxy(" + galaxyNumber + ")");<br />
}<br />
<br />
// Enter/Exit Aegis<br />
this.shipEnteredStationAegis = function(station)<br />
{<br />
log(this.name, "shipEnteredStationAegis(" + station + ")");<br />
}<br />
<br />
this.shipExitedStationAegis = function(station)<br />
{<br />
log(this.name, "shipExitedStationAegis(" + station + ")");<br />
}<br />
<br />
this.shipEnteredPlanetaryVicinity = function(planet)<br />
{<br />
log(this.name, "shipEnteredPlanetaryVicinity(" + planet + ")");<br />
}<br />
<br />
this.shipExitedPlanetaryVicinity = function(planet)<br />
{<br />
log(this.name, "shipExitedPlanetaryVicinity(" + planet + ")");<br />
}<br />
<br />
this.shipApproachingPlanetSurface = function(planet)<br />
{<br />
log(this.name, "shipApproachingPlanetSurface(" + planet + ")");<br />
}<br />
<br />
this.shipLeavingPlanetSurface = function(planet)<br />
{<br />
log(this.name, "shipLeavingPlanetSurface(" + planet + ")");<br />
}<br />
<br />
// Combat<br />
<br />
this.alertConditionChanged = function(newCondition, oldCondition)<br />
{<br />
log(this.name, "alertConditionChanged(" + newCondition + ", " + oldCondition + ")");<br />
}<br />
<br />
this.playerTargetedMissile = function(missile)<br />
{<br />
log(this.name, "playerTargetedMissile(" + missile + ")");<br />
}<br />
<br />
this.shipAttackedOther = function(other)<br />
{<br />
log(this.name, "shipAttackedOther(" + other + ")");<br />
}<br />
<br />
this.shipAttackedWithMissile = function(missile, whom)<br />
{<br />
log(this.name, "shipAttackedWithMissile(" + missile + ", " + whom + ")");<br />
}<br />
<br />
this.shipBeingAttacked = function(whom)<br />
{<br />
log(this.name, "shipBeingAttacked(" + whom + ")");<br />
}<br />
<br />
this.shipBeingAttackedByCloaked = function()<br />
{<br />
log(this.name, "shipBeingAttackedByCloaked()");<br />
}<br />
<br />
this.shipKilledOther = function(whom, damageType)<br />
{<br />
log(this.name, "shipKilledOther(" + whom + ", " + damageType + ")");<br />
}<br />
<br />
this.shipReleasedEquipment = function(mine)<br />
{<br />
log(this.name, "shipReleasedEquipment(" + mine + ")");<br />
}<br />
<br />
<br />
this.shipTargetDestroyed = function(target)<br />
{<br />
log(this.name, "shipTargetDestroyed(" + target + ")");<br />
}<br />
<br />
this.shipDied = function(whom, why)<br />
{<br />
log(this.name, "shipDied(" + whom + ", " + why + ")");<br />
}<br />
<br />
this.shipFiredMissile = function(missile, target)<br />
{<br />
log(this.name, "shipFiredMissile(" + missile + ", " + target + ")");<br />
}<br />
<br />
this.shipTargetLost = function(target)<br />
{<br />
log(this.name, "shipTargetLost(" + target + ")");<br />
}<br />
<br />
this.shipTargetCloaked = function()<br />
{<br />
log(this.name, "shipTargetCloaked()");<br />
}<br />
<br />
this.weaponsSystemsToggled = function(state)<br />
{<br />
log(this.name, "weaponsSystemsToggled(" + state + ")");<br />
}<br />
<br />
// Equipment and Cargo<br />
<br />
this.equipmentAdded = function(equipmentKey)<br />
{<br />
log(this.name, "equipmentAdded(" + equipmentKey + ")");<br />
}<br />
<br />
this.equipmentDamaged = function(equipment)<br />
{<br />
log(this.name, "equipmentDamaged(" + equipment + ")");<br />
}<br />
<br />
this.equipmentRemoved = function(equipmentKey)<br />
{<br />
log(this.name, "equipmentRemoved(" + equipmentKey + ")");<br />
}<br />
<br />
this.equipmentRepaired = function(equipment)<br />
{<br />
log(this.name, "equipmentRepaired(" + equipment + ")");<br />
}<br />
<br />
this.playerBoughtCargo = function(commodity, units, price)<br />
{<br />
log(this.name, "playerBoughtCargo(" + commodity + ", " + units + ", " + price + ")");<br />
}<br />
<br />
this.playerBoughtEquipment = function(equipment, paid)<br />
{<br />
log(this.name, "playerBoughtEquipment(" + equipment + ", " + paid + ")");<br />
}<br />
<br />
this.playerBoughtNewShip = function(ship, price)<br />
{<br />
log(this.name, "playerBoughtNewShip(" + ship + ", " + price + ")");<br />
}<br />
<br />
this.playerChangedPrimedEquipment = function(equipmentKey)<br />
{<br />
log(this.name, "playerChangedPrimedEquipment(" + equipmentKey + ")");<br />
}<br />
<br />
this.playerReplacedShip = function(ship)<br />
{<br />
log(this.name, "playerReplacedShip(" + ship + ")");<br />
}<br />
<br />
this.playerSoldCargo = function(commodity, units, price)<br />
{<br />
log(this.name, "playerSoldCargo(" + commodity + ", " + units + ", " + price + ")");<br />
}<br />
<br />
this.shipScoopedFuel = function()<br />
{<br />
log(this.name, "shipScoopedFuel()");<br />
}<br />
<br />
this.shipScoopedOther = function(whom)<br />
{<br />
log(this.name, "shipScoopedOther(" + whom + ")");<br />
}<br />
<br />
this.playerWillBuyNewShip = function(dataKey, shipyard, price, tradeIn)<br />
{<br />
log(this.name, "playerWillBuyNewShip(" + dataKey + ", " + shipyard + ", " + price + ", " + tradeIn + ")");<br />
}<br />
<br />
this.playerWillReplaceShip = function(dataKey)<br />
{<br />
log(this.name, "playerWillReplaceShip(" + dataKey + ")");<br />
}<br />
<br />
// Other<br />
<br />
this.chartHightlightModeChanged = function(newMode)<br />
{<br />
log(this.name, "chartHightlightModeChanged(" + newMode + ")");<br />
}<br />
<br />
this.compassTargetChanged = function(whom, mode)<br />
{<br />
log(this.name, "compassTargetChanged(" + whom + ", " + mode + ")");<br />
}<br />
<br />
this.dayChanged = function(newday)<br />
{<br />
log(this.name, "dayChanged(" + newday + ")");<br />
}<br />
<br />
this.escapePodSequenceOver = function() <br />
{<br />
log(this.name, "escapePodSequenceOver()");<br />
}<br />
<br />
this.guiScreenChanged = function(to, from)<br />
{<br />
log(this.name, "guiScreenChanged(" + to + ", " + from + ")");<br />
}<br />
<br />
this.guiScreenWillChange = function(to, from)<br />
{<br />
log(this.name, "guiScreenWillChange(" + to + ", " + from + ")");<br />
}<br />
<br />
this.infoSystemChanged = function(to, from)<br />
{<br />
log(this.name, "infoSystemChanged(" + to + ", " + from + ")");<br />
}<br />
<br />
this.infoSystemWillChange = function(to, from)<br />
{<br />
log(this.name, "infoSystemWillChange(" + to + ", " + from + ")");<br />
}<br />
<br />
this.mfdKeyChanged = function(activeMFD, mfdKey)<br />
{<br />
log(this.name, "mfdKeyChanged(" + activeMFD + ", " + mfdKey + ")");<br />
}<br />
<br />
this.missionChoiceWasReset= function()<br />
{<br />
log(this.name, "missionChoiceWasReset()");<br />
}<br />
<br />
this.missionScreenEnded = function()<br />
{<br />
log(this.name, "missionScreenEnded()");<br />
}<br />
<br />
this.missionScreenOpportunity= function()<br />
{<br />
log(this.name, "missionScreenOpportunity()");<br />
}<br />
<br />
this.reportScreenEnded = function()<br />
{<br />
log(this.name, "reportScreenEnded()");<br />
}<br />
<br />
this.selectedMFDChanged = function(activeMFD)<br />
{<br />
log(this.name, "selectedMFDChanged(" + activeMFD + ")");<br />
}<br />
<br />
this.shipCollided = function(otherShip)<br />
{<br />
log(this.name, "shipCollided(" + otherShip + ")");<br />
}<br />
<br />
this.shipSpawned = function(ship)<br />
{<br />
log(this.name, "shipSpawned(" + ship + ")");<br />
}<br />
<br />
this.shipLaunchedEscapePod = function(escapepod)<br />
{<br />
log(this.name, "shipLaunchedEscapePod(" + escapepod + ")");<br />
}<br />
<br />
<br />
this.systemInformationChanged = function(galaxy,system,key,newValue)<br />
{<br />
log(this.name, "systemInformationChanged(" + galaxy + ", " + system + ", " + key + ", " + newValue + ")");<br />
}<br />
<br />
this.viewDirectionChanged = function(viewString)<br />
{<br />
log(this.name, "viewDirectionChanged(" + viewString + ")");<br />
}<br />
<br />
this.shipTakingDamage = function()<br />
{<br />
log(this.name, "shipTakingDamage()");<br />
}<br />
<br />
</pre><br />
<br />
=== AppleMacs ===<br />
... Strict semicolon parsing is a Mac thing. Windows and Linux use GNUstep to parse plists and that apparently is more relaxed syntax-wise than whatever it is that the Mac uses. [[User:Another_commander|Another_commander]] from [http://www.aegidian.org/bb/viewtopic.php?p=262814#p262814 A possible solution?] (2018).<br />
<br />
== What your computer will do with the Javascript ==<br />
The JavaScript is not interpreted directly, but rather is compiled to bytecode at load time. (The compiled bytecode is stored in Oolite’s cache. The exception is the eval() function, which compiles and then runs its argument, but there should be no reason to use this in Oolite except in the debug console script.) Any overhead related to parsing is thus a one-time cost. However, as it’s a completely dynamically typed language, opportunities for type-based optimizations are very limited. On the other hand, some types such as “small” integers (in the range ±1 billion and a bit) can be special-cased easily at run time. ([http://www.aegidian.org/bb/viewtopic.php?p=47013#p47013 Jens Ayton/Ahruman (2008)]<br />
<br />
== Understanding Javascript ==<br />
JensAyton/Ahruman (2011): I’ve been talking recently about prototype chains and constructors and how everyone should have been spelling system with a lowercase s, except when they shouldn’t, so I thought it would be nice to at least skim through the underlying concepts from an Oolitey perspective.<br />
<br />
All but the most primitive programming languages have some sort of type system, a way of formalizing the fact that while text, numbers and spaceships are all buckets of bytes to the machine, they mean different things at the higher level of abstraction where the programmer works. Types can be associated with labels, such as variables and properties, or with values; in JavaScript, they’re always associated with values. (This is known as ''dynamic typing'', as opposed to ''static typing''.)<br />
<br />
JavaScript almost has a very simple, uniform type system, in which every value is either an object, null (representing “no value”), or undefined (indicating a variable or property does not exist.) In actuality JavaScript’s type system is far more complex for pragmatic reasons, including performance, browser security concerns and, not least, the fact that the entire language was designed and implemented in one week by one guy. But all the things Oolite defines are ''objects'', so we can mostly pretend the simple type system actually exists.<br />
<br />
In JavaScript, an ''object'' is a collection of ''properties''. Each property has an ''identifier'' (which can be a string or a number), some attributes specifying things like whether it can be modified, and a value. If the value is a function (or, technically, any callable object), it’s called a ''method''. There is one special rule for methods: if you call a function by referring to it as a property of an object, that object is accessible as this from within the function. For example, if you call someObject.method(), this will refer to the same object as someObject while method() is running. The function itself is not tied to the object, and the same function can be a method of different objects, even under different names.<br />
<br />
One of the complications that would be nice to gloss over, but is going to be quite important, is that ''properties can be faked''. Normally, you set the value of a given property and it stays set until you change it, but there is an alternative: a property can be based on ''accessors'', where a function is called to get the value (and, optionally, a second function is called to set the value). Historically, it was only possible for host objects – i.e., ones defined by Oolite or the JavaScript engine – to create such properties, but there is a SpiderMonkey extension to do it from scripts and ECMAScript 5th Edition adds a new, standardized way. Host objects mostly do it for performance; for instance, instead of setting the position property of each ship’s JavaScript representation every frame, and creating a new JavaScript Vector3D each time, it’s done on the fly on those occasions where a script actually asks for it.<br />
<br />
The model as described so far is strictly sufficient, but it does have an important flaw: to create multiple similar objects, it would be necessary to create each object and then set each property for it, even if it’s a default value or an accessor-backed property. Most object-oriented programming systems address this problem using a concept called a class, where each object belongs to a fixed class and each class represents one possible set of properties, and classes can be based on other classes forming an inheritance hierarchy. JavaScript uses a simpler yet more flexible model, in which each object can inherit behaviour from another object, known as its ''prototype''. If you attempt to access a property of an object, but the property does not exist, the prototype is consulted, and if necessary its prototype in turn; this is known as following the prototype chain.<br />
<br />
Say o is an object with (initially) no properties, and p is o’s prototype, also with no properties. If you set p.foo to 3, and then request o.foo, you get 3. Further changes to p.foo are also reflected in o.foo. If you set o.bar to 5, then request o.bar, you get 5, but p.bar is still not defined.<br />
<br />
If you set o.foo to 7, then o gets its own foo property which shadows p’s. From then on, the two are distinct, unless you delete o.foo, at which point it again inherits p.foo.<br />
<br />
Transferring this to Oolite objects, it should come to no surprise that all ships have, in their prototype chains, an object which defines the common properties of ships; we can call it the ''[[Oolite JavaScript Reference: Ship|Ship Prototype]]''. The Ship Prototype inherits behaviour from the ''[[Oolite JavaScript Reference: Entity|Entity Prototype]]'', which defines the common properties of all entities (for instance, both ships and planets have a position property, which is an accessor-backed property of the Entity Prototype).<br />
<br />
In order to create an object with a specific prototype from within JavaScript, you use a ''constructor'', which is a function designed to set up a new object in conjunction with the new operator. In Oolite, you’ll most often use the constructors [[Oolite JavaScript Reference: Vector3D|Vector3D]] and [[Oolite JavaScript Reference: Vector3D|Timer]], as in this.v = new Vector3D(1, 0, 0);. When an object is created using new, its prototype is set to the value of the constructor’s prototype property. Note that this is not the constructor’s prototype, but a normal property whose name is prototype. Here is an example of how you might use this to define your own object hierarchy:<br />
<br />
var p = { foo: 3 };<br />
function P()<br />
{<br />
this.bar = 5;<br />
}<br />
P.prototype = p;<br />
<br />
o = new P;<br />
// o is now an object whose prototype is p.<br />
// In ECMAv5 and trunk (even oldjs builds) you can test this with Object.getPrototypeOf(o) == p.<br />
// In earlier versions, you can use o.__proto__ == p, which is a SpiderMonkey extension.<br />
<br />
log(o.foo); // 3<br />
log(o.bar); // 5<br />
p.foo = 4;<br />
log(o.foo); // 4<br />
<br />
// By the way, the new operator also set o’s “constructor” property to the function P.<br />
<br />
The same relationships are supposed to apply to Oolite-defined objects, and in trunk they do. For example, Object.getPrototypeOf(player.ship) == PlayerShip.prototype should be true, and now is. For that matter, new PlayerShip also “works”, by throwing an exception telling you you’re not allowed to make your own players. If you follow the prototype chain, PlayerShip.prototype’s prototype is equal to Ship.prototype, Ship.prototype’s prototype is Entity.prototype, Entity.prototype’s prototype is Object.prototype and Object.prototype’s prototype is null.<br />
<br />
In Oolite v.1.74 and earlier, most of the type names that should have been constructors instead referred to prototypes, because I was Doing It Wrong. This lead to a bunch of problems which I’ve sort of muddled through, such as compatibility methods for some objects unexpectedly becoming methods of Object.prototype. Another side effect was that you could call methods (or accessor-backed properties) on the prototypes by referring to the purported constructor name. For cases where only one object can exist, like the player ship, the method implementations ignore the this parameter and use the native Objective-C object directly, which is why you could call PlayerShip.awardCargo() instead of player.ship.awardCargo(). (In Oolite v.1.75, you could instead call PlayerShip.prototype.awardCargo(), but you’re much less likely to end up in that situation by mistake. Also, it’s very definitely not guaranteed to work in future.)<br />
<br />
So, let’s look at the root of the problem, namely the naming of Oolite JavaScript Reference pages. Let’s take [[Oolite JavaScript Reference: System|System]] as an example. The name is System with a capital S, referring to the name of the constructor – which, to the extent there is such a thing in JavaScript, is the type name. The second sentence of the introduction tells you that there’s one instance of System, and it’s available as the global variable system. (A “global variable” is one that’s visible to all code without any special qualification, unless there’s a local variable “shadowing” it. In JavaScript, global variables are actually properties of a “global object”, which is why it says “global property.”)<br />
<br />
The bulk of the article is divided into three sections, Properties, Methods and Static Methods. All this wiki's Javascript reference pages use this structure, although they elide empty sections. The terminology is wrong, and refers to concepts from C++ rather than JavaScript; it’s written that way because that’s how they’re referred to in the SpiderMonkey programming interface and because I started writing the documentation before I fully grokked the language.<br />
<br />
In actuality, the Properties section contains non-method properties of the System Prototype – which in Oolite v.1.75 is System.prototype but in earlier versions is accidentally System itself – and which are inherited by instances, in this case system. Methods is similar, for properties that happen to be functions. Static Methods contains methods that don’t apply to a particular instance – in this case, functions dealing with other systems – and are attached to the constructor.<br />
<br />
This distinction may be clearer if we look at a type which has more than one instance and also has “static methods”, namely [[Oolite JavaScript Reference: Vector3D|Vector3D]]. It makes sense to call someEntity.position.add([1, 0, 0]); this adds the vector (1, 0, 0) to the vector someEntity.position (following the special rule that arrays can be automatically converted to vectors). It doesn’t make sense to call Vector3D.add([1, 0, 0]), because Vector3D doesn’t refer to any specific vector, and in fact it raises an exception, “Vector3D.add is not a function”, because even in earlier versions Vector3D is the constructor rather than the prototype. (In Oolite v.1.74, Vector3D.prototype.add([1, 0, 0]) returns undefined; in trunk, it returns (1, 0, 0). In future versions, it might do some other thing, whatever seems the most efficient non-crashing behaviour.) On the other hand, Vector3D.randomDirectionAndLength() creates a new vector that isn’t related to any existing vector; it doesn’t make sense to call player.ship.position.randomDirectionAndLength().<br />
<br />
As I said, the terminology is all wrong, but “fixing” it wouldn’t really make things better. A new Oolite scripter seeing the categories Properties of System.prototype and Properties of System wouldn’t be better off than now. Explaining the distinction in terms specific to each type at the start of the page would be a horrible, mind-damaging thing that would make it much harder for people to actually understand (so please don’t “helpfully” do that). What’s needed is a simple yet basically correct summary of this information, but I’m pathologically incapable of writing it.<br />
<br />
As a reward for reading all the way through this short and simplified summary, here’s a fun function you can copy straight into the console. It should work in any version of Oolite which actually has a console:<br />
<br />
this.protoChain = function (object)<br />
{<br />
function pr(v)<br />
{<br />
// Get prototype of v, boxing it if it’s a primitive.<br />
if (typeof Object.getPrototypeOf == "function") return Object.getPrototypeOf(new Object(v));<br />
else return v.__proto__;<br />
}<br />
var result = "", first = true;<br />
for (;;)<br />
{<br />
var proto = pr(object);<br />
if (!proto) return result;<br />
if (!first) result += ": ";<br />
else first = false;<br />
result += proto.constructor.name || "<anonymous>";<br />
object = proto;<br />
}<br />
}<br />
<br />
In trunk, protoChain(player.ship) returns “PlayerShip: Ship: Entity: Object”. In Oolite v.1.74, you get “Object: Object: Object: Object”, which is distinctly wrong albeit mildly amusing to fans of Catch-22. In either, protoChain(new Vector3D) returns “Vector3D: Object”, and protoChain([]) returns “Array: Object”. It also deals with (''i.e.'', correctly lies about) primitive values; protoChain(5) returns “Number: Object”.<br />
<br />
''Note that Ahruman's masterpiece versions of Oolite came after this article - v.1.76.1 & v.1.77.1: the Article is [http://www.aegidian.org/bb/viewtopic.php?f=4&t=8968 Understanding JavaScript, maybe]''<br />
<br />
== See Also ==<br />
* [[Oolite Javascript basics]] - 2022 essay by [[User:Massively Locked|Massively Locked]]<br />
* [https://developer.mozilla.org/en/JavaScript/Reference Mozilla JavaScript reference pages]<br />
* [[Oolite JavaScript event handler reference]]<br />
* [[Oolite JavaScript object model]]<br />
<!-- * [[JavaScript test OXP]] --><br />
* [[Variables in Oolite JavaScripts]]<br />
* [[Javascript Operators]]<br />
* [[Handling OXP Dependencies with JavaScript]]<br />
* [[Optimization tips]]<br />
* [http://www.aegidian.org/bb/viewtopic.php?p=221738#p221738 Writing a debug message into the latest.log] (2014)<br />
<br />
* [http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/ Linear algebra for game developers] (First of 4 parts, recommended by Ahruman in 2010)<br />
<br />
=== History ===<br />
* [http://aegidian.org/bb/viewtopic.php?f=6&t=2784 Anyone want to write scripts using JavaScript?] ([[David Taylor|Dajt]], 2007)<br />
<br />
=== Updating Javascript/Spidermonkey ===<br />
* [http://www.aegidian.org/bb/viewtopic.php?p=275357#p275357 Issues with updating] (2021)<br />
<br />
[[Category:Oolite]]<br />
[[Category:Oolite scripting]]</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80429AppleMac2023-12-20T21:23:17Z<p>Hiran: /* Installing expansions on Oolite 1.90 */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 (and previous)==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://ooliteproject.github.io/oolite-expansion-catalog/indexExpansionsByName.html.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]]). The file is written in [[Property list]] format. <br />
<br />
While Oolite is not running, open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
Save the document. On future startup the Oolite builtin expansion manager should find the correct index of expansions.<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MacOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80428AppleMac2023-12-20T21:22:57Z<p>Hiran: /* Solution 2: Configure Oolite to access the expansion catalog from the new URL */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://ooliteproject.github.io/oolite-expansion-catalog/indexExpansionsByName.html.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]]). The file is written in [[Property list]] format. <br />
<br />
While Oolite is not running, open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
Save the document. On future startup the Oolite builtin expansion manager should find the correct index of expansions.<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MacOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80427AppleMac2023-12-20T21:20:25Z<p>Hiran: /* Solution 1: Install expansions manually. It is effort but possible */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://ooliteproject.github.io/oolite-expansion-catalog/indexExpansionsByName.html.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]])<br />
<br />
The file is written in [[Property list]] format. Open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MacOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80426AppleMac2023-12-20T21:19:57Z<p>Hiran: /* Solution 2: Configure Oolite to access the expansion catalog from the new URL */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://ooliteproject.github.io/oolite-expansion-catalog/indexExpansionsByName.html.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]])<br />
<br />
The file is written in [[Property list]] format. Open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MacOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80425AppleMac2023-12-20T21:19:35Z<p>Hiran: /* Solution 2: Configure Oolite to access the expansion catalog from the new URL */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://ooliteproject.github.io/oolite-expansion-catalog/indexExpansionsByName.html.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]])<br />
<br />
The file is written in [[Property list]] format. Open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MaxOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80424AppleMac2023-12-20T21:19:22Z<p>Hiran: /* Solution 2: Configure Oolite to access the expansion catalog from the new URL */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://ooliteproject.github.io/oolite-expansion-catalog/indexExpansionsByName.html.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]])<br />
<br />
The file is written in [[Property list]] format. Open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
<br />
Further guidance with screenshots available at [[https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MaxOS Process to update gnustepdefaults file]].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80423AppleMac2023-12-20T21:19:04Z<p>Hiran: /* Solution 2: Configure Oolite to access the expansion catalog from the new URL */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://ooliteproject.github.io/oolite-expansion-catalog/indexExpansionsByName.html.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [[Location of Oolite saved settings]])<br />
<br />
The file is written in [Property list] format. Open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
<br />
Further guidance with screenshots available at [[https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MaxOS Process to update gnustepdefaults file]].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80422AppleMac2023-12-20T21:18:23Z<p>Hiran: /* Solution 2: Configure Oolite to access the expansion catalog from the new URL */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://ooliteproject.github.io/oolite-expansion-catalog/indexExpansionsByName.html.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
Oolite reads preferences from a file called<br />
~/Library/Preferences/org.aegidian.oolite.plist<br />
(see also [Location of Oolite saved settings])<br />
<br />
The file is written in [Property list] format. Open this file with your preferred editor and<br />
ensure there is a key "oxz-index-url" with value "http://addons.oolite.space/api/1.0/overview/".<br />
<br />
Further guidance with screenshots available at [https://app.box.com/s/8t5x1sxqlm2zlrtqcws3zwwcv2ow2z17 MaxOS Process to update gnustepdefaults file].<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80421AppleMac2023-12-20T19:11:02Z<p>Hiran: /* Solution 1: Install expansions manually. It is effort but possible */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
You need to know where to get downloads from, and you need to know where to drop them on your harddrive.<br />
<br />
To find out the available expansions, go to https://ooliteproject.github.io/oolite-expansion-catalog/indexExpansionsByName.html.<br />
You can pick something from the list and go to the detail page. On that detail page for each expansion you find a download link.<br />
<br />
After downloading, move the file to <br />
~/Library/Application Support/Oolite/Managed Addons<br />
<br />
The tilde character will be replaced by your user home directory. If you prefer, you can as well write<br />
$HOME/Library/Application Support/Oolite/Managed Addons<br />
<br />
In any case, mind the space characters in the directory names.<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
(details will follow)<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80420AppleMac2023-12-20T13:38:09Z<p>Hiran: /* Solution 3: Make use of OoliteStarter */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
(details will follow)<br />
<br />
=== Solution 3: Make use of Oolite Starter ===<br />
[[Oolite Starter]] is a wrapper for Oolite that allows managing expansions and more.<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80419AppleMac2023-12-20T13:31:45Z<p>Hiran: /* Installing expansions on Oolite 1.90 */</p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this. <br />
<br />
There are several options to overcome this limitation:<br />
<br />
=== Solution 1: Install expansions manually. It is effort but possible ===<br />
<br />
=== Solution 2: Configure Oolite to access the expansion catalog from the new URL ===<br />
(details will follow)<br />
<br />
=== Solution 3: Make use of OoliteStarter ===<br />
(details will follow)<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=AppleMac&diff=80418AppleMac2023-12-20T13:29:44Z<p>Hiran: </p>
<hr />
<div>[[File:Late 2016 MacBook Pro.jpg|right|400px]]<br />
Oolite was originally written for the AppleMac.<br />
<br />
== Overview ==<br />
Whilst this meant that those playing Oolite on AppleMacs in the early days had an advantage, the haemorrhaging of AppleMac-friendly developers has led to the inability to fix recent issues (such as the loss of sound) and worries over eventual play on BigSur once backwards compatibility is abandoned by Apple. <br />
<br />
[[File:AppleMac Help.png|thumb|right|200px|AppleMac "help" (" ⌘ ? ") creates this drop-down in a full-screen game]]<br />
=== Advantages ===<br />
Some of the Oolite functionality is "built-in" to the AppleMac. This is most obvious when running the [http://www.oolite.org/download/ OXP developer releases] of Oolite, where the Debug console is built-in to the AppleMac.<br />
<br />
The OpenStep Legacy script is from the AppleMac OS <br />
<br />
=== Disadvantages ===<br />
*As Apple try more and more to suck money out of anything designed to work on an AppleMac, they have made opening an Oolite download on an AppleMac more difficult.<br />
*The ''Load Commander'' option on game start-up is also built in to the AppleMac, so one gets the standard AppleMac "open file" dialogue box, which gives no information about the save files other than their size and date (in Windows, for example, you get details of Elite rank, location and wealth).<br />
*The AppleMac parsing of Javascript is rather more tendentious than that of Windows, so, for example, oxp's will be rejected because of a wonky "quotations mark" which windows would just accept and interpret. On the other hand, if you write an oxp on your AppleMac, it should work happily on any other contraption (if you can ever get it to work on yours!!).<br />
*The newer AppleOS's use the control key for windows management, and this requires disabling if you want to use the control key in-game.<br />
*Many of the HOTAS setups are incompatible with the AppleMac, and thus only partially usable for Oolite.<br />
*The AppleMac OS hides files away from view, so finding your AddOns and Managed AddOns folders can be pains in the unmentionables. As can looking at the vanilla game code.<br />
*There are issues with the game sounds disappearing when playing for any length of time.<br />
<br />
== Running your new download of Oolite ==<br />
Newly-downloaded copies of Oolite are not allowed to run under AppleOS, because it’s “from an unidentified developer” (''ie'' none of us paid $300 to get a signature from Apple Inc.).<br />
<br />
=== Solution ===<br />
You can bypass this behaviour as follows:<br />
:Select Oolite in the Finder.<br />
:Hold down the <font color="Red">'''control'''</font> key and click the Oolite icon.<br />
:Select '''Open''' from the pop-up menu.<br />
:You will get the traditional ''This is an application downloaded from the Internet'' warning, and can now choose to open Oolite and start playing!<br />
<br />
== Installing expansions on Oolite 1.90 ==<br />
Oolite can be customized easily by installing expansion packs (OXP directories or OXZ files). There is a builtin expansion manager that downloads and installs expansions you select.<br />
They are accessed from the website oolite.org. Unfortunately the Oolite project has moved to a different domain oolite.space, and the all builds before v1.91 are not aware of this.<br />
<br />
=== Solution ===<br />
There are several options to overcome this limitation:<br />
* Install expansions manually. It is effort but possible<br />
* Configure Oolite to access the expansion catalog from the new URL (details will follow)<br />
* Make use of OoliteStarter (details will follow)<br />
<br />
== Precision Flying and the Control Key ==<br />
The precision flying ‘control’ key does not work well on the modern macs -<br />
<br />
Your Oolite window whizzes off to the side, is replaced by another window and you suddenly find that you are looking at something quite different (your cobra may indeed be flying much more precisely - but it's a tad difficult to ascertain this when the appropriate window has jumped into witchspace without you!)<br />
<br />
This is because the more recent MacOS's combine the control key with the arrow keys to activate ‘Mission Control’ (which manages the opened windows on the computer screen).<br />
<br />
=== Solution ===<br />
:1) You need to find the ‘Keyboard’ panel in System Preferences (3rd row down on my machine)<br />
:2) Then select the ‘shortcuts’ button on the top line of the window.<br />
:3) Choose ‘Mission Control’ in the left hand box.<br />
:4) Finally, ‘uncheck’ the relevant shortcuts (Mission Control, Application windows, move left a space, move right a space).<br />
<br />
Things should now work as they should!<br />
<br />
== HOTAS and AppleMac ==<br />
Some people find that using a HOTAS is invaluable for dog-fighting (It does not have to be - see [[User:Another_commander|Another_commander]]'s virtuoso display [https://www.youtube.com/watch?v=IHnjUjZVtgk here]). In ''theory'', every HOTAS should work on an AppleMac as AppleMac accepts the recognized standard USB HID devices as Windows and Linux do. The problem is with the HOTAS manufacturers adding on bells and whistles which then require software to interpret. They can't be bothered to write the software for Apple (or for Linux), and so things start to fall apart.<br />
<br />
=== Solutions ===<br />
==== Thrustmaster TFlight HOTAS 4/TM4 ====<br />
It seems that this is not compatible with the AppleMac, with the twist, throttle and axis on the back of the throttle not seeming functional.<br />
What neither Thrustmaster nor Apple can be bothered to tell you is that you need to keep the '''PS''', '''SHARE''' & '''OPTIONS''' buttons held down while you plug it into your AppleMac. The green light should then come on on your PS button, and you should find it fully functional.<br />
<br />
== Accessing the Vanilla Game Code ==<br />
=== Solution ===<br />
Download the current '''oolite-1.9?.zip''' from [https://github.com/OoliteProject/oolite/releases GitHub]. This will just expand, rather than install, and you will be able to look at the entire code.<br />
<br />
=== AppleMac peculiarities ===<br />
The so-called Oolite programme is really just an unopenable folder with the programme hidden inside, which starts when you click on the folder wrapping.<br />
<br />
== History ==<br />
Oolite was originally written by [[User:Aegidian|Aegidian]] for the AppleMac back in 2003 and then ported by [[User:Winston|Winston]] & [[David Taylor]] to Linux & Windows three years later. Our Second lead developer, [[User:Ahruman|Ahruman]] (2007-13) was also an AppleMac buff. It's been downhill ever since, sadly. So much so, that the introduction of Big Sur (MacOS 11) threatens to make Oolite unplayable once Apple phase out backwards compatibility, due to our lack of developers who know how to make Oolite compatible with Big Sur.<br />
<br />
== Links ==<br />
*[[Running Oolite-Mac]] contains notes about Building Oolite from source<br />
*Big Sur issues: [https://github.com/OoliteProject/oolite/issues/360 GitHub discussion] & [http://aegidian.org/bb/viewtopic.php?f=10&t=20939 BB discussion]<br />
*Game Sounds: BB Discussons: [http://aegidian.org/bb/viewtopic.php?f=10&t=12142 2012 (see 2nd paragraph)], [http://aegidian.org/bb/viewtopic.php?f=10&t=17682 2015]<br />
*Debug console issues: [http://www.aegidian.org/bb/viewtopic.php?f=10&t=20877 Problem with external debug console on Mac] (2021+)<br />
<br />
*[http://www.aegidian.org/bb/viewtopic.php?p=235670#p235670 Comparing AppleMac, Windows & Linux] (Cartoon & discussion, 2015)</div>Hiranhttps://wiki.alioth.net/index.php?title=Oolite_JavaScript_Reference:_Global&diff=80307Oolite JavaScript Reference: Global2023-12-12T07:53:14Z<p>Hiran: /* Quaternion */</p>
<hr />
<div>Global variables and functions are visible to all scripts. They are also properties of <code>[[#global|global]]</code>, which is itself a global variable and hence a property of itself.<br />
<br />
== Properties ==<br />
=== <code>clock</code> ===<br />
'''clock''' : {{oojsclass|Clock}} (read-only)<br />
This property allows an OXP to access the game clock's properties and methods.<br />
<br />
=== <code>defaultFont</code> ===<br />
'''defaultFont''' : Object (read-only)<br />
An object with a single method, <code>measureString(string)</code>, which returns the width of the specified string, as it would be shown on the screen, in '''ems'''. One em is the intrinsic unit size of a font; for example, if a font is rendered at 12 points, 1 em = 12 pt. The mission screen text area is 32 em wide.<br />
<br />
=== <code>galaxyNumber</code> ===<br />
'''galaxyNumber''' : Number (read-only)<br />
Returns the number of the galaxy the player is in.<br />
<br />
'''See also''': <code>[[Oolite JavaScript Reference: SystemInfo#galaxyID|galaxyID]]</code><br />
<br />
=== <code>global</code> ===<br />
'''global''' : Global (read-only)<br />
All global variables and functions are actually properties of the global object. The global object is a property of itself, and this is it.<br />
<br />
=== <code>guiScreen</code> ===<br />
'''guiScreen''' : String (read-only)<br />
Returns the screen the player is looking at. If in flight, this is <code>"GUI_SCREEN_MAIN"</code>. In 1.76, the other possible values are <code>"GUI_SCREEN_INTRO1"</code>, <code>"GUI_SCREEN_INTRO2"</code>, <code>"GUI_SCREEN_STATUS"</code>(F5), <code>"GUI_SCREEN_MANIFEST"</code>(F5F5), <code>"GUI_SCREEN_EQUIP_SHIP"</code>(F3), <code>"GUI_SCREEN_SHIPYARD"</code>(F3F3), <code>"GUI_SCREEN_LONG_RANGE_CHART"</code>(F6F6), <code>"GUI_SCREEN_SHORT_RANGE_CHART"</code>(F6), <code>"GUI_SCREEN_SYSTEM_DATA"</code>(F7), <code>"GUI_SCREEN_MARKET"</code>(F8), <code>"GUI_SCREEN_CONTRACTS"</code>, <code>"GUI_SCREEN_OPTIONS"</code>, <code>"GUI_SCREEN_GAMEOPTIONS"</code>, <code>"GUI_SCREEN_LOAD"</code>, <code>"GUI_SCREEN_SAVE"</code>, <code>"GUI_SCREEN_SAVE_OVERWRITE"</code>, <code>"GUI_SCREEN_STICKMAPPER"</code>, <code>"GUI_SCREEN_MISSION"</code> and <code>"GUI_SCREEN_REPORT"</code>. <br />
<br />
In 1.77, <code>"GUI_SCREEN_INTERFACES"</code>(F4) is added, and <code>"GUI_SCREEN_CONTRACTS"</code> is removed.<br />
<br />
In 1.81, <code>"GUI_SCREEN_MARKETINFO"</code>(F8F8) is added.<br />
<br />
=== <code>manifest</code> ===<br />
'''manifest''' : {{oojsclass|Manifest}} (read-only)<br />
An alias to <code>[[Oolite JavaScript Reference: PlayerShip#manifest|player.ship.manifest]]</code>.<br />
<br />
=== <code>mission</code> ===<br />
'''mission''' : {{oojsclass|Mission}} (read-only)<br />
See [[Oolite JavaScript Reference: Mission]].<br />
<br />
=== <code>missionVariables</code> ===<br />
'''missionVariables''' : Object (read-only)<br />
The <code>missionVariables</code> object stores values that are stored in saved games. This is the main way for scripts to store information permanently.<br />
<br />
Whenever a value is assigned to a property of <code>missionVariables</code>, it is converted to a string object and tracked with the player. When the value is read, it will be converted to a number if possible, otherwise returned as a string. Example:<br />
missionVariables.exampleVar = 42;<br />
let x = missionVariables.exampleVar; // x is now the number 42<br />
Do not use <code>false</code> in missionVariables! It will return <code>true</code> because it will be parsed as a string. Use 0 or 1 to store boolean values.<br />
<br />
You can store arrays using [http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON JSON] stringify and parse methods. For example:<br />
this.$MyArray = [];<br />
<br />
this.startUp = function() {<br />
var s = missionVariables.$MyArray;<br />
if( s && s.length > 0 ) this.$MyArray = JSON.parse(s);<br />
}<br />
<br />
this.playerWillSaveGame = function(message) {<br />
missionVariables.$MyArray = JSON.stringify(this.$MyArray);<br />
}<br />
Mission variables can also be used in legacy scripts and in [[descriptions.plist]] string expansions, by prefixing the name with <code>"mission_"</code>. Example:<br />
expandDescription("My variable is [mission_exampleVar].")<br />
Setting and retrieving mission variables has a significant overhead'''*'''. If a function needs to use a mission variable value several times, it is strongly recommended that it be copied into a local variable and, if necessary, stored back once. Example:<br />
let x = missionVariables.exampleVar;<br />
if (x < 3) x = processSmallValue(x);<br />
else x = processBigValue(x);<br />
missionVariables.exampleVar = x;<br />
Mission variable names may not begin with an underscore (“_”). Unassigned mission variables are always <code>null</code>.<br />
<br />
'''*''' On a computer where the loop <code>for (var i = 0; i < 1000; i++) {}</code> takes just 0.62 msec, the same loop with missionVarriables <code>for (missionVariables.i = 0; missionVariables.i < 1000; missionVariables.i++) {}</code> consumes a full 38 msec. That is 60 times longer.<br />
<br />
=== <code>oolite</code> ===<br />
'''oolite''' : {{oojsclass|Oolite}} (read-only)<br />
An object describing properties of the Oolite application; see [[Oolite JavaScript Reference: Oolite]].<br />
<br />
=== <code>player</code> ===<br />
'''player''' : {{oojsclass|Player}} (read-only)<br />
This property allows an OXP to access the player object's properties and methods.<br />
<br />
=== <code>system</code> ===<br />
'''system''' : {{oojsclass|System}} (read-only)<br />
This property allows an OXP to access the current system's properties and methods.<br />
<br />
=== <code>timeAccelerationFactor</code> ===<br />
'''timeAccelerationFactor''' : Number (read/write)<br />
Also known as TAF. Will change the ratio between game real time and actual real time (default is 1). The accepted range is between 0.0625 (1/16) and 16. Attempting to set numbers outside this range will reset the TAF to 1. (In end-user stable builds, this will be a read-only property with the value 1.)<br />
<br />
=== <code>worldScriptNames</code> ===<br />
'''worldScriptNames''' : Array of strings (read-only)<br />
A list of the names of world script objects, the keys of <code>[[#worldScripts|worldScripts]]</code>.<br />
<br />
=== <code>worldScripts</code> ===<br />
'''worldScripts''' : Object (read-only)<br />
All loaded world script objects. The keys are the <code>name</code> properties of the scripts.<br />
<br />
'''Example:'''<br />
log(worldScripts["oolite-nova"].version);<br />
<br />
== Methods ==<br />
=== <code>addFrameCallback</code> ===<br />
function '''addFrameCallback'''(callback : Function) : ''TrackingID''<br />
Registers a ''frame callback'' which will be invoked every frame, after entity updates but before rendering. This can be used to implement animations, to apply gradual changes in ship state, to build large data structures without risking reaching processing time limits by trying to do it all at once, or to watch variables which need a same-frame response to changes. The return value is a ''tracking ID'' which may be passed to <code>[[#removeFrameCallback|removeFrameCallback()]]</code>; the type and meaning of the tracking ID is unspecified and may change at any time. Frame callbacks are automatically removed when the game resets (for instance, when the player dies), but not at any other time.<br />
<br />
The callback is passed one parameter, <code>delta</code>, which is the time since the last frame (in [[Time_scales in Oolite|game clock time]]). Frame callbacks fire even when the game is paused, in which case <code>delta</code> is 0.<br />
<br />
'''Example:'''<br />
var sum = 0;<br />
this.$fcb = addFrameCallback(function (delta)<br />
{<br />
sum += delta;<br />
log("Time elapsed: " + sum + " (delta: " + delta + ")");<br />
});<br />
<br />
'''See also:''' <code>[[#removeFrameCallback|removeFrameCallback()]]</code>, <code>[[#isValidFrameCallback|isValidFrameCallback()]]</code>, and for repeated events with a longer repeat interval, use [[Oolite_JavaScript_Reference:_Timer|Timers]] instead.<br />
<br />
See [http://www.aegidian.org/bb/viewtopic.php?f=4&t=8941 RFC: frame callbacks] (2011)<br />
<br />
=== <code>displayNameForCommodity</code> ===<br />
function '''displayNameForCommodity'''(commodityName : String) : String<br />
Returns the display name corresponding to the specified commodity. Useful in conjunction with localisation OXPs, or expansions that rename commodities depending on which station / system the player is at.<br />
<br />
=== <code>expandDescription</code> ===<br />
function '''expandDescription'''(description : String [, locals : Object (Dictionary)]) : String<br />
Expands a string, substituting special tokens and any key inside square brackets with the substitution rules for [[Missiontext.plist#Special_Expansions|string expansions]].<br />
When local key/value pairs are provided, they take precedence over any other values.<br />
<br />
In Oolite 1.79 or later, this method uses a higher quality random number generator which does not have noticeable correlation problems when used for recursive expansion.<br />
<br />
'''Example:'''<br />
expandDescription("My ball is [my_color].", { my_color: "red" });<br />
<br />
=== <code>expandMissionText</code> ===<br />
function '''expandMissionText'''(textKey: String [, locals : Object (Dictionary)]) : String<br />
Load a string specified by <code>textKey</code> from [[missiontext.plist]], then perform <code>[[#expandDescription|expandDescription()]]</code>type substitutions on it, and also replace <code>"\n"</code> with line breaks. The <code>local</code> parameter works as with <code>[[#expandDescription|expandDescription()]]</code>.<br />
<br />
In Oolite 1.79 or later, this method uses a higher quality random number generator which does not have noticeable correlation problems when used for recursive expansion.<br />
<br />
'''Example:'''<br />
expandMissionText("oolite_trumble_title");<br />
<br />
=== <code>formatCredits</code> ===<br />
function '''formatCredits'''(value : number, [includeDeciCredits : boolean, [includeCurrencySymbol : boolean]]) : String<br />
Converts the <code>value</code> parameter to a string formatted in a currency friendly manner. If <code>includeDeciCredits</code> is <code>true</code> the string will be formatted to 1 decimal place. If <code>includeCurrencySymbol</code> is <code>true</code> an appropriate currency symbol following any localisation rules is included. The default currency symbol is a terminal ₢.<br />
<br />
=== <code>formatInteger</code> ===<br />
function '''formatInteger'''(value : number) : String<br />
Converts the <code>value</code> parameter to a string formatted as an integer following any localisation rules in place.<br />
<br />
=== <code>getGuiColorSettingForKey</code> ===<br />
{{oolite-method-added|1.87}}<br />
function '''getGuiColorSettingForKey'''(keyname : string) : Array<br />
Returns the current color for a particular keyname (referenced in the [[gui-settings.plist]] file). Returns an array of RGBA values.<br />
<br />
'''See also:''' <code>[[#setGuiColorSettingForKey|setGuiColorSettingForKey()]]</code><br />
<br />
=== <code>getScreenBackgroundForKey</code> ===<br />
{{oolite-method-added|1.85}}<br />
function '''getScreenBackgroundForKey'''(keyname : string) : guiTextureSpecifier<br />
Returns the guiTextureSpecifier for a particular keyname (referenced in the screenbackgrounds.plist file).<br />
<br />
''guiTextureSpecifier'' can be either a string or an object with the required key <code>name</code> and optional keys <code>width</code> and <code>height</code>. If neither width nor height is specified, the dimensions of the image are used. If only one is specified, the other is calculated such that the image is not distorted. The scale unit is 1/480 of the height of the window; in other words, the window is always considered 480 units high, and the width depends on the aspect ratio of the window.<br />
<br />
'''Example:'''<br />
getScreenBackgroundForKey("long_range_chart_mission");<br />
<br />
'''See also:''' <code>[[#setScreenBackgroundForKey|setScreenBackgroundForKey()]]</code><br />
<br />
=== <code>isValidFrameCallback</code> ===<br />
function '''isValidFrameCallback'''(trackingID: ''TrackingID'') : Boolean<br />
Returns <code>true</code> if <code>trackingID</code> identifies a frame callback which has been registered with <code>[[#addFrameCallback|addFrameCallback()]]</code> and not yet removed. (There should be no need to use this except for debugging and testing.)<br />
<br />
'''See also:''' <code>[[#addFrameCallback|addFrameCallback()]]</code>, <code>[[#removeFrameCallback|removeFrameCallback()]]</code><br />
<br />
=== <code>log</code> ===<br />
function '''log'''([messageClass : String ,] message : String)<br />
Writes a message to Oolite's log. The optional messageClass parameter can be used to specify which type of message is written to the log. The default messageClass is <code>script.debug.message</code>. When set to <code>true</code>, the messages will be written to the log file. The classes to be logged are set in the file <code>logcontrol.plist</code>. messageClasses not listed in <code>logcontrol.plist</code> are always logged.<br />
<br />
'''Example:'''<br />
log("myOXP.init","MyOXP initialised and ready!");<br />
<br />
You can temporarily enable/disable logging the above message by typing in the console:<br />
console.setDisplayMessagesInClass("myOXP.init", true/false)<br />
<br />
===<code>pauseGame</code>===<br />
function '''pauseGame'''() : Boolean<br />
Pauses the game. It does not work on screens that cannot be paused by keyboard: mission screens, long range chart, arrival report, save menu. In those cases, the method returns <code>false</code>. Otherwise, it pauses the game and returns <code>true</code>.<br />
<br />
This was added in v1.87 (the exact version is unconfirmed)<br />
<br />
'''See also:''' [http://aegidian.org/bb/viewtopic.php?f=6&t=18900 Scriptable pause?]<br />
<br />
=== <code>randomInhabitantsDescription</code> ===<br />
function '''randomInhabitantsDescription'''([plural : boolean, default true]) : String<br />
Returns a random sentient species name, like <code>"Large Red Fat Insects"</code> or <code>"Human Colonials"</code>, following the same pattern (and probability distribution) as for planet inhabitants.<br />
<br />
'''Example:'''<br />
player.consoleMessage("You'll meet a " + randomInhabitantsDescription(false) + ". She'll be with a group of " + randomInhabitantsDescription() + ".");<br />
<br />
=== <code>randomName</code> ===<br />
function '''randomName'''() : String<br />
Returns a random capitalised word, suitable for use as name, or indeed surname.<br />
<br />
'''Example:'''<br />
player.consoleMessage(randomName() + " " + randomName() + " rules this system with an iron fist.");<br />
<br />
=== <code>removeFrameCallback</code> ===<br />
function '''removeFrameCallback'''(trackingID : ''TrackingID'')<br />
Removes a frame callback previously registered with <code>[[#addFrameCallback|addFrameCallback()]]</code>.<br />
<br />
'''See also:''' <code>[[#addFrameCallback|addFrameCallback()]]</code>, <code>[[#isValidFrameCallback|isValidFrameCallback()]]</code><br />
<br />
=== <code>setGuiColorSettingForKey</code> ===<br />
{{oolite-method-added|1.87}}<br />
function '''setGuiColorSettingorKey'''(keyname : string , [[Materials_in_Oolite#Colour_specifiers|Colour specifier]] : string) <br />
Override the color setting for a particular keyname (referenced in the [[gui-settings.plist]] file) with the specified color. This override is only for the current play-session and does not get written to [[gui-settings.plist]].<br />
<br />
'''Example:'''<br />
setGuiColorSettingForKey("screen_title_color", "whiteColor");<br />
<br />
'''See also:''' <code>[[#getGuiColorSettingForKey|getGuiColorSettingForKey()]]</code><br />
<br />
=== <code>setScreenBackground</code> ===<br />
function '''setScreenBackground'''(image : ''guiTextureSpecifier'') <br />
Temporary override that sets the background of the current gui screen to the specified image. Override is lost after the player switches screens.<br />
<br />
''guiTextureSpecifier'' can be either a string or an object with the required key <code>name</code> and optional keys <code>width</code> and <code>height</code>. If neither width nor height is specified, the dimensions of the image are used. If only one is specified, the other is calculated such that the image is not distorted. The scale unit is 1/480 of the height of the window; in other words, the window is always considered 480 units high, and the width depends on the aspect ratio of the window.<br />
<br />
'''Example:'''<br />
setScreenBackground({ name: "oolite-nova-system.png", height: 480 });<br />
<br />
=== <code>setScreenBackgroundForKey</code> ===<br />
{{oolite-method-added|1.85}}<br />
function '''setScreenBackgroundForKey'''(keyname : string, image : ''guiTextureSpecifier'') <br />
Override the background for a particular keyname (referenced in the screenbackgrounds.plist file) with the specified image. Override is only for the current play-session only and does not get written out to screenbackgrounds.plist.<br />
<br />
''guiTextureSpecifier'' can be either a string or an object with the required key <code>name</code> and optional keys <code>width</code> and <code>height</code>. If neither width nor height is specified, the dimensions of the image are used. If only one is specified, the other is calculated such that the image is not distorted. The scale unit is 1/480 of the height of the window; in other words, the window is always considered 480 units high, and the width depends on the aspect ratio of the window.<br />
<br />
'''Example:'''<br />
setScreenBackgroundForKey("long_range_chart_mission", { name: "my_mission_background.png", height: 480 });<br />
<br />
'''See also:''' <code>[[#getScreenBackgroundForKey|getScreenBackgroundForKey()]]</code><br />
<br />
=== <code>setScreenOverlay</code> ===<br />
function '''setScreenOverlay'''(image : ''guiTextureSpecifier'') <br />
Temporary override that sets the overlay of the current gui screen to the specified image. Override is lost after the player switches screens.<br />
<br />
See <code>[[#setScreenBackground|setScreenBackground()]]</code> for a discussion of ''guiTextureSpecifier''.<br />
<br />
'''Example:'''<br />
setScreenOverlay('trumblebox.png');<br />
<br />
=== <code>takeSnapShot</code> ===<br />
function '''takeSnapShot'''([filename : String]) : Boolean<br />
Saves a snapshot of the current screen to your hard disk. A filename is optional. When a name is used, only alphanumeric values and <code>"-"</code> and <code>"_"</code> are allowed for the filename. The appropriate extension for the used operating system (like .png) is added by Oolite and should not be part of the filename.<br><br />
When a filename already exists, it is not overwritten but the string <code>"-xxx"</code> is added, starting with <code>"-001"</code>.<br><br />
<code>takeSnapShot()</code> will not be available in the stable release version of Oolite, but will be available in a special OXP developer release.<br />
<br />
'''Example:'''<br />
takeSnapShot('mission_target_1');<br />
<br />
[[Category:Oolite JavaScript Reference]]<br />
<br />
== Reserved Words ==<br />
<br />
=== <code>Quaternion</code> ===<br />
<br />
[[Oolite_JavaScript_Reference:_Quaternion]]<br />
<br />
=== <code>Vector3D</code> ===<br />
<br />
[[Oolite_JavaScript_Reference:_Vector3D]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Oolite_JavaScript_Reference:_Global&diff=80306Oolite JavaScript Reference: Global2023-12-12T07:52:55Z<p>Hiran: /* Quaternion */</p>
<hr />
<div>Global variables and functions are visible to all scripts. They are also properties of <code>[[#global|global]]</code>, which is itself a global variable and hence a property of itself.<br />
<br />
== Properties ==<br />
=== <code>clock</code> ===<br />
'''clock''' : {{oojsclass|Clock}} (read-only)<br />
This property allows an OXP to access the game clock's properties and methods.<br />
<br />
=== <code>defaultFont</code> ===<br />
'''defaultFont''' : Object (read-only)<br />
An object with a single method, <code>measureString(string)</code>, which returns the width of the specified string, as it would be shown on the screen, in '''ems'''. One em is the intrinsic unit size of a font; for example, if a font is rendered at 12 points, 1 em = 12 pt. The mission screen text area is 32 em wide.<br />
<br />
=== <code>galaxyNumber</code> ===<br />
'''galaxyNumber''' : Number (read-only)<br />
Returns the number of the galaxy the player is in.<br />
<br />
'''See also''': <code>[[Oolite JavaScript Reference: SystemInfo#galaxyID|galaxyID]]</code><br />
<br />
=== <code>global</code> ===<br />
'''global''' : Global (read-only)<br />
All global variables and functions are actually properties of the global object. The global object is a property of itself, and this is it.<br />
<br />
=== <code>guiScreen</code> ===<br />
'''guiScreen''' : String (read-only)<br />
Returns the screen the player is looking at. If in flight, this is <code>"GUI_SCREEN_MAIN"</code>. In 1.76, the other possible values are <code>"GUI_SCREEN_INTRO1"</code>, <code>"GUI_SCREEN_INTRO2"</code>, <code>"GUI_SCREEN_STATUS"</code>(F5), <code>"GUI_SCREEN_MANIFEST"</code>(F5F5), <code>"GUI_SCREEN_EQUIP_SHIP"</code>(F3), <code>"GUI_SCREEN_SHIPYARD"</code>(F3F3), <code>"GUI_SCREEN_LONG_RANGE_CHART"</code>(F6F6), <code>"GUI_SCREEN_SHORT_RANGE_CHART"</code>(F6), <code>"GUI_SCREEN_SYSTEM_DATA"</code>(F7), <code>"GUI_SCREEN_MARKET"</code>(F8), <code>"GUI_SCREEN_CONTRACTS"</code>, <code>"GUI_SCREEN_OPTIONS"</code>, <code>"GUI_SCREEN_GAMEOPTIONS"</code>, <code>"GUI_SCREEN_LOAD"</code>, <code>"GUI_SCREEN_SAVE"</code>, <code>"GUI_SCREEN_SAVE_OVERWRITE"</code>, <code>"GUI_SCREEN_STICKMAPPER"</code>, <code>"GUI_SCREEN_MISSION"</code> and <code>"GUI_SCREEN_REPORT"</code>. <br />
<br />
In 1.77, <code>"GUI_SCREEN_INTERFACES"</code>(F4) is added, and <code>"GUI_SCREEN_CONTRACTS"</code> is removed.<br />
<br />
In 1.81, <code>"GUI_SCREEN_MARKETINFO"</code>(F8F8) is added.<br />
<br />
=== <code>manifest</code> ===<br />
'''manifest''' : {{oojsclass|Manifest}} (read-only)<br />
An alias to <code>[[Oolite JavaScript Reference: PlayerShip#manifest|player.ship.manifest]]</code>.<br />
<br />
=== <code>mission</code> ===<br />
'''mission''' : {{oojsclass|Mission}} (read-only)<br />
See [[Oolite JavaScript Reference: Mission]].<br />
<br />
=== <code>missionVariables</code> ===<br />
'''missionVariables''' : Object (read-only)<br />
The <code>missionVariables</code> object stores values that are stored in saved games. This is the main way for scripts to store information permanently.<br />
<br />
Whenever a value is assigned to a property of <code>missionVariables</code>, it is converted to a string object and tracked with the player. When the value is read, it will be converted to a number if possible, otherwise returned as a string. Example:<br />
missionVariables.exampleVar = 42;<br />
let x = missionVariables.exampleVar; // x is now the number 42<br />
Do not use <code>false</code> in missionVariables! It will return <code>true</code> because it will be parsed as a string. Use 0 or 1 to store boolean values.<br />
<br />
You can store arrays using [http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON JSON] stringify and parse methods. For example:<br />
this.$MyArray = [];<br />
<br />
this.startUp = function() {<br />
var s = missionVariables.$MyArray;<br />
if( s && s.length > 0 ) this.$MyArray = JSON.parse(s);<br />
}<br />
<br />
this.playerWillSaveGame = function(message) {<br />
missionVariables.$MyArray = JSON.stringify(this.$MyArray);<br />
}<br />
Mission variables can also be used in legacy scripts and in [[descriptions.plist]] string expansions, by prefixing the name with <code>"mission_"</code>. Example:<br />
expandDescription("My variable is [mission_exampleVar].")<br />
Setting and retrieving mission variables has a significant overhead'''*'''. If a function needs to use a mission variable value several times, it is strongly recommended that it be copied into a local variable and, if necessary, stored back once. Example:<br />
let x = missionVariables.exampleVar;<br />
if (x < 3) x = processSmallValue(x);<br />
else x = processBigValue(x);<br />
missionVariables.exampleVar = x;<br />
Mission variable names may not begin with an underscore (“_”). Unassigned mission variables are always <code>null</code>.<br />
<br />
'''*''' On a computer where the loop <code>for (var i = 0; i < 1000; i++) {}</code> takes just 0.62 msec, the same loop with missionVarriables <code>for (missionVariables.i = 0; missionVariables.i < 1000; missionVariables.i++) {}</code> consumes a full 38 msec. That is 60 times longer.<br />
<br />
=== <code>oolite</code> ===<br />
'''oolite''' : {{oojsclass|Oolite}} (read-only)<br />
An object describing properties of the Oolite application; see [[Oolite JavaScript Reference: Oolite]].<br />
<br />
=== <code>player</code> ===<br />
'''player''' : {{oojsclass|Player}} (read-only)<br />
This property allows an OXP to access the player object's properties and methods.<br />
<br />
=== <code>system</code> ===<br />
'''system''' : {{oojsclass|System}} (read-only)<br />
This property allows an OXP to access the current system's properties and methods.<br />
<br />
=== <code>timeAccelerationFactor</code> ===<br />
'''timeAccelerationFactor''' : Number (read/write)<br />
Also known as TAF. Will change the ratio between game real time and actual real time (default is 1). The accepted range is between 0.0625 (1/16) and 16. Attempting to set numbers outside this range will reset the TAF to 1. (In end-user stable builds, this will be a read-only property with the value 1.)<br />
<br />
=== <code>worldScriptNames</code> ===<br />
'''worldScriptNames''' : Array of strings (read-only)<br />
A list of the names of world script objects, the keys of <code>[[#worldScripts|worldScripts]]</code>.<br />
<br />
=== <code>worldScripts</code> ===<br />
'''worldScripts''' : Object (read-only)<br />
All loaded world script objects. The keys are the <code>name</code> properties of the scripts.<br />
<br />
'''Example:'''<br />
log(worldScripts["oolite-nova"].version);<br />
<br />
== Methods ==<br />
=== <code>addFrameCallback</code> ===<br />
function '''addFrameCallback'''(callback : Function) : ''TrackingID''<br />
Registers a ''frame callback'' which will be invoked every frame, after entity updates but before rendering. This can be used to implement animations, to apply gradual changes in ship state, to build large data structures without risking reaching processing time limits by trying to do it all at once, or to watch variables which need a same-frame response to changes. The return value is a ''tracking ID'' which may be passed to <code>[[#removeFrameCallback|removeFrameCallback()]]</code>; the type and meaning of the tracking ID is unspecified and may change at any time. Frame callbacks are automatically removed when the game resets (for instance, when the player dies), but not at any other time.<br />
<br />
The callback is passed one parameter, <code>delta</code>, which is the time since the last frame (in [[Time_scales in Oolite|game clock time]]). Frame callbacks fire even when the game is paused, in which case <code>delta</code> is 0.<br />
<br />
'''Example:'''<br />
var sum = 0;<br />
this.$fcb = addFrameCallback(function (delta)<br />
{<br />
sum += delta;<br />
log("Time elapsed: " + sum + " (delta: " + delta + ")");<br />
});<br />
<br />
'''See also:''' <code>[[#removeFrameCallback|removeFrameCallback()]]</code>, <code>[[#isValidFrameCallback|isValidFrameCallback()]]</code>, and for repeated events with a longer repeat interval, use [[Oolite_JavaScript_Reference:_Timer|Timers]] instead.<br />
<br />
See [http://www.aegidian.org/bb/viewtopic.php?f=4&t=8941 RFC: frame callbacks] (2011)<br />
<br />
=== <code>displayNameForCommodity</code> ===<br />
function '''displayNameForCommodity'''(commodityName : String) : String<br />
Returns the display name corresponding to the specified commodity. Useful in conjunction with localisation OXPs, or expansions that rename commodities depending on which station / system the player is at.<br />
<br />
=== <code>expandDescription</code> ===<br />
function '''expandDescription'''(description : String [, locals : Object (Dictionary)]) : String<br />
Expands a string, substituting special tokens and any key inside square brackets with the substitution rules for [[Missiontext.plist#Special_Expansions|string expansions]].<br />
When local key/value pairs are provided, they take precedence over any other values.<br />
<br />
In Oolite 1.79 or later, this method uses a higher quality random number generator which does not have noticeable correlation problems when used for recursive expansion.<br />
<br />
'''Example:'''<br />
expandDescription("My ball is [my_color].", { my_color: "red" });<br />
<br />
=== <code>expandMissionText</code> ===<br />
function '''expandMissionText'''(textKey: String [, locals : Object (Dictionary)]) : String<br />
Load a string specified by <code>textKey</code> from [[missiontext.plist]], then perform <code>[[#expandDescription|expandDescription()]]</code>type substitutions on it, and also replace <code>"\n"</code> with line breaks. The <code>local</code> parameter works as with <code>[[#expandDescription|expandDescription()]]</code>.<br />
<br />
In Oolite 1.79 or later, this method uses a higher quality random number generator which does not have noticeable correlation problems when used for recursive expansion.<br />
<br />
'''Example:'''<br />
expandMissionText("oolite_trumble_title");<br />
<br />
=== <code>formatCredits</code> ===<br />
function '''formatCredits'''(value : number, [includeDeciCredits : boolean, [includeCurrencySymbol : boolean]]) : String<br />
Converts the <code>value</code> parameter to a string formatted in a currency friendly manner. If <code>includeDeciCredits</code> is <code>true</code> the string will be formatted to 1 decimal place. If <code>includeCurrencySymbol</code> is <code>true</code> an appropriate currency symbol following any localisation rules is included. The default currency symbol is a terminal ₢.<br />
<br />
=== <code>formatInteger</code> ===<br />
function '''formatInteger'''(value : number) : String<br />
Converts the <code>value</code> parameter to a string formatted as an integer following any localisation rules in place.<br />
<br />
=== <code>getGuiColorSettingForKey</code> ===<br />
{{oolite-method-added|1.87}}<br />
function '''getGuiColorSettingForKey'''(keyname : string) : Array<br />
Returns the current color for a particular keyname (referenced in the [[gui-settings.plist]] file). Returns an array of RGBA values.<br />
<br />
'''See also:''' <code>[[#setGuiColorSettingForKey|setGuiColorSettingForKey()]]</code><br />
<br />
=== <code>getScreenBackgroundForKey</code> ===<br />
{{oolite-method-added|1.85}}<br />
function '''getScreenBackgroundForKey'''(keyname : string) : guiTextureSpecifier<br />
Returns the guiTextureSpecifier for a particular keyname (referenced in the screenbackgrounds.plist file).<br />
<br />
''guiTextureSpecifier'' can be either a string or an object with the required key <code>name</code> and optional keys <code>width</code> and <code>height</code>. If neither width nor height is specified, the dimensions of the image are used. If only one is specified, the other is calculated such that the image is not distorted. The scale unit is 1/480 of the height of the window; in other words, the window is always considered 480 units high, and the width depends on the aspect ratio of the window.<br />
<br />
'''Example:'''<br />
getScreenBackgroundForKey("long_range_chart_mission");<br />
<br />
'''See also:''' <code>[[#setScreenBackgroundForKey|setScreenBackgroundForKey()]]</code><br />
<br />
=== <code>isValidFrameCallback</code> ===<br />
function '''isValidFrameCallback'''(trackingID: ''TrackingID'') : Boolean<br />
Returns <code>true</code> if <code>trackingID</code> identifies a frame callback which has been registered with <code>[[#addFrameCallback|addFrameCallback()]]</code> and not yet removed. (There should be no need to use this except for debugging and testing.)<br />
<br />
'''See also:''' <code>[[#addFrameCallback|addFrameCallback()]]</code>, <code>[[#removeFrameCallback|removeFrameCallback()]]</code><br />
<br />
=== <code>log</code> ===<br />
function '''log'''([messageClass : String ,] message : String)<br />
Writes a message to Oolite's log. The optional messageClass parameter can be used to specify which type of message is written to the log. The default messageClass is <code>script.debug.message</code>. When set to <code>true</code>, the messages will be written to the log file. The classes to be logged are set in the file <code>logcontrol.plist</code>. messageClasses not listed in <code>logcontrol.plist</code> are always logged.<br />
<br />
'''Example:'''<br />
log("myOXP.init","MyOXP initialised and ready!");<br />
<br />
You can temporarily enable/disable logging the above message by typing in the console:<br />
console.setDisplayMessagesInClass("myOXP.init", true/false)<br />
<br />
===<code>pauseGame</code>===<br />
function '''pauseGame'''() : Boolean<br />
Pauses the game. It does not work on screens that cannot be paused by keyboard: mission screens, long range chart, arrival report, save menu. In those cases, the method returns <code>false</code>. Otherwise, it pauses the game and returns <code>true</code>.<br />
<br />
This was added in v1.87 (the exact version is unconfirmed)<br />
<br />
'''See also:''' [http://aegidian.org/bb/viewtopic.php?f=6&t=18900 Scriptable pause?]<br />
<br />
=== <code>randomInhabitantsDescription</code> ===<br />
function '''randomInhabitantsDescription'''([plural : boolean, default true]) : String<br />
Returns a random sentient species name, like <code>"Large Red Fat Insects"</code> or <code>"Human Colonials"</code>, following the same pattern (and probability distribution) as for planet inhabitants.<br />
<br />
'''Example:'''<br />
player.consoleMessage("You'll meet a " + randomInhabitantsDescription(false) + ". She'll be with a group of " + randomInhabitantsDescription() + ".");<br />
<br />
=== <code>randomName</code> ===<br />
function '''randomName'''() : String<br />
Returns a random capitalised word, suitable for use as name, or indeed surname.<br />
<br />
'''Example:'''<br />
player.consoleMessage(randomName() + " " + randomName() + " rules this system with an iron fist.");<br />
<br />
=== <code>removeFrameCallback</code> ===<br />
function '''removeFrameCallback'''(trackingID : ''TrackingID'')<br />
Removes a frame callback previously registered with <code>[[#addFrameCallback|addFrameCallback()]]</code>.<br />
<br />
'''See also:''' <code>[[#addFrameCallback|addFrameCallback()]]</code>, <code>[[#isValidFrameCallback|isValidFrameCallback()]]</code><br />
<br />
=== <code>setGuiColorSettingForKey</code> ===<br />
{{oolite-method-added|1.87}}<br />
function '''setGuiColorSettingorKey'''(keyname : string , [[Materials_in_Oolite#Colour_specifiers|Colour specifier]] : string) <br />
Override the color setting for a particular keyname (referenced in the [[gui-settings.plist]] file) with the specified color. This override is only for the current play-session and does not get written to [[gui-settings.plist]].<br />
<br />
'''Example:'''<br />
setGuiColorSettingForKey("screen_title_color", "whiteColor");<br />
<br />
'''See also:''' <code>[[#getGuiColorSettingForKey|getGuiColorSettingForKey()]]</code><br />
<br />
=== <code>setScreenBackground</code> ===<br />
function '''setScreenBackground'''(image : ''guiTextureSpecifier'') <br />
Temporary override that sets the background of the current gui screen to the specified image. Override is lost after the player switches screens.<br />
<br />
''guiTextureSpecifier'' can be either a string or an object with the required key <code>name</code> and optional keys <code>width</code> and <code>height</code>. If neither width nor height is specified, the dimensions of the image are used. If only one is specified, the other is calculated such that the image is not distorted. The scale unit is 1/480 of the height of the window; in other words, the window is always considered 480 units high, and the width depends on the aspect ratio of the window.<br />
<br />
'''Example:'''<br />
setScreenBackground({ name: "oolite-nova-system.png", height: 480 });<br />
<br />
=== <code>setScreenBackgroundForKey</code> ===<br />
{{oolite-method-added|1.85}}<br />
function '''setScreenBackgroundForKey'''(keyname : string, image : ''guiTextureSpecifier'') <br />
Override the background for a particular keyname (referenced in the screenbackgrounds.plist file) with the specified image. Override is only for the current play-session only and does not get written out to screenbackgrounds.plist.<br />
<br />
''guiTextureSpecifier'' can be either a string or an object with the required key <code>name</code> and optional keys <code>width</code> and <code>height</code>. If neither width nor height is specified, the dimensions of the image are used. If only one is specified, the other is calculated such that the image is not distorted. The scale unit is 1/480 of the height of the window; in other words, the window is always considered 480 units high, and the width depends on the aspect ratio of the window.<br />
<br />
'''Example:'''<br />
setScreenBackgroundForKey("long_range_chart_mission", { name: "my_mission_background.png", height: 480 });<br />
<br />
'''See also:''' <code>[[#getScreenBackgroundForKey|getScreenBackgroundForKey()]]</code><br />
<br />
=== <code>setScreenOverlay</code> ===<br />
function '''setScreenOverlay'''(image : ''guiTextureSpecifier'') <br />
Temporary override that sets the overlay of the current gui screen to the specified image. Override is lost after the player switches screens.<br />
<br />
See <code>[[#setScreenBackground|setScreenBackground()]]</code> for a discussion of ''guiTextureSpecifier''.<br />
<br />
'''Example:'''<br />
setScreenOverlay('trumblebox.png');<br />
<br />
=== <code>takeSnapShot</code> ===<br />
function '''takeSnapShot'''([filename : String]) : Boolean<br />
Saves a snapshot of the current screen to your hard disk. A filename is optional. When a name is used, only alphanumeric values and <code>"-"</code> and <code>"_"</code> are allowed for the filename. The appropriate extension for the used operating system (like .png) is added by Oolite and should not be part of the filename.<br><br />
When a filename already exists, it is not overwritten but the string <code>"-xxx"</code> is added, starting with <code>"-001"</code>.<br><br />
<code>takeSnapShot()</code> will not be available in the stable release version of Oolite, but will be available in a special OXP developer release.<br />
<br />
'''Example:'''<br />
takeSnapShot('mission_target_1');<br />
<br />
[[Category:Oolite JavaScript Reference]]<br />
<br />
== Reserved Words ==<br />
<br />
=== <code>Quaternion</code> ===<br />
<br />
[[https://wiki.alioth.net/index.php/Oolite_JavaScript_Reference:_Quaternion]]<br />
<br />
=== <code>Vector3D</code> ===<br />
<br />
[[Oolite_JavaScript_Reference:_Vector3D]]</div>Hiranhttps://wiki.alioth.net/index.php?title=Oolite_JavaScript_Reference:_Global&diff=80305Oolite JavaScript Reference: Global2023-12-12T07:52:30Z<p>Hiran: /* Vector3D */</p>
<hr />
<div>Global variables and functions are visible to all scripts. They are also properties of <code>[[#global|global]]</code>, which is itself a global variable and hence a property of itself.<br />
<br />
== Properties ==<br />
=== <code>clock</code> ===<br />
'''clock''' : {{oojsclass|Clock}} (read-only)<br />
This property allows an OXP to access the game clock's properties and methods.<br />
<br />
=== <code>defaultFont</code> ===<br />
'''defaultFont''' : Object (read-only)<br />
An object with a single method, <code>measureString(string)</code>, which returns the width of the specified string, as it would be shown on the screen, in '''ems'''. One em is the intrinsic unit size of a font; for example, if a font is rendered at 12 points, 1 em = 12 pt. The mission screen text area is 32 em wide.<br />
<br />
=== <code>galaxyNumber</code> ===<br />
'''galaxyNumber''' : Number (read-only)<br />
Returns the number of the galaxy the player is in.<br />
<br />
'''See also''': <code>[[Oolite JavaScript Reference: SystemInfo#galaxyID|galaxyID]]</code><br />
<br />
=== <code>global</code> ===<br />
'''global''' : Global (read-only)<br />
All global variables and functions are actually properties of the global object. The global object is a property of itself, and this is it.<br />
<br />
=== <code>guiScreen</code> ===<br />
'''guiScreen''' : String (read-only)<br />
Returns the screen the player is looking at. If in flight, this is <code>"GUI_SCREEN_MAIN"</code>. In 1.76, the other possible values are <code>"GUI_SCREEN_INTRO1"</code>, <code>"GUI_SCREEN_INTRO2"</code>, <code>"GUI_SCREEN_STATUS"</code>(F5), <code>"GUI_SCREEN_MANIFEST"</code>(F5F5), <code>"GUI_SCREEN_EQUIP_SHIP"</code>(F3), <code>"GUI_SCREEN_SHIPYARD"</code>(F3F3), <code>"GUI_SCREEN_LONG_RANGE_CHART"</code>(F6F6), <code>"GUI_SCREEN_SHORT_RANGE_CHART"</code>(F6), <code>"GUI_SCREEN_SYSTEM_DATA"</code>(F7), <code>"GUI_SCREEN_MARKET"</code>(F8), <code>"GUI_SCREEN_CONTRACTS"</code>, <code>"GUI_SCREEN_OPTIONS"</code>, <code>"GUI_SCREEN_GAMEOPTIONS"</code>, <code>"GUI_SCREEN_LOAD"</code>, <code>"GUI_SCREEN_SAVE"</code>, <code>"GUI_SCREEN_SAVE_OVERWRITE"</code>, <code>"GUI_SCREEN_STICKMAPPER"</code>, <code>"GUI_SCREEN_MISSION"</code> and <code>"GUI_SCREEN_REPORT"</code>. <br />
<br />
In 1.77, <code>"GUI_SCREEN_INTERFACES"</code>(F4) is added, and <code>"GUI_SCREEN_CONTRACTS"</code> is removed.<br />
<br />
In 1.81, <code>"GUI_SCREEN_MARKETINFO"</code>(F8F8) is added.<br />
<br />
=== <code>manifest</code> ===<br />
'''manifest''' : {{oojsclass|Manifest}} (read-only)<br />
An alias to <code>[[Oolite JavaScript Reference: PlayerShip#manifest|player.ship.manifest]]</code>.<br />
<br />
=== <code>mission</code> ===<br />
'''mission''' : {{oojsclass|Mission}} (read-only)<br />
See [[Oolite JavaScript Reference: Mission]].<br />
<br />
=== <code>missionVariables</code> ===<br />
'''missionVariables''' : Object (read-only)<br />
The <code>missionVariables</code> object stores values that are stored in saved games. This is the main way for scripts to store information permanently.<br />
<br />
Whenever a value is assigned to a property of <code>missionVariables</code>, it is converted to a string object and tracked with the player. When the value is read, it will be converted to a number if possible, otherwise returned as a string. Example:<br />
missionVariables.exampleVar = 42;<br />
let x = missionVariables.exampleVar; // x is now the number 42<br />
Do not use <code>false</code> in missionVariables! It will return <code>true</code> because it will be parsed as a string. Use 0 or 1 to store boolean values.<br />
<br />
You can store arrays using [http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON JSON] stringify and parse methods. For example:<br />
this.$MyArray = [];<br />
<br />
this.startUp = function() {<br />
var s = missionVariables.$MyArray;<br />
if( s && s.length > 0 ) this.$MyArray = JSON.parse(s);<br />
}<br />
<br />
this.playerWillSaveGame = function(message) {<br />
missionVariables.$MyArray = JSON.stringify(this.$MyArray);<br />
}<br />
Mission variables can also be used in legacy scripts and in [[descriptions.plist]] string expansions, by prefixing the name with <code>"mission_"</code>. Example:<br />
expandDescription("My variable is [mission_exampleVar].")<br />
Setting and retrieving mission variables has a significant overhead'''*'''. If a function needs to use a mission variable value several times, it is strongly recommended that it be copied into a local variable and, if necessary, stored back once. Example:<br />
let x = missionVariables.exampleVar;<br />
if (x < 3) x = processSmallValue(x);<br />
else x = processBigValue(x);<br />
missionVariables.exampleVar = x;<br />
Mission variable names may not begin with an underscore (“_”). Unassigned mission variables are always <code>null</code>.<br />
<br />
'''*''' On a computer where the loop <code>for (var i = 0; i < 1000; i++) {}</code> takes just 0.62 msec, the same loop with missionVarriables <code>for (missionVariables.i = 0; missionVariables.i < 1000; missionVariables.i++) {}</code> consumes a full 38 msec. That is 60 times longer.<br />
<br />
=== <code>oolite</code> ===<br />
'''oolite''' : {{oojsclass|Oolite}} (read-only)<br />
An object describing properties of the Oolite application; see [[Oolite JavaScript Reference: Oolite]].<br />
<br />
=== <code>player</code> ===<br />
'''player''' : {{oojsclass|Player}} (read-only)<br />
This property allows an OXP to access the player object's properties and methods.<br />
<br />
=== <code>system</code> ===<br />
'''system''' : {{oojsclass|System}} (read-only)<br />
This property allows an OXP to access the current system's properties and methods.<br />
<br />
=== <code>timeAccelerationFactor</code> ===<br />
'''timeAccelerationFactor''' : Number (read/write)<br />
Also known as TAF. Will change the ratio between game real time and actual real time (default is 1). The accepted range is between 0.0625 (1/16) and 16. Attempting to set numbers outside this range will reset the TAF to 1. (In end-user stable builds, this will be a read-only property with the value 1.)<br />
<br />
=== <code>worldScriptNames</code> ===<br />
'''worldScriptNames''' : Array of strings (read-only)<br />
A list of the names of world script objects, the keys of <code>[[#worldScripts|worldScripts]]</code>.<br />
<br />
=== <code>worldScripts</code> ===<br />
'''worldScripts''' : Object (read-only)<br />
All loaded world script objects. The keys are the <code>name</code> properties of the scripts.<br />
<br />
'''Example:'''<br />
log(worldScripts["oolite-nova"].version);<br />
<br />
== Methods ==<br />
=== <code>addFrameCallback</code> ===<br />
function '''addFrameCallback'''(callback : Function) : ''TrackingID''<br />
Registers a ''frame callback'' which will be invoked every frame, after entity updates but before rendering. This can be used to implement animations, to apply gradual changes in ship state, to build large data structures without risking reaching processing time limits by trying to do it all at once, or to watch variables which need a same-frame response to changes. The return value is a ''tracking ID'' which may be passed to <code>[[#removeFrameCallback|removeFrameCallback()]]</code>; the type and meaning of the tracking ID is unspecified and may change at any time. Frame callbacks are automatically removed when the game resets (for instance, when the player dies), but not at any other time.<br />
<br />
The callback is passed one parameter, <code>delta</code>, which is the time since the last frame (in [[Time_scales in Oolite|game clock time]]). Frame callbacks fire even when the game is paused, in which case <code>delta</code> is 0.<br />
<br />
'''Example:'''<br />
var sum = 0;<br />
this.$fcb = addFrameCallback(function (delta)<br />
{<br />
sum += delta;<br />
log("Time elapsed: " + sum + " (delta: " + delta + ")");<br />
});<br />
<br />
'''See also:''' <code>[[#removeFrameCallback|removeFrameCallback()]]</code>, <code>[[#isValidFrameCallback|isValidFrameCallback()]]</code>, and for repeated events with a longer repeat interval, use [[Oolite_JavaScript_Reference:_Timer|Timers]] instead.<br />
<br />
See [http://www.aegidian.org/bb/viewtopic.php?f=4&t=8941 RFC: frame callbacks] (2011)<br />
<br />
=== <code>displayNameForCommodity</code> ===<br />
function '''displayNameForCommodity'''(commodityName : String) : String<br />
Returns the display name corresponding to the specified commodity. Useful in conjunction with localisation OXPs, or expansions that rename commodities depending on which station / system the player is at.<br />
<br />
=== <code>expandDescription</code> ===<br />
function '''expandDescription'''(description : String [, locals : Object (Dictionary)]) : String<br />
Expands a string, substituting special tokens and any key inside square brackets with the substitution rules for [[Missiontext.plist#Special_Expansions|string expansions]].<br />
When local key/value pairs are provided, they take precedence over any other values.<br />
<br />
In Oolite 1.79 or later, this method uses a higher quality random number generator which does not have noticeable correlation problems when used for recursive expansion.<br />
<br />
'''Example:'''<br />
expandDescription("My ball is [my_color].", { my_color: "red" });<br />
<br />
=== <code>expandMissionText</code> ===<br />
function '''expandMissionText'''(textKey: String [, locals : Object (Dictionary)]) : String<br />
Load a string specified by <code>textKey</code> from [[missiontext.plist]], then perform <code>[[#expandDescription|expandDescription()]]</code>type substitutions on it, and also replace <code>"\n"</code> with line breaks. The <code>local</code> parameter works as with <code>[[#expandDescription|expandDescription()]]</code>.<br />
<br />
In Oolite 1.79 or later, this method uses a higher quality random number generator which does not have noticeable correlation problems when used for recursive expansion.<br />
<br />
'''Example:'''<br />
expandMissionText("oolite_trumble_title");<br />
<br />
=== <code>formatCredits</code> ===<br />
function '''formatCredits'''(value : number, [includeDeciCredits : boolean, [includeCurrencySymbol : boolean]]) : String<br />
Converts the <code>value</code> parameter to a string formatted in a currency friendly manner. If <code>includeDeciCredits</code> is <code>true</code> the string will be formatted to 1 decimal place. If <code>includeCurrencySymbol</code> is <code>true</code> an appropriate currency symbol following any localisation rules is included. The default currency symbol is a terminal ₢.<br />
<br />
=== <code>formatInteger</code> ===<br />
function '''formatInteger'''(value : number) : String<br />
Converts the <code>value</code> parameter to a string formatted as an integer following any localisation rules in place.<br />
<br />
=== <code>getGuiColorSettingForKey</code> ===<br />
{{oolite-method-added|1.87}}<br />
function '''getGuiColorSettingForKey'''(keyname : string) : Array<br />
Returns the current color for a particular keyname (referenced in the [[gui-settings.plist]] file). Returns an array of RGBA values.<br />
<br />
'''See also:''' <code>[[#setGuiColorSettingForKey|setGuiColorSettingForKey()]]</code><br />
<br />
=== <code>getScreenBackgroundForKey</code> ===<br />
{{oolite-method-added|1.85}}<br />
function '''getScreenBackgroundForKey'''(keyname : string) : guiTextureSpecifier<br />
Returns the guiTextureSpecifier for a particular keyname (referenced in the screenbackgrounds.plist file).<br />
<br />
''guiTextureSpecifier'' can be either a string or an object with the required key <code>name</code> and optional keys <code>width</code> and <code>height</code>. If neither width nor height is specified, the dimensions of the image are used. If only one is specified, the other is calculated such that the image is not distorted. The scale unit is 1/480 of the height of the window; in other words, the window is always considered 480 units high, and the width depends on the aspect ratio of the window.<br />
<br />
'''Example:'''<br />
getScreenBackgroundForKey("long_range_chart_mission");<br />
<br />
'''See also:''' <code>[[#setScreenBackgroundForKey|setScreenBackgroundForKey()]]</code><br />
<br />
=== <code>isValidFrameCallback</code> ===<br />
function '''isValidFrameCallback'''(trackingID: ''TrackingID'') : Boolean<br />
Returns <code>true</code> if <code>trackingID</code> identifies a frame callback which has been registered with <code>[[#addFrameCallback|addFrameCallback()]]</code> and not yet removed. (There should be no need to use this except for debugging and testing.)<br />
<br />
'''See also:''' <code>[[#addFrameCallback|addFrameCallback()]]</code>, <code>[[#removeFrameCallback|removeFrameCallback()]]</code><br />
<br />
=== <code>log</code> ===<br />
function '''log'''([messageClass : String ,] message : String)<br />
Writes a message to Oolite's log. The optional messageClass parameter can be used to specify which type of message is written to the log. The default messageClass is <code>script.debug.message</code>. When set to <code>true</code>, the messages will be written to the log file. The classes to be logged are set in the file <code>logcontrol.plist</code>. messageClasses not listed in <code>logcontrol.plist</code> are always logged.<br />
<br />
'''Example:'''<br />
log("myOXP.init","MyOXP initialised and ready!");<br />
<br />
You can temporarily enable/disable logging the above message by typing in the console:<br />
console.setDisplayMessagesInClass("myOXP.init", true/false)<br />
<br />
===<code>pauseGame</code>===<br />
function '''pauseGame'''() : Boolean<br />
Pauses the game. It does not work on screens that cannot be paused by keyboard: mission screens, long range chart, arrival report, save menu. In those cases, the method returns <code>false</code>. Otherwise, it pauses the game and returns <code>true</code>.<br />
<br />
This was added in v1.87 (the exact version is unconfirmed)<br />
<br />
'''See also:''' [http://aegidian.org/bb/viewtopic.php?f=6&t=18900 Scriptable pause?]<br />
<br />
=== <code>randomInhabitantsDescription</code> ===<br />
function '''randomInhabitantsDescription'''([plural : boolean, default true]) : String<br />
Returns a random sentient species name, like <code>"Large Red Fat Insects"</code> or <code>"Human Colonials"</code>, following the same pattern (and probability distribution) as for planet inhabitants.<br />
<br />
'''Example:'''<br />
player.consoleMessage("You'll meet a " + randomInhabitantsDescription(false) + ". She'll be with a group of " + randomInhabitantsDescription() + ".");<br />
<br />
=== <code>randomName</code> ===<br />
function '''randomName'''() : String<br />
Returns a random capitalised word, suitable for use as name, or indeed surname.<br />
<br />
'''Example:'''<br />
player.consoleMessage(randomName() + " " + randomName() + " rules this system with an iron fist.");<br />
<br />
=== <code>removeFrameCallback</code> ===<br />
function '''removeFrameCallback'''(trackingID : ''TrackingID'')<br />
Removes a frame callback previously registered with <code>[[#addFrameCallback|addFrameCallback()]]</code>.<br />
<br />
'''See also:''' <code>[[#addFrameCallback|addFrameCallback()]]</code>, <code>[[#isValidFrameCallback|isValidFrameCallback()]]</code><br />
<br />
=== <code>setGuiColorSettingForKey</code> ===<br />
{{oolite-method-added|1.87}}<br />
function '''setGuiColorSettingorKey'''(keyname : string , [[Materials_in_Oolite#Colour_specifiers|Colour specifier]] : string) <br />
Override the color setting for a particular keyname (referenced in the [[gui-settings.plist]] file) with the specified color. This override is only for the current play-session and does not get written to [[gui-settings.plist]].<br />
<br />
'''Example:'''<br />
setGuiColorSettingForKey("screen_title_color", "whiteColor");<br />
<br />
'''See also:''' <code>[[#getGuiColorSettingForKey|getGuiColorSettingForKey()]]</code><br />
<br />
=== <code>setScreenBackground</code> ===<br />
function '''setScreenBackground'''(image : ''guiTextureSpecifier'') <br />
Temporary override that sets the background of the current gui screen to the specified image. Override is lost after the player switches screens.<br />
<br />
''guiTextureSpecifier'' can be either a string or an object with the required key <code>name</code> and optional keys <code>width</code> and <code>height</code>. If neither width nor height is specified, the dimensions of the image are used. If only one is specified, the other is calculated such that the image is not distorted. The scale unit is 1/480 of the height of the window; in other words, the window is always considered 480 units high, and the width depends on the aspect ratio of the window.<br />
<br />
'''Example:'''<br />
setScreenBackground({ name: "oolite-nova-system.png", height: 480 });<br />
<br />
=== <code>setScreenBackgroundForKey</code> ===<br />
{{oolite-method-added|1.85}}<br />
function '''setScreenBackgroundForKey'''(keyname : string, image : ''guiTextureSpecifier'') <br />
Override the background for a particular keyname (referenced in the screenbackgrounds.plist file) with the specified image. Override is only for the current play-session only and does not get written out to screenbackgrounds.plist.<br />
<br />
''guiTextureSpecifier'' can be either a string or an object with the required key <code>name</code> and optional keys <code>width</code> and <code>height</code>. If neither width nor height is specified, the dimensions of the image are used. If only one is specified, the other is calculated such that the image is not distorted. The scale unit is 1/480 of the height of the window; in other words, the window is always considered 480 units high, and the width depends on the aspect ratio of the window.<br />
<br />
'''Example:'''<br />
setScreenBackgroundForKey("long_range_chart_mission", { name: "my_mission_background.png", height: 480 });<br />
<br />
'''See also:''' <code>[[#getScreenBackgroundForKey|getScreenBackgroundForKey()]]</code><br />
<br />
=== <code>setScreenOverlay</code> ===<br />
function '''setScreenOverlay'''(image : ''guiTextureSpecifier'') <br />
Temporary override that sets the overlay of the current gui screen to the specified image. Override is lost after the player switches screens.<br />
<br />
See <code>[[#setScreenBackground|setScreenBackground()]]</code> for a discussion of ''guiTextureSpecifier''.<br />
<br />
'''Example:'''<br />
setScreenOverlay('trumblebox.png');<br />
<br />
=== <code>takeSnapShot</code> ===<br />
function '''takeSnapShot'''([filename : String]) : Boolean<br />
Saves a snapshot of the current screen to your hard disk. A filename is optional. When a name is used, only alphanumeric values and <code>"-"</code> and <code>"_"</code> are allowed for the filename. The appropriate extension for the used operating system (like .png) is added by Oolite and should not be part of the filename.<br><br />
When a filename already exists, it is not overwritten but the string <code>"-xxx"</code> is added, starting with <code>"-001"</code>.<br><br />
<code>takeSnapShot()</code> will not be available in the stable release version of Oolite, but will be available in a special OXP developer release.<br />
<br />
'''Example:'''<br />
takeSnapShot('mission_target_1');<br />
<br />
[[Category:Oolite JavaScript Reference]]<br />
<br />
== Reserved Words ==<br />
<br />
=== <code>Quaternion</code> ===<br />
<br />
=== <code>Vector3D</code> ===<br />
<br />
[[Oolite_JavaScript_Reference:_Vector3D]]</div>Hiran