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

Expansion The Classic Ships (Addition)

Content

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description Modern re-imaginings of the classic Elite-style ships. Modern re-imaginings of the classic Elite-style ships.
Identifier oolite.oxp.smivs.ClassicShips(Addition) oolite.oxp.smivs.ClassicShips(Addition)
Title The Classic Ships (Addition) The Classic Ships (Addition)
Category Retextures Retextures
Author Smivs Smivs
Version 1.4 1.4
Tags
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Information URL http://wiki.alioth.net/index.php/The_Classic_Ships n/a
Download URL https://wiki.alioth.net/img_auth.php/5/5b/ClassicShips%28Addition%29_v1.4.oxz n/a
License CC-BY-NC-SA 4.0 CC-BY-NC-SA 4.0
File Size n/a
Upload date 1610873306

Documentation

Also read http://wiki.alioth.net/index.php/The%20Classic%20Ships%20(Addition)

readme.txt

The Classic Ships (Addition) OXZ

Overview:-

This expansion adds modern re-imaginings of the original Elite-style ships to appear alongside the default ship set or other OXP ship sets.
The original models have been used with engine and gun models added. The texture designs are based on the oiginal set, and six new designs have been added so that each ship now has its own unique texture.
Full details can be found on the wiki page at 
http://wiki.alioth.net/index.php/The%20Classic%20Ships

Licence:-

This work is Licenced under the Creative Commons Attribution-Noncommercial-Share Alike 4.0 Unported Licence. 
To view a copy of this Licence, send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Author and credits:-

The Classic Ships expansion was developed by Smivs.

Thanks must first go to Giles Williams without whom none of this would have been possible. A very big Thank You also to all the community members who helped during the development phase with encouragement, comments, observations and suggestions. Particular thanks to Disembodied and Rorschachhamster for decals used on some of the ships, and Capt, Murphy for scripting inspiration. 

Equipment

This expansion declares no equipment.

Ships

Name
classicShipsEngine1
classicShipsEngine2
classicShipsEngine3
classicShipsEngine4a
classicShipsEngine4b
classicShipsGun
classic_adder
classic_adder-player
classic_anaconda
classic_anaconda-pirate
classic_anaconda-player
classic_asp
classic_asp-cloaked
classic_asp-player
classic_boa
classic_boa-mk2
classic_boa-mk2-pirate
classic_boa-mk2-player
classic_boa-pirate
classic_boa-player
classic_cobra3-alternate
classic_cobra3-pirate
classic_cobra3-player
classic_cobra3-trader
classic_cobramk1
classic_cobramk1-alt
classic_cobramk1-miner
classic_cobramk1-player
classic_constrictor
classic_ferdelance
classic_ferdelance-player
classic_gecko
classic_krait
classic_mamba
classic_mamba-escort
classic_moray
classic_moray-player
classic_morayMED
classic_morayMED-player
classic_python
classic_python-blackdog
classic_python-player
classic_python-trader
classic_shuttle
classic_sidewinder
classic_sidewinder-escort
classic_tharglet
classic_thargoid
classic_transporter
classic_transporter-miner
classic_viper
classic_viper-interceptor
classic_viper-pursuit
classic_worm
classic_worm-miner

Models

This expansion declares no models.

Scripts

Path
Scripts/classicShipsScript.js
"use strict"; 

// Standard attributes 
this.name           = "classicShipsScript.js"; 
this.author         = "Smivs"; 
this.copyright	    = "© Smivs"; 
this.licence        = "Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License"; 
this.version        = "1.2"; 
this.description    = "Script to render ship derelict upon ejection of pilot." 


