Back to Index | Page generated: Dec 20, 2024, 7:22:10 AM |
from Expansion Manager's OXP list | from Expansion Manifest | |
---|---|---|
Description | Adds some beautiful and very large vessels to the spacelanes. | Adds some beautiful and very large vessels to the spacelanes. |
Identifier | oolite.oxp.smivs.Liners | oolite.oxp.smivs.Liners |
Title | Liners | Liners |
Category | Ships | Ships |
Author | Smivs, P.A.Groove, Griff and Thargoid | Smivs, P.A.Groove, Griff and Thargoid |
Version | 1.7.0 | 1.7.0 |
Tags | ships | ships |
Required Oolite Version | ||
Maximum Oolite Version | ||
Required Expansions | ||
Optional Expansions | ||
Conflict Expansions | ||
Information URL | http://wiki.alioth.net/index.php/Liners | n/a |
Download URL | https://wiki.alioth.net/img_auth.php/7/76/Liners_v1.7.0.oxz | n/a |
License | Creative Commons Attribution - Non-Commercial - Share Alike 3.0 license | Creative Commons Attribution - Non-Commercial - Share Alike 3.0 license |
File Size | n/a | |
Upload date | 1610873341 |
Also read http://wiki.alioth.net/index.php/Liners
{\rtf1\ansi\deff3\adeflang1025 {\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\froman\fprq2\fcharset0 Arial;}{\f5\froman\fprq2\fcharset0 Times New Roman;}{\f6\fnil\fprq2\fcharset0 FreeSans;}{\f7\fnil\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}} {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} {\stylesheet{\s0\snext0\ql\widctlpar\ltrpar\hyphpar0\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\alang1081\loch\f5\fs24\lang2057 Normal;} {\s15\sbasedon0\snext16\ql\widctlpar\sb240\sa120\keepn\ltrpar\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\loch\f4\fs28\lang2057 Heading;} {\s16\sbasedon0\snext16\sl288\slmult1\ql\widctlpar\sb0\sa120\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs24\lang2057 Text Body;} {\s17\sbasedon16\snext17\sl288\slmult1\ql\widctlpar\sb0\sa120\ltrpar\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\loch\f5\fs24\lang2057 List;} {\s18\sbasedon0\snext18\ql\widctlpar\sb120\sa120\ltrpar\cf1\i\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\loch\f5\fs24\lang2057 Caption;} {\s19\sbasedon0\snext19\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\loch\f5\fs24\lang2057 Index;} {\s20\sbasedon0\snext20\ql\widctlpar\sb120\sa120\ltrpar\cf1\i\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs24\lang2057 caption;} {\s21\sbasedon0\snext21\ql\widctlpar\sb120\sa120\ltrpar\cf1\i\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs24\lang2057 WW-caption;} {\s22\sbasedon0\snext22\ql\widctlpar\sb120\sa120\ltrpar\cf1\i\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs24\lang2057 WW-caption1;} {\s23\sbasedon0\snext23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057 Preformatted Text;} }{\*\generator LibreOffice/5.0.3.2$Linux_X86_64 LibreOffice_project/00m0$Build-2}{\info{\author smivs }{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr2018\mo4\dy12\hr21\min41}{\printim\yr0\mo0\dy0\hr0\min0}}\deftab709 \viewscale100 {\*\pgdsctbl {\pgdsc0\pgdscuse451\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Default Style;}} \formshade{\*\pgdscno0}\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc {\*\ftnsep}\pgndec\pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar{\i0\b0\rtlch \ltrch\loch\lang1025 Liners OXP v1.}{\i0\b0\rtlch \ltrch\loch\lang1025 7}{\i0\b0\rtlch \ltrch\loch\lang1025 .}{\i0\b0\rtlch \ltrch\loch\lang1025 0} \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar\rtlch \ltrch\loch\lang1025 \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar{\i0\b0\rtlch \ltrch\loch\lang1025 Liners adds huge cruise liners to the spaceways. These are enormous vessels, self-contained cities in space, with often tens of thousands of passengers on board. They will occasionally be found en-route to the planet, or in orbit around the planet close to the Main Station where passengers can enjoy the facilities of the GalCop stations and visit the planet below. Many of these ships have their own escort ships, shuttles and supply ships and these will often be seen ferrying passengers, crew and supplies from the station or the liner.} \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar\rtlch \ltrch\loch\lang1025 \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar{\i0\b0\rtlch \ltrch\loch\lang1025 More information can be found on the Wiki page:-} \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar{\i0\b0\rtlch \ltrch\loch\lang1025 http://wiki.alioth.net/index.php/Liners} \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar\rtlch \ltrch\loch\lang1025 \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar{\i0\b0\rtlch \ltrch\loch\lang1025 This OXP is self contained and has no dependencies. Big Ships and CCL are NOT required - this OXP will work with BigShips installed. The Aurora liner is available as a separate OXP - Liners OXP supercedes Aurora OXP and it should be removed when Liners is installed. }{\i0\b0\rtlch \ltrch\loch\lang1025 Also added is the P A G roove Orisis.} \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar\rtlch \ltrch\loch\lang1025 \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar{\i0\b0\rtlch \ltrch\loch\lang1025 Licence} \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar{\i0\b0\rtlch \ltrch\loch\lang1025 This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. To view a copy of this license, visit the Creative Commons website or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.} \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar\rtlch \ltrch\loch\lang1025 \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar{\i0\b0\rtlch \ltrch\loch\lang1025 Credits} \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar{\i0\b0\rtlch \ltrch\loch\lang1025 This OXP was made with contributions from Thargoid, P A Groove, Smivs, Griff }{\i0\b0\rtlch \ltrch\loch\lang1025 and cbr}{\i0\b0\rtlch \ltrch\loch\lang1025 . The base models for the Ferry, Sidewinder-X Escort and Lifeboat are by Aegidian, and the Saga Class liner model is by ADCK. Thanks also go to Commander McLane, PHKB and Eric Walch for help, advice and bugfixing.} \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar\rtlch \ltrch\loch\lang1025 \par \pard\plain \s23\ql\widctlpar\ltrpar\cf1\kerning1\dbch\af7\langfe1081\dbch\af7\afs24\loch\f5\fs20\lang2057\ql\widctlpar\ltrpar\rtlch \ltrch\loch \par }
Path | |
---|---|
Scripts/Orisis_shipScript.js | this.name = "Orisis_shipScript"; this.author = "Thargoid"; this.copyright = "Creative Commons: attribution, non-commercial, sharealike."; this.description = "Adds lifepods when energy gets low"; this.version = "1.0"; this.shipEnergyIsLow = function() { if(!this.shipEvacuated) { this.shipEvacuated = true; var leftPods = Math.ceil(Math.random() * 10) + 5; var rightPods = Math.ceil(Math.random() * 10) + 5; this.ship.commsMessage("Mayday, mayday! Hull breach imminent, all passengers and non-essential crew to the lifepods!"); var offset; for(var i=0; i < rightPods; i++) { offset = new Vector3D([240, 0, Math.random() * 670 - 483]); var orientation = this.ship.orientation; orientation.w = -orientation.w; system.legacy_addShipsAtPrecisely("escape-capsule", 1, "abs", this.ship.position.add(offset.rotateBy(orientation))); } for(var i=0; i < leftPods; i++) { offset = new Vector3D([-240, 0, Math.random() * 670 - 483]); var orientation = this.ship.orientation; orientation.w = -orientation.w; system.legacy_addShipsAtPrecisely("escape-capsule", 1, "abs", this.ship.position.add(offset.rotateBy(orientation))); } } } this.shipEnergyBecameFull = function() { this.shipEvacuated = false; } |
Scripts/liners_aurora.js | "use strict"; this.name = "liners_aurora"; this.author = "Thargoid"; this.copyright = "Creative Commons: attribution, non-commercial, sharealike."; this.description = "Aurora shipscript"; this.version = "1.6.2"; // the functions for placing the escorts around the Aurora ... (function() { const escortPositions = [ // X-shape escort pattern new Vector3D(-1, 1, 0), new Vector3D( 1, 1, 0), new Vector3D(-1, -1, 0), new Vector3D( 1, -1, 0) ]; // ... are nicked from Ahruman this.coordinatesForEscortPosition = function(index) { var highPart = 1 + (index >> 2); // Equivalent to 1 + Math.floor(position / 4) var lowPart = index % 4; var spacing = this.ship.collisionRadius * 2.5 * highPart; return escortPositions[lowPart].multiply(spacing); } }).call(this); this.shipEnergyIsLow = function() { if(!this.shipEvacuated) { this.shipEvacuated = true; this.ship.desiredSpeed = 0; var leftPods = Math.ceil(Math.random() * 10) + 5; var rightPods = Math.ceil(Math.random() * 10) + 5; var leftOrientation = this.ship.orientation.multiply([0.7071, 0, 0.7071, 0]); var rightOrientation = this.ship.orientation.multiply([0.7071, 0, -0.7071, 0]); var leftVelocity = this.ship.vectorRight.multiply(-200).add(this.ship.velocity); var rightVelocity = this.ship.vectorRight.multiply(200).add(this.ship.velocity); this.ship.commsMessage("Mayday, mayday! Hull breach imminent, all passengers and non-essential crew to the lifepods!"); var offset, pod, fraction, i; for(i=0; i < rightPods; i++) { // ship has a triangular shape fraction = Math.random(); offset = new Vector3D([(1 - fraction) * 1400, 0, (fraction * 4315) - 2155]); pod = system.addShips("escape-capsule", 1, this.ship.position.add(offset.rotateBy(this.ship.orientation)), 0)[0]; pod.orientation = rightOrientation; pod.velocity = rightVelocity; // eject them outwards } for(i=0; i < leftPods; i++) { fraction = Math.random(); offset = new Vector3D([(1 - fraction) * -1400, 0, (fraction * 4315) - 2155]); pod = system.addShips("escape-capsule", 1, this.ship.position.add(offset.rotateBy(this.ship.orientation)), 0)[0]; pod.orientation = leftOrientation; pod.velocity = leftVelocity; } } } this.shipEnergyBecameFull = function() { this.shipEvacuated = false; } |
Scripts/liners_drone.js | "use strict"; this.name = "liners_drone.js"; this.author = "Thargoid & Eric Walch"; this.copyright = "Creative Commons Attribution - Non-Commercial - Share Alike 3.0 license with clauses - see readme.txt."; this.description = "Pickup of a drone after combat, and check if it's reusable (T). New JS Scanning routine (EW)."; this.version = "1.6.s"; this.findMastersHostiles = function() { function isHostile(entity) { return (entity.isShip && entity.target && (entity.target == this.ship.owner || entity.target == this.ship) && entity.hasHostileTarget); } if(!this.ship.owner) { this.ship.reactToAIMessage("NOTHING_FOUND"); } else { let targets = system.filteredEntities(this, isHostile, this.ship, 25600); if(targets.length > 0) { this.ship.target = targets[0]; this.ship.reactToAIMessage("NEW_DRONE_TARGET"); } else { this.ship.reactToAIMessage("NOTHING_FOUND"); } } } |
Scripts/liners_emerald.js | "use strict"; this.name = "liners_emerald.js"; this.author = "Thargoid"; this.copyright = "Creative Commons: attribution, non-commercial, sharealike with clauses - see readme.txt"; this.description = "Emerald liner script."; this.version = "1.6.2"; (function () { const escortPositions = [ new Vector3D(-2, 0, 2), new Vector3D(-2, 0, -2), new Vector3D( 2, 0, 2), new Vector3D( 2, 0, -2), new Vector3D(2, 0, 0), new Vector3D(-2, 0, 0) ]; const escortPositionCount = escortPositions.length; const escortSpacingFactor = 3; this.coordinatesForEscortPosition = function (index, count) { var highPart = Math.floor(index / escortPositionCount) + 1; var lowPart = index % escortPositionCount; var spacing = this.ship.collisionRadius * escortSpacingFactor * highPart; return escortPositions[lowPart].multiply(spacing); } }).call(this); this.shipSpawned = function() { this.linerGroup = this.ship.group; this.linerGroup.leader = this.ship; this.launchChance = 0; this.counterArray = [0,0,0,0]; this.posArray = []; this.IDArray = [0,0,0,0]; var subCounter = 0 ; // reset the counter for(subCounter = 0;subCounter<this.ship.subEntities.length;subCounter++) { if(this.ship.subEntities[subCounter].hasRole("liners_emeraldShuttle")) { this.posArray.push(this.ship.subEntities[subCounter].position) } } this.nameShip(); if(Math.random() > 0.75) { this.ship.switchAI("liners_emeraldWAI.plist"); } } this.nameShip = function() { this.nameArray = ["XXXX", "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", "XXXX", "Independence", "Leviathan", "Maelstrom", "Meridian", "Michelangelo", "Millenium", "Neptune", "Neptunia", "Oceania", "Oceanic", "Orca", "Republic", "Resolute", "Saturnia", "Soyuz", "Valkerie", "Valhalla", "Star Dancer", "Solaris", "Victory", "Viking", "XXXX", "Vulcan", "Concorde", "Wolf", "Adonis", "Poseidon", "Zeus", "Apollo", "Eagle", "Phoenix", "Adventurer", "Odyssey", "Dolphin", "Allure", "Amadeus", "Adamant", "Spirit", "Aquamarine", "Arcadia", "XXXX", "Calypso", "Conquest", "Freedom", "Imagination", "Inspiration", "Legend", "Liberty", "Constellation", "Infinity", "Heart of Gold", "Solstice", "Mercury", "Jupiter", "Saturn", "Mars", "Crystal", "Symphony", "Melody", "Ambassador", "Rhapsody", "Wonder", "XXXX", "Dream Weaver", "Dreamer", "Elation", "Enchanter", "Enchantment", "Illusion", "Conjurer", "Magii", "Far Star", "XXXX", "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", "XXXX"]; this.nameChoice = Math.floor(Math.random() * this.nameArray.length); this.shipTitle = this.nameArray[this.nameChoice] if(this.shipTitle !== "XXXX") { this.ship.displayName = "ASL " + this.shipTitle; } else { this.titleArray = ["Maid", "Queen", "Empress", "Moons", "Freedom", "Majesty", "Splendour", "Magic", "Memories", "Tales", "Spirit"]; this.titleChoice = Math.floor(Math.random() * this.titleArray.length); this.systemName = System.systemNameForID(Math.floor(Math.random() * 256)); this.ship.displayName = this.titleArray[this.titleChoice] + " of " + this.systemName; this.shipTitle = this.titleArray[this.titleChoice] + " of " + this.systemName; } } this.beginUnload = function() { this.launchChance = 0; this.ship.commsMessage("WARNING - This is the Emerald class liner ASL " + this.shipTitle + ". Please exercise caution around this region as we are beginning our disembarkation process."); } this.endUnload = function() { this.launchChance = 0; this.ship.AIState = "DEPART"; this.ship.commsMessage("This is the ASL " + this.shipTitle + ". Our disembarkation for " + system.name + " is now completed."); } this.beginLaunch = function() { if(Math.random() < this.launchChance) // ending launches and ship out { this.endUnload(); return; } if(Math.random() > 0.5 && this.counterArray[0] === 0) // 50% chance of launching upper port shuttle { this.launchShuttle(0); this.launchChance += 0.01; } if(Math.random() > 0.5 && this.counterArray[1] === 0) // 50% chance of launching upper starboard shuttle { this.launchShuttle(1); this.launchChance += 0.01; } if(Math.random() > 0.5 && this.counterArray[2] === 0) // 50% chance of launching lower port shuttle { this.launchShuttle(2); this.launchChance += 0.01; } if(Math.random() > 0.5 && this.counterArray[3] === 0) // 50% chance of launching lower starboard shuttle { this.launchShuttle(3); this.launchChance += 0.01; } this.launchChance += 0.01; // increment the chance of departure by 1% in any case. } this.launchShuttle = function(subEnt) { switch(subEnt) { case 0: { this.callback = addFrameCallback(this.movePTShuttle.bind(this)); this.IDArray[0] = this.callback; break; } case 1: { this.callback = addFrameCallback(this.moveSTShuttle.bind(this)); this.IDArray[1] = this.callback; break; } case 2: { this.callback = addFrameCallback(this.movePBShuttle.bind(this)); this.IDArray[2] = this.callback; break; } case 3: { this.callback = addFrameCallback(this.moveSBShuttle.bind(this)); this.IDArray[3] = this.callback; break; } } this.callback = 0; } this.movePTShuttle = function(delta) { if(delta === 0) {return;} // so we're not moving things when the game is paused this.moveShuttle(0); } this.moveSTShuttle = function(delta) { if(delta === 0) {return;} // so we're not moving things when the game is paused this.moveShuttle(1); } this.movePBShuttle = function(delta) { if(delta === 0) {return;} // so we're not moving things when the game is paused this.moveShuttle(2); } this.moveSBShuttle = function(delta) { if(delta === 0) {return;} // so we're not moving things when the game is paused this.moveShuttle(3); } this.moveShuttle = function(subEnt) { this.ship.subEntities[subEnt].position = this.ship.subEntities[subEnt].position.add(this.ship.subEntities[subEnt].vectorForward); this.counterArray[subEnt]++; if(this.counterArray[subEnt] > 500) { if(this.IDArray[subEnt] !== 0) { removeFrameCallback(this.IDArray[subEnt]); this.IDArray[subEnt] = 0; this.swapShuttle(subEnt); } this.counterArray[subEnt] = 0; } } this.swapShuttle = function(subEnt) { this.subPosition = this.ship.subEntities[subEnt].position; this.subOrientation = this.ship.subEntities[subEnt].orientation; this.ship.subEntities[subEnt].position = this.posArray[subEnt]; let subShuttle = this.ship.spawnOne("liners_jade"); subShuttle.position = this.localToGlobal(this.subPosition); subShuttle.orientation = this.subOrientation.multiply(this.ship.orientation); subShuttle.velocity = subShuttle.vectorForward; subShuttle.desiredSpeed = subShuttle.maxSpeed; this.linerGroup.addShip(subShuttle); subShuttle.group = this.ship.group; if(Math.random() > 0.33) { subShuttle.target = system.mainStation; subShuttle.switchAI("liners_dockingShuttleAI.plist"); } else { subShuttle.switchAI("liners_landingShuttleAI.plist"); } } this.localToGlobal = function(position) { // sub-ent position is relative to mother, but for swapping we need the absolute global position let orientation = this.ship.orientation; return this.ship.position.add(position.rotateBy(orientation)); } this.playerWillEnterWitchspace = this.shipWillEnterWormhole = this.shipRemoved = this.shipDied = function () { this.stopCallbacks(); } this.stopCallbacks = function() { var IDCounter = 0 ; // reset the counter for(IDCounter = 0;IDCounter<this.IDArray.length;IDCounter++) { if(this.IDArray[IDCounter] !== 0) { removeFrameCallback(this.IDArray[IDCounter]); this.IDArray[IDCounter] = 0; } } } |
Scripts/liners_populator.js | "use strict"; // Standard attributes this.name = "liners_populator_script.js"; this.author = "Thargoid, Smivs"; this.copyright = "Creative Commons: attribution, non-commercial, sharealike."; this.version = "1.6.2"; this.description = "Population script for Liners." this.shipWillExitWitchspace = function() { if(!system.isInterstellarSpace) { this.populator(); } } this.shipWillLaunchFromStation = function(station) { if(worldScripts["bigShips_populator"]) // if bigShips is installed, we don't need this script { delete this.shipWillExitWitchspace; delete this.populator; log("Big Ships is installed, Liners populator removed"); } else { this.populator(); } delete this.shipWillLaunchFromStation; // this is only needed for the first launch } this.populator = function() { if (system.government > 0 && system.techLevel > 9) { system.addShipsToRoute("liners_liner", 1, Math.random(), "wp") } } |
Scripts/liners_tigershark.js | "use strict"; this.name = "liners_tigershark.js"; this.author = "Thargoid"; this.copyright = "Creative Commons: attribution, non-commercial, sharealike."; this.description = "Ship script for Tiger Shark"; this.version = "1.6.2"; this.shipSpawned = function() { this.nameShip(); } this.nameShip = function() { this.shipTitle = expandDescription('[TigersharkName]'); if(Math.random() > 0.25) { this.shipTitle = this.shipTitle + expandDescription('[TigersharkNumber]'); } this.ship.displayName = "TSK " + this.shipTitle; } this.shipEnergyIsLow = function() { if(!this.shipEvacuated) { this.shipEvacuated = true; this.ship.desiredSpeed = 0; var leftPods = Math.ceil(Math.random() * 10) + 5; var rightPods = Math.ceil(Math.random() * 10) + 5; var leftOrientation = this.ship.orientation.multiply([0.7071, 0, 0.7071, 0]); var rightOrientation = this.ship.orientation.multiply([0.7071, 0, -0.7071, 0]); var leftVelocity = this.ship.vectorRight.multiply(-150).add(this.ship.velocity); var rightVelocity = this.ship.vectorRight.multiply(150).add(this.ship.velocity); this.ship.commsMessage("Mayday, mayday! Hull breach imminent, all passengers and non-essential crew to the lifepods!"); var offset, pod, i; for(i=0; i < rightPods; i++) { offset = new Vector3D([350, 0, (Math.random() * 2308) - 1154]); pod = system.addShips("escape-capsule", 1, this.ship.position.add(offset.rotateBy(this.ship.orientation)), 0)[0]; pod.orientation = rightOrientation; pod.velocity = rightVelocity; } for(i=0; i < leftPods; i++) { offset = new Vector3D([-350, 0, (Math.random() * 2308) - 1154]); pod = system.addShips("escape-capsule", 1, this.ship.position.add(offset.rotateBy(this.ship.orientation)), 0)[0]; pod.orientation = leftOrientation; pod.velocity = leftVelocity; } } } this.shipEnergyBecameFull = function() { this.shipEvacuated = false; } |
Scripts/liners_trident.js | "use strict"; this.name = "liners_trident"; this.author = "Thargoid"; this.copyright = "May 2009"; this.description = "Ship script for the trident missile"; this.version = "1.6.2"; this.spawnTines = function() { var loopCounter = 0 ; // reset the counter for(loopCounter = 0; loopCounter < 9; loopCounter++) { var Tine = this.ship.spawnOne("liners_tridentTine"); this.xDistance = ((Math.random() * 40) - 20); this.yDistance = ((Math.random() * 40) - 20); Tine.position = this.ship.position.add([this.xDistance, this.yDistance, 0]); Tine.orientation = this.ship.orientation; if(this.ship.target) { Tine.target = this.ship.target; } } } |