Back to Index Page generated: Jun 13, 2026, 7:54:47 PM

Expansion Explorers' Club

Content

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description Keeps a record of all the systems you visit and gives you an explorer rank. Lets you view your exploration achievements and provides a special Explorers’ Club long-range navigation chart. Keeps a record of all the systems you visit and gives you an explorer rank. Lets you view your exploration achievements and provides a special Explorers’ Club long-range navigation chart.
Identifier oolite.oxp.CaptMurphy.ExplorersClub oolite.oxp.CaptMurphy.ExplorersClub
Title Explorers' Club Explorers' Club
Category Activities Activities
Author Capt. Murphy & Wildeblood Capt. Murphy & Wildeblood
Version 1.4.7 1.4.7
Tags charts charts
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Dependent Expansions
  • oolite.oxp.Norby.Ambience_Collection:1.3
  • oolite.oxp.Wildeblood.DistantSpace:1.1.2
  • oolite.oxp.stranger.HereBeDragons:1.1.0
  • Information URL http://wiki.alioth.net/index.php/Explorers%27_Club_OXP n/a
    Download URL https://wiki.alioth.net/img_auth.php/5/55/Explorers_Club_1.4.4.oxz Explorers_Club_1.4.4.oxz
    License CC-BY-NC-SA 3.0 CC-BY-NC-SA 3.0
    File Size n/a
    Upload date 1755622781

    Relationships Diagram

    Documentation

    Also read http://wiki.alioth.net/index.php/Explorers'%20Club

    New readme.rtf

    {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang2057\deflangfe2057{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}{\f1\froman\fprq2\fcharset2 Symbol;}}
    {\colortbl ;\red0\green0\blue255;}
    {\*\generator Riched20 6.3.9600}\viewkind4\uc1 
    \pard\nowidctlpar\f0\fs20 Explorers\rquote  Club OXP  ver. 1.4.4\par
    Last updated on 19th August, 2014\par
    \par
    Code by Capt Murphy, 2011-2012, & Wildeblood, 2013-2014\par
    
    \pard Licence: CC BY-NC-SA 3.0 : Please visit {{\field{\*\fldinst{HYPERLINK http://creativecommons.org/licenses/by-nc-sa/3.0/ }}{\fldrslt{http://creativecommons.org/licenses/by-nc-sa/3.0/\ul0\cf0}}}}\f0\fs20  for more info.\par
    Requires Oolite 1.80\par
    \par
    Overview: \par
    \par
    Once installed this OXP keeps track of unique systems visited and reports on the manifest screen (F5, F5) the total systems visited out of 256 in the current chart and the total systems visited out of 2048 in the whole Ooniverse. It also displays an Explorer \lquote rank\rquote . You need to visit all 2048 systems to be ranked an Elite Explorer.\par
    \par
    In addition this OXP adds some functionality to the Long Range Chart (F6, F6) in that it can be set to different modes. To access the options go to the Interfaces screen (F4) when docked. The available options are:\par
    \par
    
    \pard\nowidctlpar\fi-360\li720\tx720 1)\tab Default - standard long range chart behaviour.\par
    
    \pard\nowidctlpar\fi-360\li720 2)\tab Long range chart shows animation of systems visited to date, in order of first visit.\par
    3)\tab Long range chart marks unvisited systems.\par
    
    \pard\nowidctlpar\par
    The options screen also allows you to choose when a system is recorded as visited. The options are.\par
    \par
    
    \pard\nowidctlpar\fi-360\li720\tx720 1)\tab Default \endash  when docked at the main station.\par
    
    \pard\nowidctlpar\fi-360\li720 2)\tab Immediately on arrival from witch-space.\par
    3)\tab When reaching the planet's surface.\par
    
    \pard\nowidctlpar\par
    Options are persistent between sessions with the same saved game.\par
    \par
    The options screen also gives access to two further sets of mission screens.\par
    \par
    
    \pard\nowidctlpar\fi-360\li720\tx720 1)\tab Displays a list of the system names that have been visited so far in the current Galaxy, followed by a list of the system names that are yet to be visited in the current galaxy.\par
    
    \pard\nowidctlpar\fi-360\li720 2)\tab Displays a list of mile-stones that the player has completed, or not completed, so far. Defined mile-stones are:\par
    
    \pard\nowidctlpar\li360\par
    
    \pard\nowidctlpar\fi-360\li1440\tx1440\f1\'b7\tab\f0 Visited all of the \lquote Old Worlds\rquote  in galaxy 1.\par
    
    \pard\nowidctlpar\fi-360\li1440\f1\'b7\tab\f0 Visited all of the \lquote Famous Planets\rquote  in galaxy 1 (as per OXP of same name).\par
    \f1\'b7\tab\f0 Visited all of the \lquote Famous Planets\rquote  in galaxy 2 (as per OXP of same name).\par
    \f1\'b7\tab\f0 Visited the \lquote Prodigal Suns\rquote  in galaxy 3.\par
    \f1\'b7\tab\f0 Visited the \lquote Lost Worlds\rquote  in galaxy 6.\par
    \f1\'b7\tab\f0 Visited the systems beyond the \lquote Great Rift\rquote  in galaxy 7.\par
    \f1\'b7\tab\f0 Visited Oresrati in galaxy 8.\par
    \f1\'b7\tab\f0 Visited all 8 galaxies at least once.\par
    
    \pard\nowidctlpar\par
    The experimental feature to keep a photographic record of systems visited, only usable with development versions of Oolite, has been removed from this version of the OXP.\par
    \par
    Change Log:\par
    \par
    Version 1.4.4 (19/8/2014) Can now leave mission screens at any time, and fixed harmless bug introduced in 1.4.3. \par
    \par
    Version 1.4.3 (5/8/2014) Counter now displayed on interface summary, jumping into a nova system is now always logged immediately, and fine-tuned the change made in 1.4.2. \par
    \par
    Version 1.4.2 (27/7/2014) Code updated for Oolite 1.80: bug-fix for loading games saved at stations other than GalCop main.\par
    \par
    Version 1.4.1 (21/10/2013) System data screen tweaked, micro-tweak to API functions, last text string moved to missiontext.plist file.\par
    \par
    Version 1.4 (9/6/2013) Based on version 1.3.3, updated by Wildeblood. Code updated for Oolite 1.77, station interface added, photographic record feature removed, nearly all text strings moved to missiontext.plist file, new option for recording visit added, API functions added.\par
    \par
    \par
    }
    

    Old readme.rtf

    {\rtf1\ansi\ansicpg1252\deff0\deflang2057\deflangfe2057{\fonttbl{\f0\fswiss\fprq2\fcharset0 Arial;}{\f1\froman\fprq2\fcharset2 Symbol;}}
    {\colortbl ;\red0\green0\blue255;}
    {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\f0\fs20 Explorers\rquote  Club OXP v1.3.3 (30/06/12)\par
    Inspired by Wildeblood, code by capt murphy - 2011,2012\par
    \pard Licence: CC BY-NC-SA 3.0 : Please visit {\field{\*\fldinst{HYPERLINK "http://creativecommons.org/licenses/by-nc-sa/3.0/"}}{\fldrslt{\ul\cf1 http://creativecommons.org/licenses/by-nc-sa/3.0/}}}\f0\fs20  for more info.\par
    Requires Oolite 1.76.1\par
    \par
    Overview: \par
    \par
    Once installed this OXP keeps track of unique systems visited and reports on the manifest screen (F5) the total systems visited in the current galaxy out of 256 and the total systems visited out of 2048 in the whole Ooniverse. It also displays an Explorer \lquote rank\rquote . You need to visit all 2048 systems to be ranked an Elite Explorer.\par
    \par
    In addition this OXP adds some functionality to the Long Range Chart (F6/F6) in that it can be set to different modes. To access the options screen press F2, then F6 when docked. The available options are:\par
    \par
    \pard\nowidctlpar\fi-360\li720\tx720 1)\tab Default - standard long range chart behaviour.\par
    \pard\nowidctlpar\fi-360\li720 2)\tab Long range chart shows animation of systems visited to date, in order of first visit.\par
    3)\tab Long range chart marks unvisited systems.\par
    4)\tab Player can manually mark systems on long range chart as a destination (highlight a system with the cursor and press F7)\par
    5)\tab Player can manually unmark systems on long range chart as a destination (highlight a system with the cursor and press F7)\par
    \pard\nowidctlpar\par
    Players should exercise caution when using the 2\super nd\nosupersub  and 3rd options as it will clear any currently marked systems (e.g mission or contract destinations), although the 4\super th\nosupersub  option can be used to manually reinstate them.\par
    \par
    The options screen also allows you to choose when a system is recorded as visited. The options are.\par
    \par
    \pard\nowidctlpar\fi-360\li720\tx720 1)\tab Default \endash  when docked at the main station.\par
    \pard\nowidctlpar\fi-360\li720 2)\tab On arrival from witch-space.\par
    \pard\nowidctlpar\par
    Options are persistent between sessions with the same save game.\par
    \par
    The options screen also gives access to two further sets of mission screens.\par
    \par
    \pard\nowidctlpar\fi-360\li720\tx720 1)\tab Displays a list of the system names that have been visited so far in the current Galaxy, followed by a list of the system names that are yet to be visited in the current galaxy.\par
    \pard\nowidctlpar\fi-360\li720 2)\tab Displays a list of mile-stones that the player has completed / not completed so far. Defined mile-stones are:\par
    \pard\nowidctlpar\li360\par
    \pard\nowidctlpar\fi-360\li1440\tx1440\f1\'b7\tab\f0 Visited all of the \lquote Old Worlds\rquote  in galaxy 1.\par
    \pard\nowidctlpar\fi-360\li1440\f1\'b7\tab\f0 Visited all of the \lquote Famous Planets\rquote  in galaxy 1 (as per OXP of same name).\par
    \f1\'b7\tab\f0 Visited all of the \lquote Famous Planets\rquote  in galaxy 2 (as per OXP of same name).\par
    \f1\'b7\tab\f0 Visited the \lquote Prodigal Suns\rquote  in galaxy 3.\par
    \f1\'b7\tab\f0 Visited the \lquote Lost Worlds\rquote  in galaxy 6.\par
    \f1\'b7\tab\f0 Visited the systems beyond the \lquote Great Rift\rquote  in galaxy 7.\par
    \f1\'b7\tab\f0 Visited Oresrati in galaxy 8.\par
    \f1\'b7\tab\f0 Visited all 8 galaxies at least once.\par
    \pard\nowidctlpar\par
    The options screen also allows you to enable/disable an experimental feature to keep a photographic record of systems visited. This is disabled by default.\par
    \par
    If enabled the behaviour will depend on which option is set for recording a visit. If a visit is recorded on arrival from witch-space a screenshot will be automatically saved on exiting witch-space. If a visit is recorded on docking with the main station, at the next launch the player will be briefly \lquote teleported\rquote  to a good vantage point and a screenshot will be automatically saved before the player is teleported back to the launch point.\par
    \par
    Change Log:\par
    \par
    Version 1.0: 23/11/11 - Initial release.\par
    \par
    Version 1.1: 24/11/11 \endash  Fixed dodgy condition checks for the \lquote rank\rquote  string. Incorporated a number of code tweaks for efficiency suggested by Svengali.\par
    \par
    Version 1.2.1: 1/12/11\par
    \par
    Added functionality to view long range chart with unvisited systems marked, to view list of system names visited and unvisited in current galaxy, and to view list of mile-stones.\par
    All missionScreens now managed via missionScreenOpportunity. \par
    Long range chart mark visited systems animation will now complete in a maximum of 32 seconds (if all 256 systems have been visited).\par
    Script now uses strict mode. \par
    Added code to disable OXP entirely if player is in a galaxy outside of the range 1 to 8. \par
    Added code to disable mile-stones feature if player is using a non-standard galaxy_seed.\par
    \par
    Version 1.3.1: 21/01/12\par
    \par
    Made compatible with Save Anywhere OXP.\par
    Amended start-up behaviour for 1.76.\par
    Removed use of forEach method for array iteration.\par
    Message appended to system description on F7 screen to indicate whether system has been visited or not.\par
    Added background image to missionScreens,\par
    Added experimental photographic record of visited systems feature (thanks to Wildeblood for the snapshot HUD and some script suggestions, and thanks to the Honourable Guild of Test-Pilots for their valuable testing services).\par
    \par
    Version 1.3.2 and 1.3.2oxpC: 5/03/12\par
    \par
    Fixed minor bug in oxpC version that caused setting not to be saved in some circumstances.\par
    Changed timing of record visit on witch space exit from this.shipWillExitWitchSpace to this.shipExitedWitchSpace - for compatibility with as yet unreleased long range jump OXPs.\par
    Fixed mechanism of failsafe which prevents freeze should a JS timeout occur. \par
    \par
    Version 1.3.3 and 1.3.3oxpC: 30/06/12\par
    \par
    Fixed timer clean up mechanism to avoid unrooted timer errors when flicking rapidly to and from the long range chart.\par
    \par
    }
    

    Equipment

    This expansion declares no equipment.

    Ships

    This expansion declares no ships.

    Models

    This expansion declares no models.

    Scripts

    Path
    Config/script.js
    /* ========================================================
    			EXPLORERS' CLUB OXP
    
    Created by Karl Smith ("Wildeblood"), June, 2013.
    Based on an earlier work of the same name:- 
    
    author:      "Capt. Murphy"
    copyright:   2011, 2012 Steve Murphy
    licence:     "CC BY-NC-SA 3.0"
    description: Worldscript to record unique systems visited.
    
    Reviewed January, 2024, using Oolite 1.91. 
    It hasn't broken yet, despite all the changes to Oolite. 
    We must have done something right.
    =========================================================== */
    
    this.name    = "Explorers Club"; 
    this.version = "1.4.7";
    
    /* ========================================================
    			FUNCTIONS TO RECORD VISITS
    
     Check to see if new system has already been visited,
     and if not, add it to the record array.
    =========================================================== */
    
        this._recordVisit = function () {
            "use strict";
            if (this.$xc_record[galaxyNumber].indexOf(system.ID) === -1) {
                this.$xc_record[galaxyNumber].push(system.ID);
                return true;
            } else {
                return false;
            }
        }
    
        // Visiting option 1, default mode.
    
        this.shipWillDockWithStation = function (station) {
            "use strict";
            if (this.$xc_visitOption === 1 &&
                station.isMainStation) {
                this._recordVisit();
            }
        }
    
        // Visiting option 2, easy mode.
    
        this.shipExitedWitchspace = function () {
            "use strict";
            if (system.isInterstellarSpace) {
                return;
            }
            if (this.$xc_visitOption === 2) {
                this._recordVisit();
                return;
            }
            if (system.sun.hasGoneNova) {
                if (this._recordVisit()) {
                    player.commsMessage(expandMissionText("explorers_club_visit_logged"));
                }
            }
        }
    
        // Visiting option 3, expert mode.
    
        this.shipApproachingPlanetSurface = function (planet) {
            "use strict";
            if (this.$xc_visitOption === 3 &&
                planet.isMainPlanet) {
                if (this._recordVisit()) {
                    player.commsMessage(expandMissionText("explorers_club_visit_logged"));
                }
            }
        }
    
        this.playerWillSaveGame = function () {
            "use strict";
            missionVariables.explorerClub_record = JSON.stringify(this.$xc_record);
            missionVariables.explorerClub_chartOption = this.$xc_chartOption;
            missionVariables.explorerClub_visitOption = this.$xc_visitOption;
        }
    
    /* ========================================================
    			THE ENHANCED NAVIGATION CHARTS
    =========================================================== */
    
        this.guiScreenChanged = function (to, from) {
            "use strict";
            if (guiScreen === "GUI_SCREEN_SYSTEM_DATA") {
                if (this.$xc_record[galaxyNumber].indexOf(player.ship.targetSystem) === -1) {
                    mission.addMessageTextKey("explorers_club_never_visited");
                } else if (player.ship.targetSystem === system.ID) {
                    mission.addMessageTextKey("explorers_club_here_now");
                } else {
                    mission.addMessageTextKey("explorers_club_already_visited");
                }
            } else if (guiScreen === "GUI_SCREEN_LONG_RANGE_CHART") {
                if (this.$xc_chartOption === 2) {
                    for (var i = 0; i < 256; i++) {
                        mission.unmarkSystem({system: i, name: "exclubmap"});
                    }
                    if (this.$xc_fadingReminder > 1) {
                        player.consoleMessage(expandMissionText("explorers_club_chart_visited"), this.$xc_fadingReminder);
                        this.$xc_fadingReminder -= 1;
                    }
                    // Double timer to execute function every 0.125 seconds.
                    this.$xc_chartAnimationCounter = 0;
                    this.$xc_markingTimer1 = new Timer(this, this._xc_markChart, 0.25, 0.25);
                    this.$xc_markingTimer2 = new Timer(this, this._xc_markChart, 0.375, 0.25);
                } else if (this.$xc_chartOption === 3) {
                    if (this.$xc_fadingReminder > 1) {
                        player.consoleMessage(expandMissionText("explorers_club_chart_unvisited"), this.$xc_fadingReminder);
                        this.$xc_fadingReminder -= 1;
                    }
                    var currentGalaxy = galaxyNumber;
                    for (var i = 0; i < 256; i++) {
                        if (this.$xc_record[currentGalaxy].indexOf(i) === -1) {
                            mission.markSystem({system: i, name: "exclubmap", markerColor: "orangeColor", markerScale: 1.0, markerShape: "MARKER_DIAMOND"});
                        } else {
                            mission.unmarkSystem({system: i, name: "exclubmap"});
                        }
                    }
                }
                return; // Yes.
            }
            if (from === "GUI_SCREEN_LONG_RANGE_CHART") {
                if (this.$xc_markingTimer1) {
                    this.$xc_markingTimer1.stop();
                    delete this.$xc_markingTimer1;
                }
                if (this.$xc_markingTimer2) {
                    this.$xc_markingTimer2.stop();
                    delete this.$xc_markingTimer2;
                }
                if (to !== "GUI_SCREEN_SHORT_RANGE_CHART" &&
                    this.$xc_chartOption !== 1) {
                    for (var i = 0; i < 256; i++) {
                        mission.unmarkSystem({system: i, name: "exclubmap"});
                    }
                }
            }
        }
    
        this._xc_markChart = function () {
            "use strict";
            if (this.$xc_chartAnimationCounter >= this.$xc_record[galaxyNumber].length) {
                if (this.$xc_markingTimer1) {
                    this.$xc_markingTimer1.stop();
                    delete this.$xc_markingTimer1;
                }
                if (this.$xc_markingTimer2) {
                    this.$xc_markingTimer2.stop();
                    delete this.$xc_markingTimer2;
                }
                return;
            }
            var sysID = this.$xc_record[galaxyNumber][this.$xc_chartAnimationCounter];
            mission.markSystem({system: sysID, name: "exclubmap", markerColor: "greenColor", markerScale: 1.0, markerShape: "MARKER_X"});
            this.$xc_chartAnimationCounter++;
        }
    
    /* ========================================================
    			EVENT HANDLERS FOR THE SPECIAL SCREENS
    =========================================================== */
    
        this.shipDockedWithStation = function (station) {
            "use strict";
            station.setInterface("explorers_club", {title: expandMissionText("explorers_club_interface_title"), category: expandDescription("[interfaces-category-organisations]"), summary: expandMissionText("explorers_club_interface_summary") + "\n" + this._playerRank(), callback: this.missionScreenOpportunity.bind(this)});
        }
    
        this.missionScreenOpportunity = function (screenToShowNext) {
            "use strict";
            if (screenToShowNext) {
                this.$xc_screenToShowNext = screenToShowNext;
            }
            if (!this.$xc_screenToShowNext) {
                return;
            }
            switch (this.$xc_screenToShowNext) {
              case "explorers_club":
                mission.runScreen({allowInterrupt: true, exitScreen: "GUI_SCREEN_INTERFACES", titleKey: "explorers_club_options_title", messageKey: "explorers_club_options_text", background: "Explorers_Club.png", choicesKey: "explorers_club_options_choices", initialChoicesKey: ["99_EXIT"]}, this._xc_choice.bind(this));
                delete this.$xc_screenToShowNext;
                mission.addMessageText("\n" + this._playerRank());
                delete this.$xc_mileStonesPage;
                delete this.$xc_visitedNameAllPage;
                delete this.$xc_visitedNameFirstPage;
                delete this.$xc_visitedNameSecondPage;
                delete this.$xc_unvisitedNameAllPage;
                delete this.$xc_unvisitedNameFirstPage;
                delete this.$xc_unvisitedNameSecondPage;
                break;
              case "settings":
                mission.runScreen({allowInterrupt: true, exitScreen: "GUI_SCREEN_LONG_RANGE_CHART", titleKey: "explorers_club_settings_title", messageKey: "explorers_club_settings_text", background: "Explorers_Club.png"});
                delete this.$xc_screenToShowNext;
                switch (this.$xc_chartOption) {
                  case 1:
                    mission.addMessageTextKey("explorers_club_settings_chart_1");
                    break;
                  case 2:
                    mission.addMessageTextKey("explorers_club_settings_chart_2");
                    break;
                  case 3:
                    mission.addMessageTextKey("explorers_club_settings_chart_3");
                    break;
                  default:;
                }
                switch (this.$xc_visitOption) {
                  case 1:
                    mission.addMessageTextKey("explorers_club_settings_visit_1");
                    break;
                  case 2:
                    mission.addMessageTextKey("explorers_club_settings_visit_2");
                    break;
                  case 3:
                    mission.addMessageTextKey("explorers_club_settings_visit_3");
                    break;
                  default:;
                }
                break;
              case "achievements":
                mission.runScreen({allowInterrupt: true, titleKey: "explorers_club_achieved_title", message: this.$xc_mileStonesPage, background: "Explorers_Club.png"});
                this.$xc_screenToShowNext = "explorers_club";
                break;
              case "alternative_ooniverse":
                mission.runScreen({allowInterrupt: true, titleKey: "explorers_club_achieved_title", messageKey: "explorers_club_alternative_ooniverse", background: "Explorers_Club.png"});
                this.$xc_screenToShowNext = "explorers_club";
                break;
              case "systems_visited_all":
                mission.runScreen({allowInterrupt: true, title: "G" + (galaxyNumber + 1) + expandMissionText("explorers_club_systems_visited_all"), message: this.$xc_visitedNameAllPage, background: "Explorers_Club.png"});
                this.$xc_screenToShowNext = "systems_unvisited_1";
                break;
              case "systems_unvisited_1":
                mission.runScreen({allowInterrupt: true, title: "G" + (galaxyNumber + 1) + expandMissionText("explorers_club_systems_unvisited_1"), message: this.$xc_unvisitedNameFirstPage, background: "Explorers_Club.png"});
                this.$xc_screenToShowNext = "systems_unvisited_2";
                break;
              case "systems_unvisited_2":
                mission.runScreen({allowInterrupt: true, title: "G" + (galaxyNumber + 1) + expandMissionText("explorers_club_systems_unvisited_2"), message: this.$xc_unvisitedNameSecondPage, background: "Explorers_Club.png"});
                this.$xc_screenToShowNext = "explorers_club";
                break;
              case "systems_visited_1":
                mission.runScreen({allowInterrupt: true, title: "G" + (galaxyNumber + 1) + expandMissionText("explorers_club_systems_visited_1"), message: this.$xc_visitedNameFirstPage, background: "Explorers_Club.png"});
                this.$xc_screenToShowNext = "systems_visited_2";
                break;
              case "systems_visited_2":
                mission.runScreen({allowInterrupt: true, title: "G" + (galaxyNumber + 1) + expandMissionText("explorers_club_systems_visited_2"), message: this.$xc_visitedNameSecondPage, background: "Explorers_Club.png"});
                this.$xc_screenToShowNext = "systems_unvisited_all";
                break;
              case "systems_unvisited_all":
                mission.runScreen({allowInterrupt: true, title: "G" + (galaxyNumber + 1) + expandMissionText("explorers_club_systems_unvisited_all"), message: this.$xc_unvisitedNameAllPage, background: "Explorers_Club.png"});
                this.$xc_screenToShowNext = "explorers_club";
                break;
              default:;
            }
        }
    
    /* ========================================================
    			OTHER FUNCTIONS FOR THE SPECIAL SCREENS
    =========================================================== */
    
        this._xc_choice = function (choice) {
            "use strict";
            switch (choice) {
              case "99_EXIT":
                delete this.$xc_screenToShowNext;
                break;
              case "31_SYSTEMS":
                this._xc_systemList();
                break;
              case "32_ACHIEVE":
                this._xc_achievements();
                break;
              default: // All these go to the settings screen.
                switch (choice) {
                  case "11_CHART_NORMAL":
                    this.$xc_chartOption = 1;
                    for (var i = 0; i < 256; i++) {
                        mission.unmarkSystem({system: i, name: "exclubmap"});
                    }
                    break;
                  case "12_CHART_VISITED":
                    this.$xc_chartOption = 2;
                    this.$xc_fadingReminder = 10;
                    break;
                  case "13_CHART_UNVISITED":
                    this.$xc_chartOption = 3;
                    this.$xc_fadingReminder = 10;
                    break;
                  case "21_DOCKED":
                    this.$xc_visitOption = 1;
                    if (player.ship.dockedStation.isMainStation) {
                        this._recordVisit();
                    }
                    break;
                  case "22_FLYING":
                    this.$xc_visitOption = 2;
                    this._recordVisit();
                    break;
                  case "23_SURFACE":
                    this.$xc_visitOption = 3;
                    break;
                  default:;
                }
                this.$xc_screenToShowNext = "settings";
            }
        }
    
        this._xc_systemList = function () {
            "use strict";
            var visitedName = new Array;
            var unVisitedName = new Array;
            var currentGalaxy = galaxyNumber;
            var arrayLength = this.$xc_record[galaxyNumber].length;
            var i;
            for (i = 0; i < arrayLength; i++) {
                visitedName.push(" " + System.systemNameForID(this.$xc_record[currentGalaxy][i]));
            }
            for (i = 0; i < 256; i++) {
                if (this.$xc_record[currentGalaxy].indexOf(i) === -1) {
                    unVisitedName.push(" " + System.systemNameForID(i));
                }
            }
            unVisitedName = unVisitedName.sort();
            if (visitedName.length <= 128) {
                this.$xc_visitedNameAllPage = visitedName;
                this.$xc_unvisitedNameFirstPage = unVisitedName.slice(0, 128);
                this.$xc_unvisitedNameSecondPage = unVisitedName.slice(128);
                this.$xc_screenToShowNext = "systems_visited_all";
                this.missionScreenOpportunity();
            } else {
                this.$xc_visitedNameFirstPage = visitedName.slice(0, 128);
                this.$xc_visitedNameSecondPage = visitedName.slice(128);
                this.$xc_unvisitedNameAllPage = unVisitedName;
                this.$xc_screenToShowNext = "systems_visited_1";
                this.missionScreenOpportunity();
            }
        }
    
        this._xc_achievements = function () {
            "use strict";
            var testCoords = [[4.8, 40.6, 0], [9.6, 30.4, 0], [31.2, 42.4, 0], [62.4, 34.2, 0], [51.2, 28.8, 0], [86.4, 27.6, 0], [70.8, 4.6, 0], [90.8, 39.8, 0]];
            var alternativeOoniverse = false;
            if (System.infoForSystem(galaxyNumber, 255).coordinates.distanceTo(testCoords[galaxyNumber]) > 0.00001) {
                alternativeOoniverse = true;
            }
            if (alternativeOoniverse) {
                this.$xc_screenToShowNext = "alternative_ooniverse";
                this.missionScreenOpportunity();
                return;
            }
            if (!this.$xc_oldWorlds) {
                var oldWorlds = [7, 39, 46, 55, 129, 147, 255];
                this.$xc_oldWorlds = this._xc_isArray1_subsetOfArray2(oldWorlds, this.$xc_record[0]);
            }
            if (!this.$xc_famousPlanetsGalOne) {
                var famousPlanetsGalOne = [3, 7, 13, 16, 18, 21, 23, 28, 29, 35, 36, 39, 42, 44, 50, 55, 62, 66, 73, 86, 89, 90, 93, 99, 100, 101, 111, 124, 126, 129, 131, 132, 141, 147, 150, 153, 154, 172, 177, 186, 188, 198, 200, 221, 222, 227, 228, 241, 246, 250];
                this.$xc_famousPlanetsGalOne = this._xc_isArray1_subsetOfArray2(famousPlanetsGalOne, this.$xc_record[0]);
            }
            if (!this.$xc_famousPlanetsGalTwo) {
                var famousPlanetsGalTwo = [6, 23, 24, 29, 33, 42, 45, 48, 53, 54, 57, 58, 65, 66, 74, 78, 82, 88, 94, 109, 113, 114, 115, 122, 127, 136, 140, 144, 178, 188, 189, 193, 202, 204, 207, 221, 236];
                this.$xc_famousPlanetsGalTwo = this._xc_isArray1_subsetOfArray2(famousPlanetsGalTwo, this.$xc_record[1]);
            }
            if (!this.$xc_prodigalSuns) {
                var prodigalSuns = [133, 206];
                this.$xc_prodigalSuns = this._xc_isArray1_subsetOfArray2(prodigalSuns, this.$xc_record[2]);
            }
            if (!this.$xc_lostWorlds) {
                var lostWorlds = [33, 41, 55, 202];
                this.$xc_lostWorlds = this._xc_isArray1_subsetOfArray2(lostWorlds, this.$xc_record[5]);
            }
            if (!this.$xc_greatRift) {
                var greatRift = [15, 17, 27, 30, 61, 79, 97, 110, 115, 125, 130, 134, 137, 139, 153, 161, 173, 178, 186, 191, 205, 214, 218, 228, 229, 237, 248];
                this.$xc_greatRift = this._xc_isArray1_subsetOfArray2(greatRift, this.$xc_record[6]);
            }
            if (!this.$xc_oresratiChallenge) {
                if (this.$xc_record[7].indexOf(162) !== -1) {
                    this.$xc_oresratiChallenge = true;
                }
            }
            if (!this.$xc_everyGalaxy) {
                if (this.$xc_record[0].length !== 0 &&
                    this.$xc_record[1].length !== 0 &&
                    this.$xc_record[2].length !== 0 &&
                    this.$xc_record[3].length !== 0 &&
                    this.$xc_record[4].length !== 0 &&
                    this.$xc_record[5].length !== 0 &&
                    this.$xc_record[6].length !== 0 &&
                    this.$xc_record[7].length !== 0) {
                    this.$xc_everyGalaxy = true;
                }
            }
            this.$xc_mileStonesPage = "";
            if (this.$xc_oldWorlds) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_old") + "\n";
            }
            if (this.$xc_famousPlanetsGalOne) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_famous_1") + "\n";
            }
            if (this.$xc_famousPlanetsGalTwo) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_famous_2") + "\n";
            }
            if (this.$xc_prodigalSuns) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_prodigal") + "\n";
            }
            if (this.$xc_lostWorlds) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_lost") + "\n";
            }
            if (this.$xc_greatRift) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_rift") + "\n";
            }
            if (this.$xc_oresratiChallenge) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_oresrati") + "\n";
            }
            if (this.$xc_everyGalaxy) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_eight") + "\n";
            }
            if (!this.$xc_oldWorlds) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_no_old") + "\n";
            }
            if (!this.$xc_famousPlanetsGalOne) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_no_famous_1") + "\n";
            }
            if (!this.$xc_famousPlanetsGalTwo) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_no_famous_2") + "\n";
            }
            if (!this.$xc_prodigalSuns) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_no_prodigal") + "\n";
            }
            if (!this.$xc_lostWorlds) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_no_lost") + "\n";
            }
            if (!this.$xc_greatRift) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_no_rift") + "\n";
            }
            if (!this.$xc_oresratiChallenge) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_no_oresrati") + "\n";
            }
            if (!this.$xc_everyGalaxy) {
                this.$xc_mileStonesPage += expandMissionText("explorers_club_achieved_no_eight") + "\n";
            }
            this.$xc_screenToShowNext = "achievements";
            this.missionScreenOpportunity();
        }
    
        this._xc_isArray1_subsetOfArray2 = function (array1, array2) {
            "use strict";
            if (!array1 || !array2 || array1.length > array2.length) {
                return false;
            }
            if (array1.length === array2.filter(function (value) {return this.indexOf(value) >= 0;}, array1).length) {
                return true;
            } else {
                return false;
            }
        }
    
    /* ========================================================
    			INITIALIZATION
    =========================================================== */
    
        this.startUp = function () {
            "use strict";
            if (galaxyNumber < 0 || galaxyNumber > 7) {
                var message = "Warning: Explorers' Club is not compatible with additional hacked galaxies. OXP disabled.";
                log(this.name, message);
                player.consoleMessage(message, 10);
                for (prop in this) {
                    if (prop !== "name" && prop !== "version") {
                        delete this[prop];
                    }
                }
                return;
            }
            if (!missionVariables.explorerClub_record) {
                this.$xc_record = [[], [], [], [], [], [], [], []];
                this.$xc_chartOption = 1;
                this.$xc_visitOption = 1;
                this.$xc_firstRun = true;
            } else {
                this.$xc_record = JSON.parse(missionVariables.explorerClub_record);
                this.$xc_chartOption = missionVariables.explorerClub_chartOption;
                this.$xc_visitOption = missionVariables.explorerClub_visitOption;
            }
            this.$xc_fadingReminder = 7;
            delete this.startUp;
            // Defunct mission variables from previous versions:-
            delete missionVariables.explorerClub_snapshotOption;
            delete missionVariables.explorerClub_snapshotOnLaunch;
            mission.setInstructions(null, this.name);
        }
    
        this.startUpComplete = function () {
            "use strict";
            if (player.ship.docked) {
                this.shipDockedWithStation(player.ship.dockedStation);
                if (this.$xc_firstRun) {
                    delete this.$xc_firstRun;
                    if (player.ship.dockedStation === system.mainStation) {
                        this.$xc_record[galaxyNumber][0] = system.ID;
                    }
                }
            }
            delete this.startUpComplete;
        }
    
    /* ========================================================
    			INTERFACE FUNCTIONS
    
    	Other scripts can call these functions.
    =========================================================== */
    
        this._playerRank = function (requested) {
            "use strict";
            if (this.startUp) {
                this.startUp();
            }
            var chartVisited = this.$xc_record[galaxyNumber].length;
            if (requested === "chart") {
                return chartVisited;
            }
            var totalVisited = 0;
            for (var i = 0; i < 8; i++) {
                totalVisited += this.$xc_record[i].length;
            }
            if (requested === "total") {
                return totalVisited;
            }
            var rank;
            if (totalVisited >= 2048) {
                rank = expandMissionText("explorers_club_rank_2048");
            } else if (totalVisited >= 1024) {
                rank = expandMissionText("explorers_club_rank_1024");
            } else if (totalVisited >= 512) {
                rank = expandMissionText("explorers_club_rank_512");
            } else if (totalVisited >= 256) {
                rank = expandMissionText("explorers_club_rank_256");
            } else if (totalVisited >= 128) {
                rank = expandMissionText("explorers_club_rank_128");
            } else {
                rank = expandMissionText("explorers_club_rank_1");
            }
            if (requested === "rank") {
                return rank;
            }
            var rankString = expandMissionText("explorers_club_rank_string", {"explorers_club_rank_chart": chartVisited, "explorers_club_rank_total": totalVisited, "explorers_club_rank_player": rank});
            return rankString;
        }
    
        this._playerVisited = function (galaxy, sysID) {
            "use strict";
            if (this.startUp) {
                this.startUp();
            }
            if (typeof(sysID) === "undefined") {
                return "bad parameters";
            }
            if (galaxy < 0 ||
                galaxy > 7) {
                return "bad galaxy";
            }
            if (sysID < 0 ||
                sysID > 255) {
                return "bad system";
            }
            if (this.$xc_record[galaxy].indexOf(sysID) === -1) {
                return false;
            } else {
                return true;
            }
        }
    
    /* ========================================================
    			OTHER EVENT HANDLER
    
    This is the only change from 1.4.4 to 1.4.6 - removing this 
    because, for many players, the manifest screen is a lot 
    more cluttered than it used to be.
    =========================================================== */
    
      //  this.guiScreenWillChange = function (to, from) {
      //      "use strict";
      //      if (to === "GUI_SCREEN_MANIFEST") {
      //          mission.setInstructions(this._playerRank(), this.name);
      //      }
      //  }
    
    /* ========================================================
    			THE END
    =========================================================== */