this.shipLaunchedEscapePod = function()
{
  this.switchFlashersAITimer = new Timer(this, this.$switchFlashersOff,8); // timer to switch off flashers after 8 seconds
  this.switchHullTexTimer = new Timer(this, this.$switchHullTex,12); // timer to switch off hull lights emission map after 12 seconds
  this.rotateDerelictTimer = new Timer(this, this.$rotateDerelict,25); // timer to start derelict rotation after 25 seconds
  this.switchEngineTexTimer = new Timer(this, this.$switchEngineTex,35); // timer to switch engines textures to derelict version after 35 seconds
}
this.$switchFlashersOff = function()
{
  this.ship.lightsActive = false; // turns flashers off
}
this.$switchHullTex = function()
{
  var $classicShipsTexture = this.ship.scriptInfo.classicShipsTexture; // uses scriptInfo key to build ship's default texture name
  var $classicShipsDiffuse = this.ship.scriptInfo.classicShipsDiffuse; // uses scriptInfo key to build ship's diffuse_map name
  var $classicShipsLighting = this.ship.scriptInfo.classicShipsLighting; // uses scriptInfo key to build ship's emission_map name
  var $classicShipsDerelict = this.ship.scriptInfo.classicShipsDerelict; // uses scriptInfo key to build derelict emission_map name
  var $classicShipsNormal = this.ship.scriptInfo.classicShipsNormal; // uses scriptInfo key to build ship's normal_map name
  var $classicShipsSpecular = this.ship.scriptInfo.classicShipsSpecular; // uses scriptInfo key to build ship's specular_map name
  var material = new Object(); // declare variable
  material[$classicShipsTexture] = {diffuse_map:$classicShipsDiffuse, emission_map:$classicShipsDerelict, normal_map:$classicShipsNormal, specular_map:$classicShipsSpecular}; // set up material entry
  this.ship.setMaterials(material); // apply material
}
this.$rotateDerelict = function()
{
  this.rotateVector = Vector3D.randomDirection(); // creates a random axis of rotation.
  this.rotateSpeedFactor = (Math.random() * (0.05) + 0.05); // creates a random rotate speed factor between 0.05 and 0.1 - 0.1 will result in a rotation speed of approx 1 full rotation every 63 seconds, 0.05 in a rotation speed of approx 1 full rotation every 126 seconds.
  this.rotateDerelictCallBack = addFrameCallback(this.rotateFunction.bind(this)); // create FrameCallback
}
this.rotateFunction = function(delta) // delta is the time in game seconds since the last frame.
{
  if (!this.ship.isValid){removeFrameCallback(this.rotateDerelictCallback);delete this.rotateDerelictCallback;return;} // end FrameCallback is ship has died;
  if (delta === 0){return;} // do nothing if game is paused;
  var newOrientation = this.ship.orientation.rotate(this.rotateVector,delta*this.rotateSpeedFactor); // calculates new orientation, using delta as a factor so that rotation speed is constant across varying frame rates. delta*this.rotateSpeedFactor is a value in radians. There are approx 6.3 radians in a full rotation.
  this.ship.orientation = newOrientation; // applies new orientation;
}
this.$switchEngineTex = function()
{
  var $onTexture; // declare variable
  var $offTexture; //declare variable
  var material = new Object(); // declare variable
  var subents = this.ship.subEntities; // create array of subents
  var counter = 0; // set up loop to check if subent is an engine and if so change texture to derelict version
  var subentsLength = subents.length;
  for (counter = 0; counter < subentsLength;counter++)
    {
      if (subents[counter].scriptInfo.engineOnTexture)
	{
	  $onTexture = subents[counter].scriptInfo.engineOnTexture; // uses scriptInfo key to build engine texture name
	  $offTexture = subents[counter].scriptInfo.engineOffTexture; // uses scriptInfo key to build derelict engine texture name
	  material[$onTexture] = {emission_map:$offTexture}; // set up material entry
	  subents[counter].setMaterials(material); // sets material
	}
    }
}
this.entityDestroyed = function()
// stop timers
{
  if(this.switchFlashersAITimer)
    {
      if (this.switchFlashersAITimer.isRunning) 
        {
          this.switchFlashersAITimer.stop();
          delete this.switchFlashersAITimer;
        }
     }
  if(this.switchHullTexTimer)
     {
       if (this.switchHullTexTimer.isRunning) 
         {
           this.switchHullTexTimer.stop();
           delete this.switchHullTexTimer;
         }
     }
  if(this.rotateDerelictTimer)
     {
       if (this.rotateDerelictTimer.isRunning) 
         {
           this.rotateDerelictTimer.stop();
           delete this.rotateDerelictTimer;
         }
      }
  if(this.switchEngineTexTimer)
     {
       if (this.switchEngineTexTimer.isRunning) 
         {
           this.switchEngineTexTimer.stop();
           delete this.switchEngineTexTimer;
         }
      }
}

Scripts/classicThargoid_warship_script.js
"use strict";

// Standard attributes 
this.name           = "classicThargoid_warship_script.js"; 
this.author         = "Smivs"; 
this.copyright	    = "© Smivs"; 
this.licence        = "Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License";
this.version        = "1.2";  
this.description    = "Script to control color change of Thargoid warships and generate curses upon death." 

this.shipSpawned = function()
{
 this.$classicThargoidWarshipColorChange ()
}
// first phase
this.$classicThargoidWarshipColorChange = function()
// timer to switch diffuse and emission maps after 1 second
{
  this.$thargoidColorTimer1 = new Timer(this, this.thargoidColorTimer1,0.5); 
}
this.thargoidColorTimer1 = function()
// Set materials to first phase
{
   this.ship.setMaterials({"classicThargoid_diffuse1.png": { diffuse_map: "classicThargoid_diffuse1.png", emission_map: "classicThargoid_lighting1.png", normal_map: "classicThargoid_normal.png" }});
// Switch to second phase
   this.$classicThargoidWarshipColorChange2 ();
}
// second phase
this.$classicThargoidWarshipColorChange2 = function()
{
// timer to switch diffuse and emission maps back after 1 second
  this.$thargoidColorTimer2 = new Timer(this, this.thargoidColorTimer2,0.5); 
}
this.thargoidColorTimer2 = function()
// Set materials to second phase
{
   this.ship.setMaterials({"classicThargoid_diffuse1.png": { diffuse_map: "classicThargoid_diffuse2.png",  emission_map: "classicThargoid_lighting2.png", normal_map: "classicThargoid_normal.png" }});
// Switch back to first phase
   this.$classicThargoidWarshipColorChange ();
}
this.shipDied = function ()
// from core oolite warship script, to generate curses
{
  this.ship.commsMessage(expandDescription("[thargoid_curses]"));
}
this.entityDestroyed = function()
// stop timers
{
  if(this.thargoidColorTimer1)
    {
      if (this.thargoidColorTimer1.isRunning) 
        {
          this.thargoidColorTimer1.stop();
          delete this.thargoidColorTimer1;
        }
     }
  if(this.thargoidColorTimer2)
     {
       if (this.thargoidColorTimer2.isRunning) 
         {
           this.thargoidColorTimer2.stop();
           delete this.thargoidColorTimer2;
         }
     }
}