Back to Index Page generated: Dec 20, 2024, 7:22:09 AM

Expansion Vortex

Content

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description Two new player ships - a brawling blockade runner and a military spec cargo hauler. Rare and expensive, but both are kitted out with a lot of powerful and unique features and abilities. Two new player ships - a brawling blockade runner and a military spec cargo hauler. Rare and expensive, but both are kitted out with a lot of powerful and unique features and abilities.
Identifier oolite.oxp.Thargoid.Vortex oolite.oxp.Thargoid.Vortex
Title Vortex Vortex
Category Ships Ships
Author Thargoid Thargoid
Version 1.32 1.32
Tags ships ships
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Information URL http://wiki.alioth.net/index.php/Vortex_OXP n/a
Download URL https://wiki.alioth.net/img_auth.php/a/a5/Vortex-1.32.oxz n/a
License Creative Commons Attribution - Non-Commercial - Share Alike 3.0 license with clauses - see readme file Creative Commons Attribution - Non-Commercial - Share Alike 3.0 license with clauses - see readme file
File Size n/a
Upload date 1610873403

Documentation

Also read http://wiki.alioth.net/index.php/Vortex

Readme & License.txt

Vortex OXP by Thargoid.

This OXP adds a new player ship - the Aquarian Shipbuilding Corporation's Vortex. Originally designed as a military blockade runner, it combines an excellent cargo carrying capacity with the speed and muscle to cope with most trouble it may encounter. With the cooling of the sector wars some of these ships have been demobilised and made available to the private market (with a few of their more lethal features removed, but many desirable ones still in place).

The Vortex class has a number of new and revolutionary features for the discerning commander:

* AI control - integral to each Vortex is its Military AI Construct, or MAC for short. This is the vessels co-pilot, supervisor and assistant. It oversees the automated systems, plus deals with running the general ship systems.

* Multibay cargo system - specifically designed for this ship (and the forerunner of the recent civilian Hyper Cargo system), the multibay essentially gives the ship five distinct cargo bays of 30t each. Whilst only one is "physically" present at a time, they can be switched both in-flight and whilst docked allowing their content to be accessed and items loaded or unloaded. Due to the specialised nature of their workings, neither the civilian Hyper Cargo system nor passenger berths are compatible with the system.

* Missile bays - the Vortex features five distinct missile bays, each with five pylons. These are switchable both in-flight and whilst docked, and the current one will be auto-switched to the next equipped bay by the MAC should all items in the current bay be expended.

* Regeneration - making use of the military grade version of the well-known ASC repair nanobots, under the supervision of the MAC the Vortex can regenerate most damage that may result from combat.

* Defense systems - from its military history, the Vortex features a missile defense screen in the form of a hull-mounted microwave cannon. Due to the difficulty in targetting and aiming this (especially whilst in combat), it is entirely controlled by the MAC. The system will also auto-link to the ships ECM systems if fitted, as a further line of defense.

* Reflective plating - designed as a counter-measure for target-locking systems, this can cause attacking vessels problems by disrupting their target lock onto the vessel.

* Regenerative fuel injection - the fuel injection systems are designed to capture any unburned fuel and return it to the ships tanks. As a result the ship can run under injection for much longer than similar craft.

* Emergency micro-jumping - if energy is drained to a critical level during combat (without destroying the ship completely) and if there is even a little fuel available, the MAC will attempt an in-system witchspace micro-jump to remove the ship from the immediate danger area.


These ships are very rare and costly. A standard version with just the basics usually retails for around 2 million credits, and are only seen at high-tech systems (12+). But for this price you get a fast and maneuverable combat ship with a hauler-class cargo capacity, front and rear military lasers, four defense turrets plus the systems mentioned above. All in all a very nice ship to fly.

Verson 1.20 - The Maelstrom

As a variant, version 1.20 of the OXP introduces the Maelstrom military transport ship. This ship was built along the same lines as the Vortex, but is designed more for bulk carrying of cargo and munitions rather than as a brute force combat ship. It features many of the same features as its sister ship, but has a larger cargo capacity (3x 100t bays using the same Multibay system), at the expense of some maneuverability and offensive capability. They tend to appear less frequently on the market simply as they are such a useful vessel, both for the military and on the decommissioned markets. They do not carry turretted defense weapons, and only have 3 banks of 4 missile pylons.

--------------------------------------------------------------
Controls:

