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

Expansion The Classic Mussurana

Content

Warnings

  1. Unknown key 'upload_date' at https://wiki.alioth.net/img_auth.php/7/70/ClassicMussurana_v1.3.oxz!manifest.plist

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description A modern update of Aegidian's classic Mussurana. This beautiful ship is a luxury executive express, but is also favoured by successful bounty-hunters and is perfect for small traders with a few Credits in the bank. A modern update of Aegidian's classic Mussurana. This beautiful ship is a luxury executive express, but is also favoured by successful bounty-hunters and is perfect for small traders with a few Credits in the bank.
Identifier oolite.oxp.smivs.ClassicMussurana oolite.oxp.smivs.ClassicMussurana
Title The Classic Mussurana The Classic Mussurana
Category Ships Ships
Author Smivs Smivs
Version 1.3 1.3
Tags
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Information URL http://wiki.alioth.net/index.php/Mussurana n/a
Download URL https://wiki.alioth.net/img_auth.php/7/70/ClassicMussurana_v1.3.oxz http://wiki.alioth.net/index.php/File:ClassicMussurana.oxz
License CC-BY-NC-SA 4.0 CC-BY-NC-SA 4.0
File Size n/a
Upload date 1610873334

Documentation

Also read http://wiki.alioth.net/index.php/The%20Classic%20Mussurana

readMe.txt

The Classic Mussurana

This expansion adds a modern update of Aegidian's classic Mussurana. This beautiful ship is a luxury executive express, but is also favoured by successful bounty-hunters and is perfect for small traders with a few Credits in the bank.
The graphics have been brought up to date and some of the coding (eg ship roles) has been brought in line with Oolite v1.80 and above. Aegidian's  original model was found to have a few minor problems, but has now been optimised, and new gun and engine sub-entities have been added. The texture designs are firmly based on the originals and the specifications have remained unchanged from the old OXP versions.

This expansion forms part of The Classic Ships suite of OXPs, but is fully self-contained and can be installed by anyone - there are no dependancies on or requirement for any other 'Classic Ship' expansions to be installed.

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 Mussurana expansion was developed by Smivs. The main model, ship design and specifications are based on the original OXPs by Giles Williams (Aegidian). The model repair, sub-entities and texture are by Smivs.

v.1.3  
Update to correct role weight code in shipdata.

Equipment

This expansion declares no equipment. This may be related to warnings.

Ships

Name
classicShipsEngine1
classicShipsGun
classic_mussurana_hunter
classic_mussurana_pirate
classic_mussurana_player
Mussurana
classic_mussurana_trader

Models

This expansion declares no models. This may be related to warnings.

Scripts

Path
Scripts/classicMussuranaScript.js
"use strict"; 

// Standard attributes 
this.name           = "classicMussuranaScript.js"; 
this.author         = "Smivs"; 
this.copyright	    = "© Smivs"; 
this.licence        = "Creative Commons Attribution-Noncommercial-Share Alike 4.0 Unported License"; 
this.version        = "1.3"; 
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;
         }
      }
}