The bay switching screen is accessed by going from the manifest screen to the marketplace screen (F5-F8 whilst docked, F5-F5-F8 whilst in flight). When docked the cargo bay screen is displayed by default, whilst in-flight the missile bay screen is instead (they can be reached from one another). To aid usability the time acceleration factor is used to slow things down whilst the screen is open in-flight.

The missile bays can also be cycled through by using the "select next missile bay" item on the equipment screen (to aid in rapidly equipping the bays). And if the final pylon is used whilst in-flight, the MAC will automatically select the next bay with equipment in it so leave the pilot to concentrate on combat and flying.

The ships turrets (for the Vortex) can also be deactivated and retracted using the equipment select key ("n" in the default key mapping) and reactivated in the same way. This allows them to be controlled in situations where their firing may be undesirable but use of lasers may still be needed.

All other items are automatically handled by the MAC, and do not require any intervention from the Commander.

--------------------------------------------------------------
Compatibility notes:

This OXP is not compatible with HyperCargo, the system part of Repair Bots, the universal turret switcher, the military fuel injectors (for the Vortex, which has them as standard) or the APRIL unit.

Also due to the specialised cargo handling systems, equipment which takes up cargo space cannot be used with either ship. Passenger berths are also not suitable for this ship, as the passengers may object to going into witchspace without a ship.


--------------------------------------------------------------

License:

This OXP is released under the Creative Commons Attribution - Non-Commercial - Share Alike 3.0 license with the following clauses:

* Whilst you are free (and encouraged) to re-use any of the scripting, models or texturing in this OXP, the usage must be distinct from that within this OXP. Unique identifiers such as (but not limited to) unique shipdata.plist entity keys, mission variables, script names (this.name), equipment identity strings (EQ_), description list arrays and entity roles must not be re-used without prior agreement. Basically if it's unique or would identify or overwrite anything in the original OXP, then you may not re-use it (for obvious compatibility reasons).
* rebundling of this OXP within another distribution is permitted as long as it is unchanged. The following derivates however are permitted and except from the above:
	* the conversion of files between XML and openStep.
	* the merging of files with other files of the same type from other OXPs.
* The license information (either as this file or merged into a larger one) must be included in the OXP.
* Even though it is not compulsory, if you are re-using any sizable or recognisable piece of this OXP, please let me know :)

--------------------------------------------------------------

Instructions:

Unzip the file, and then move the folder "Vortex 1.31.oxp" to the AddOns directory of your Oolite installation.

--------------------------------------------------------------

Version history:

26/09/2010 - Version 1.00 - Initial release
20/01/2011 - Version 1.01 - minor script tweak to remove zombie cargo bug on game save and reload.
13/02/2011 - Version 1.02, removal of upper limit, to allow running with 1.75. Also removed TAF from the scripting.
19/02/2011 - Version 1.10, release for 1.75. Added activation/deactivation key for ship turrets.
19/02/2011 - Version 1.11, silent bug with Manifest and manifest. Script corrected.
15/06/2011 - Version 1.12, bugfix for cargo loss on saving/reloading issue.
30/06/2011 - Version 1.20, introduction of the Maelstrom
20/09/2011 - Version 1.21, bugfix for NPC name issue, plus made mil fuel injectors standard (and seperate OXP ones incompatible) and also never needs a maintenance overhaul (as it's a self-repairing ship).
17/12/2011 - Version 1.22, shader fix for newer AMD/ATI drivers
12/04/2012 - Version 1.23, compatibility with New Cargoes OXP, plus shrinking texture of Maelstrom.
09/05/2012 - Version 1.24, added incompatibility with cargo-using equipment (ready for Oolite v1.77)
09/06/2012 - Version 1.25, improved multibay support for gems/gold/platinum, plus blocked randomshipnames from changing the NPC ships display names.
13/09/2012 - Version 1.26, change to military injector code to mirror update of separate OXP.
18/11/2012 - Version 1.27, removed velocity boost from mil injectors - no more flying backwards!
08/01/2013 - Version 1.30, various script tweaks for 1.77. This is now the minimum required version.

14/12/2018 - Version 1.31, various script tweaks for 1.82. This is now the minimum required version.
 - Added "use strict" in the some scripts.
 - Edited name of the cargo type for new spelling.
 - Changed low energy limit for emergency displacement activating (from 33 to 64(Vortex) and to 128(Maelstrom)) due to small effect of previous displacement with high amount equipment damage.
 - Tweaks in the Vortex ship script: delete a space in the ship name and adds a police patrol names.

09/04/2020 - Version 1.32, added test to verify if the player's ship is a Vortex or Maelstrom in all event handlers

--------------------------------------------------------------

Acknowledgements:

With thanks to Commanders Ganelon, OneoftheLost, Smivs, maik, Zieman, Gnudoll, UK_Eliter and Svengali for test piloting duties and glitch reporting.

And special thanks to Okti for the 1.11 error report, could have been a nasty one! And Capt Murphy for his assistance with the 1.12 fix.

Also a nod to Zireael for the concept of a freighter variant of the Vortex - cue the Maelstrom!

And thanks for Mauiby de Fug and Fatleaf for the bug report for the NPC name glitch

Lastly thanks to cim for providing nice API functions for New Cargoes to make compatibility easy, and to Albee for the bug report on the gems/gold/platinum cargo pod issue.

Equipment

Name Visible Cost [deci-credits] Tech-Level
Vortex Ship Systems no 0 100+
Select Next Missile Bay yes 0 1+
Turret Switcher no 0 100+

Ships

Name
Vortex
vortex-maelstrom-NPC
Maelstrom
Vortex
Vortex Turret

Models

This expansion declares no models.

Scripts

Path
Scripts/vortex_NPC.js
"use strict";
this.name                = "vortex_NPC.js";
this.author              = "Thargoid";
this.copyright           = "Creative Commons: attribution, non-commercial, sharealike with clauses - see readme.txt";
this.description         = "Vortex NPC ship naming script.";
this.version             = "1.32";


this.shipSpawned = function()
{
    this.shipTitle = "Vortex";
    this.chooseName = Math.random();
    if(this.chooseName < 0.33)
        {
        switch(this.ship.primaryRole)
            {
            case "trader":
            case "sunskim-trader":
                {
                this.trader1 = ["Voyager", "Peddler", "Merchant", "Purveyor", "Trader", "Bringer", "Vendor", "Seeker", "Seller", "Master", "Trafficker", "Dealer"];
                this.trader2 = ["Ventures", "Wares", "Treasures", "Assets", "Blessings", "Fortune", "Prosperity", "Favours", "Gains", "Profit"];
                this.random1 = (Math.floor((Math.random() * this.trader1.length) - 0.000000001));
                this.random2 = (Math.floor((Math.random() * this.trader2.length) - 0.000000001));
                if(this.random1 < 0 || this.random1 > (this.trader1.length - 1)) { this.random1 = 0; }
                if(this.random2 < 0 || this.random2 > (this.trader2.length - 1)) { this.random2 = 0; }
                this.shipTitle = "Vortex: " + this.trader1[this.random1] + " of " + this.trader2[this.random2];
                break;
                }
            case "pirate":
                {
                this.pirate1 = ["Thief", "Stealer", "Buccaneer", "Mercenary", "Seeker", "Marauder", "Raider", "Brigand", "Corsair", "Slayer"];
                this.pirate2 = ["Loot", "Booty", "Plunder", "Lucre", "Cargo", "Harvest", "Sorrow", "Yield", "Acquisition", "Profit"];
                this.random1 = (Math.floor((Math.random() * this.pirate1.length) - 0.000000001));
                this.random2 = (Math.floor((Math.random() * this.pirate2.length) - 0.000000001));
                if(this.random1 < 0 || this.random1 > (this.pirate1.length - 1)) { this.random1 = 0; }
                if(this.random2 < 0 || this.random2 > (this.pirate2.length - 1)) { this.random2 = 0; }
                this.shipTitle = "Vortex: " + this.pirate1[this.random1] + " of " + this.pirate2[this.random2];
                break;
                }
            case "hunter":
                {
                this.hunter1 = ["Soldier", "Hunter", "Mercenary", "Slayer", "Fighter", "Champion", "Gladiator", "Paladin", "Knight", "Warrior", "Master"];
                this.hunter2 = ["Justice", "Pain", "Retribution", "Revenge", "Penance", "Vengeance", "Punishment", "Balance", "Blame", "Sorrow", "War", "Battle"];

                this.random1 = (Math.floor((Math.random() * this.hunter1.length) - 0.000000001));
                this.random2 = (Math.floor((Math.random() * this.hunter2.length) - 0.000000001));
                if(this.random1 < 0 || this.random1 > (this.hunter1.length - 1)) { this.random1 = 0; }
                if(this.random2 < 0 || this.random2 > (this.hunter2.length - 1)) { this.random2 = 0; }
                this.shipTitle = "Vortex: " + this.hunter1[this.random1] + " of " + this.hunter2[this.random2];
                break;
                }
            case "police":
                        case "police-station-patrol":
                        case "police-witchpoint-patrol":
            case "wingman":
                {
                this.police1 = ["Protector", "Defender", "Keeper", "Bringer", "Shield", "Sentinel", "Shepherd", "Watcher", "Warden", "Guardian"];
                this.police2 = ["Law", "Harmony", "Justice", "Honesty", "Right", "Protection", "Equity", "Order", "Covenant", "Truth", "Decree", "Dictate", "Regulation"];
                this.random1 = (Math.floor((Math.random() * this.police1.length) - 0.000000001));
                this.random2 = (Math.floor((Math.random() * this.police2.length) - 0.000000001));
                if(this.random1 < 0 || this.random1 > (this.police1.length - 1)) { this.random1 = 0; }
                if(this.random2 < 0 || this.random2 > (this.police2.length - 1)) { this.random2 = 0; }
                this.shipTitle = "Vortex: " + this.police1[this.random1] + " of " + this.police2[this.random2];
                break;
                }
            }
        }
        
        else
        
        {
            this.titleArray = ["Clairvoyant", "Powerslave", "Passepartout", "Pegasus", "Titanic", "Olympic", "Galactica", "Andromeda", "Kessel", "Aegidian", "Aqualina", "Antilles", "Dark Star", "Atlantis", "Discovery", "Kobayashi Maru", "Bermuda Cube", "Nebula", "Empiric", "Majestic", "Emerald Moon", "Empress of Ryaxaxax", "Far Sky", "Fuji Maru", "Imperator", "Independence", "Leviathan", "Maelstrom", "Meridian", "Michelangelo", "Millenium", "Neptune", "Neptunia", "Oceania", "Oceanic", "Orca", "Republic", "Resolute", "Saturnia", "Soyuz", "Valkerie", "Valhalla", "Star Dancer", "Solaris", "Victory", "Viking", "Vulcan", "Concorde", "Wolf", "Adonis", "Poseidon", "Zeus", "Apollo", "Eagle", "Phoenix", "Adventurer", "Odyssey", "Dolphin", "Allure", "Amadeus", "Adamant", "Spirit", "Aquamarine", "Arcadia", "Calypso", "Conquest", "Freedom", "Imagination", "Inspiration", "Legend", "Liberty", "Constellation", "Infinity", "Heart of Gold", "Solstice", "Mercury", "Jupiter", "Saturn", "Mars", "Crystal", "Symphony", "Melody", "Ambassador", "Rhapsody", "Wonder", "Dream Weaver", "Dreamer", "Elation", "Enchanter", "Enchantment", "Illusion", "Conjurer", "Magii", "Far Star", "Venturer", "Jubilee", "Sun Skimmer", "Lucky", "Preen", "Lucky Star", "Brigadoon", "Mardi Gras", "Carnival", "Festival", "Samba", "Tango", "Mariner", "Minerva", "Fantasia", "Opera", "Firefox", "Explorer", "Oasis", "Orion", "Platinum", "Aloha", "Radiant", "Regal", "Renaissance", "Princess", "Royale", "Rose", "Wonder", "Sovereign", "Vista", "Capricorn", "Aquarius", "Pisces", "Aries", "Taurus", "Gemini", "Leo", "Virgo", "Libra", "Scorpio", "Corona", "Wind Song", "Zion", "Infinite Dream"];
            this.titleChoice = Math.floor(Math.random() * this.titleArray.length);
            this.shipTitle = "Vortex: " + this.titleArray[this.titleChoice];
                    //return;
        }    
    this.ship.displayName = this.shipTitle;
}
Scripts/vortex_maelstrom.js
notYetParsed
Scripts/vortex_maelstromNPC.js
"use strict";
this.name                = "vortex_maelstromNPC.js";
this.author              = "Thargoid";
this.copyright           = "Creative Commons: attribution, non-commercial, sharealike with clauses - see readme.txt";
this.description         = "Maelstrom NPC ship naming script.";
this.version             = "1.32";


this.shipSpawned = function()
{
    this.chooseName = Math.random();
    if(this.chooseName < 0.33)
        {
        switch(this.ship.primaryRole)
            {
            case "trader":
            case "sunskim-trader":
                {
                this.trader1 = ["Voyager", "Peddler", "Merchant", "Purveyor", "Trader", "Bringer", "Vendor", "Seeker", "Seller", "Master", "Trafficker", "Dealer"];
                this.trader2 = ["Ventures", "Wares", "Treasures", "Assets", "Blessings", "Fortune", "Prosperity", "Favours", "Gains", "Profit"];
                this.random1 = (Math.floor((Math.random() * this.trader1.length) - 0.000000001));
                this.random2 = (Math.floor((Math.random() * this.trader2.length) - 0.000000001));
                if(this.random1 < 0 || this.random1 > (this.trader1.length - 1)) { this.random1 = 0; }
                if(this.random2 < 0 || this.random2 > (this.trader2.length - 1)) { this.random2 = 0; }
                this.shipTitle = "Maelstrom: " + this.trader1[this.random1] + " of " + this.trader2[this.random2];
                break;
                }
            case "vortex_maelstrom_NPC":
                {
                this.shipTitle = "Maelstrom"; 
                break;
                }
            }
        }
        
        else
        
        {
        if(this.chooseName > 0.66)
            {
            this.titleArray = ["Trader", "Glory", "Dream", "Merchant", "Tycoon", "Dealer", "Opportunity", "Conveyor", "Caravelle", "Transporter", "Commerce", "Fortune"];
            this.titleChoice = Math.floor(Math.random() * this.titleArray.length);
            this.systemName = System.systemNameForID(Math.floor((Math.random() - 0.000001) * 256));
            this.shipTitle = "Maelstrom: " + this.systemName + " " + this.titleArray[this.titleChoice];
            }
        else
            {
            this.titleArray = ["Clairvoyant", "Powerslave", "Passepartout", "Pegasus", "Titanic", "Olympic", "Galactica", "Andromeda", "Kessel", "Aegidian", "Aqualina", "Antilles", "Dark Star", "Atlantis", "Discovery", "Kobayashi Maru", "Bermuda Cube", "Nebula", "Empiric", "Majestic", "Emerald Moon", "Empress of Ryaxaxax", "Far Sky", "Fuji Maru", "Imperator", "Independence", "Leviathan", "Maelstrom", "Meridian", "Michelangelo", "Millenium", "Neptune", "Neptunia", "Oceania", "Oceanic", "Orca", "Republic", "Resolute", "Saturnia", "Soyuz", "Valkerie", "Valhalla", "Star Dancer", "Solaris", "Victory", "Viking", "Vulcan", "Concorde", "Wolf", "Adonis", "Poseidon", "Zeus", "Apollo", "Eagle", "Phoenix", "Adventurer", "Odyssey", "Dolphin", "Allure", "Amadeus", "Adamant", "Spirit", "Aquamarine", "Arcadia", "Calypso", "Conquest", "Freedom", "Imagination", "Inspiration", "Legend", "Liberty", "Constellation", "Infinity", "Heart of Gold", "Solstice", "Mercury", "Jupiter", "Saturn", "Mars", "Crystal", "Symphony", "Melody", "Ambassador", "Rhapsody", "Wonder", "Dream Weaver", "Dreamer", "Elation", "Enchanter", "Enchantment", "Illusion", "Conjurer", "Magii", "Far Star", "Venturer", "Jubilee", "Sun Skimmer", "Lucky", "Preen", "Lucky Star", "Brigadoon", "Mardi Gras", "Carnival", "Festival", "Samba", "Tango", "Mariner", "Minerva", "Fantasia", "Opera", "Firefox", "Explorer", "Oasis", "Orion", "Platinum", "Aloha", "Radiant", "Regal", "Renaissance", "Princess", "Royale", "Rose", "Wonder", "Sovereign", "Vista", "Capricorn", "Aquarius", "Pisces", "Aries", "Taurus", "Gemini", "Leo", "Virgo", "Libra", "Scorpio", "Corona", "Wind Song", "Zion"];
            this.titleChoice = Math.floor(Math.random() * this.titleArray.length);
            this.shipTitle = "Maelstrom: " + this.titleArray[this.titleChoice];
            }
        }        
    this.ship.displayName = this.shipTitle;
}
Scripts/vortex_player.js
notYetParsed
Scripts/vortex_turretToggle.js
"use strict";
this.name                = "vortex_turretToggle.js";
this.author              = "Thargoid";
this.copyright           = "Creative Commons: attribution, non-commercial, sharealike with clauses - see readme.txt";
this.description         = "Script for swapping over turrets from active to inactive and back,";
this.version             = "1.32";

this.activated = function()
    {    
    if(missionVariables.multiBay_turret === "active")
        {
        player.consoleMessage("MAC - ships turrets are now deactivated.",6);
        missionVariables.multiBay_turret = "inactive";
        }
    else
        {
        player.consoleMessage("MAC - ships turrets are now activated.",6);
        missionVariables.multiBay_turret = "active";
        }
        
    worldScripts["vortex_player.js"].turretToggle();    
    }