Back to Index Page generated: Dec 15, 2025, 5:16:51 AM

Expansion GalTech Escort Fighter Fix

Content

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description Update of the GalTech Escort Fighter: Fixes problems and adjusts to later Oolite versions Update of the GalTech Escort Fighter: Fixes problems and adjusts to later Oolite versions
Identifier oolite.oxp.zzz.Montana05.GalTech_escort_fighter_Fix oolite.oxp.zzz.Montana05.GalTech_escort_fighter_Fix
Title GalTech Escort Fighter Fix GalTech Escort Fighter Fix
Category Ships Ships
Author Montana05 Montana05
Version 1.11 1.11
Tags
Required Oolite Version
Maximum Oolite Version
Required Expansions
  • oolite.oxp.Shipbuilder.GalTechEscortFighter:1.0
  • oolite.oxp.zzz.Montana05.resource_pack_01:0.51
  • oolite.oxp.Shipbuilder.GalTechEscortFighter:1.0
  • oolite.oxp.zzz.Montana05.resource_pack_01:0.51
  • Optional Expansions
    Conflict Expansions
    Information URL http://aegidian.org/bb/viewtopic.php?p=272885#p272885 n/a
    Download URL https://wiki.alioth.net/img_auth.php/3/39/Oolite.oxp.zzz.Montana05.GalTech_escort_fighter_Fix.OXZ n/a
    License CC BY-NC-SA 4.0 CC BY-NC-SA 4.0
    File Size n/a
    Upload date 1764467917

    Documentation

    Also read http://wiki.alioth.net/index.php/GalTech%20Escort%20Fighter%20Fix

    read_me.txt

    Overview
    ========
    
    This GalTech Escort Fighter package is fixing some bugs, upgrades to features from later versions of Oolite and, inspired by Shipbuilders original
    message "Whilst you are free (and encouraged) to re-use any of the scripting, models or texturing in this OXP", includes some
    new features, all of them to be removed if Shipbuilder disagrees.
    
    Fixes
    =====
    
    changed "optional_equipment" to correct price calculation in shipyards (shipyard.plist)
    
    added shiplibrary.plist to replace the obsolete demoships.plist
    
    equalized the boosted fore lasers
    
    some small modifications at the model
    
    Upgrades
    ========
    
    changed fore lasers to "multiply" (shipdata.plist)
    
    improved the energy banks to 5 and 6 (police)
    
    merged all ship-scripts into one, this scrip is handling messages, death actions (including escape pods),
    and some new features
    
    included a normal map and modified the diffuse map slightly to work better with the normal map (and to fix some problems)
    
    included "gloss"
    
    New Features
    ============
    
    As mentioned above this are not part of the original OXP and will be removed if Shipbuilder disagrees:
    
    reduced the spin time for hyperspace jumps to 5 (shipdata.plist)
    
    added some groups with the roles pirate-medium-fighter, hunter-medium and police(0.50) (shipdata.plist)
    
    races, ranks and various descriptions for rescued crew members (script)
    
    included "explosive shrapnels", "burning quirium fuel" and "ship debris" to the ship explosions, 
    all part of Montanas Resource Pack 01 OXP (script)
    
    changed the assignment of cargo pods (script)
    
    assigned GalTech escape pods to the ships (slightly redesigned)
     
    Credits
    =======
    
    original work and escape pods: Shipbuilder
    
    Dependencies
    ============
    
    to work correct this pack needs to install Montanas Resource Pack 01 OXP (minimum V 0.51) as well
    
    License
    =======
    
    This work is licensed under Creative Commons Attribution Non-Commercial Share Alike 4.0 International (CC BY-NC-SA 4.0).
    To view a copy of this license visit https://creativecommons.org/licenses/by-nc-sa/4.0
    
    Version History
    ===============
    
    V 1.00:
    basic fix
    
    V 1.10:
    fix with upgrades and new features
    
    

    Equipment

    This expansion declares no equipment.

    Ships

    Name
    GalTech_Escort_Fighter-hunter_team_01
    GalTech_Escort_Fighter-pirate_team_01
    GalTech_Escort_Fighter-police_police_team_01
    GalTech_escort_fighter_escape_capsule
    GalTech_escort_fighter_escape_capsule_pirate
    GalTech_escort_fighter_escape_capsule_police

    Models

    This expansion declares no models.

    Scripts

    Path
    Scripts/GalTech_escort_fighter.js
    this.name			= "GalTech_escort_fighter";
    this.author			= "Montana05";
    this.description	= "event handler for GalTech escort fighter OXP";
    this.version		= "1.10";
    this.copyright		= "2020 Montana05";
    this.licence   		= "CC BY-NC-SA 4.0";
    "use strict";
    
    // new features for Escort Fighter (will be removed if Shipbuilder disagrees):
    
    this.shipSpawned = function(ship)
    {
    	this.$GalTech_shipType = this.ship.dataKey;
    	this.$GalTech_pod = 0;
    	var dice = 0;
    	
    	if(this.ship.hasRole("escape-capsule"))
    	{
    		// neutral inits first
    		var $GalTech_crewName = expandDescription("[nom]");
    		var $GalTech_description = "a crew member of an evacuated ship";
    		var $GalTech_crewRole = "hunter";  // not perfect but somewhere in the middle
    		var $GalTech_crewRace = expandDescription("[GalTech_GalCop_races]");  // added a race to the crew members
    				
    		// now it's time to be more specific, based on an estimated crew of up to 2 person
    		// every individual without insurance or bounty will be defined as a slave
    		switch(this.$GalTech_shipType) 
    		{
    			case "GalTech_escort_fighter_escape_capsule":
    			
    				this.$GalTech_escort_fighter_crew_ranks_Array = 
    				["Gunner", "Pilot", "Commander"];
    				var $GalTech_crewRanks = 
    				$GalTech_escort_fighter_crew_ranks_Array[Math.floor(Math.random() * $GalTech_escort_fighter_crew_ranks_Array.length)];
    			
    				$GalTech_crewName = ("the " + $GalTech_crewRace + " " + $GalTech_crewRanks + " " + expandDescription("[nom]"));
    				$GalTech_description = "a fighter crew member";
    				$GalTech_crewRole = "hunter"; 	
    				break;
    			
    			case "GalTech_escort_fighter_escape_capsule_police":
    				
    				this.$GalTech_escort_fighter_police_ranks_Array = 
    				["Ensign", "Space Junior Lieutenant", "Space Lieutenant", "Lt. Commander"];
    				var $GalTech_policeRank = 
    				$GalTech_escort_fighter_police_ranks_Array[Math.floor(Math.random() * $GalTech_escort_fighter_police_ranks_Array.length)];
    			
    				$GalTech_crewName = ("the " + $GalTech_crewRace + " " + $GalTech_policeRank + " " + expandDescription("[nom]"));
    				$GalTech_description = "a crew member of a space police ship";
    				$GalTech_crewRole = "police"; 		
    				break;
    			
    			case "GalTech_escort_fighter_escape_capsule_pirate":
    				
    				$GalTech_crewName = 
    				("the " + $GalTech_crewRace + " " + expandDescription("[GalTech_pirate_nicknames]") + expandDescription("[nom]"));
    				
    				$GalTech_description = "a criminal wanted by GalCop police";
    				$GalTech_crewRole = "pirate";
    				break;	
    			
    			default: 
    				break;			
    		};
    
    		this.ship.setCrew
    		(
    			{
    				name: $GalTech_crewName,
    				short_description: $GalTech_description,
    				role: $GalTech_crewRole,
    				species: $GalTech_crewRace
    			}
    		);
    	}
    	else
    	{
    		// checks if the ship is equipped with an escape pod, if yes the pod is removed and a flag is set to true
    		if(this.ship.hasEquipmentProviding("EQ_ESCAPE_POD"))
    		{
    			this.ship.removeEquipment("EQ_ESCAPE_POD");
    			this.$GalTech_pod = 1;
    		};
    				
    		var $GalTech_shipRole = this.ship.primaryRole;
    
    		// if the ship got no cargo some containers are added
    		if(this.ship.cargoSpaceUsed === 0)
    		{
    			switch($GalTech_shipRole) 
    			{
    				// group members of a pirate-medium-fighter still have role escort
    				case "pirate":
    				case "pirate-medium-fighter":
    				// individual roles per ship, will only be called from other OXP's	
    				case "GalTech_Escort_Fighter-pirate":
    				case "GalTech_Escort_Fighter-pirate_team_01":	
    					
    					this.ship.setCargoType("ILLEGAL_GOODS");
    					break;
    					
    				case "escort":
    				case "hunter":
    				case "hunter-medium":
    				// individual roles per ship, will only be called from other OXP's
    				case "GalTech_Escort_Fighter-escort":
    				case "GalTech_Escort_Fighter-hunter":	
    				case "GalTech_Escort_Fighter-hunter_team_01":		
    									
    					dice = this.$getRndInteger(1, 2);
    						
    					// added some diversity
    					if(dice === 1)
    						this.ship.setCargoType("SCARCE_GOODS");
    
    					if(dice === 2)
    						this.ship.setCargoType("PLENTIFUL_GOODS");
    					break;
    					
    				// police most likely will have weapons, not goods
    				case "police":
    				case "wingman":
    				// individual role of the ship, will only be called from other OXP's	
    				case "GalTech_Escort_Fighter-police":	
    									
    					dice = this.$getRndInteger(1, 2);
    					this.ship.adjustCargo("firearms", dice);
    					break;
    
    				default: 
    					break;
    			};
    		};
    	};
    };
    
    this.shipDied = function(whom, why)
    {
    	if(this.ship.hasRole("escape-capsule"))
    	{
    		return;
    	}
    	else
    	{
    		// neutral inits first
    		var $GalTech_podType = "escape-capsule";
    		var debrisCount = 1;  // for pods
    		var $GalTech_cargoLoad = this.ship.cargoSpaceUsed;
    				
    		// time to eject the escape pods
    		if(this.ship.bounty > 7)
    		{
    			this.ship.commsMessage(expandDescription("[GALTECH_ESCORT_FIGHTER_PIRATE_ROLE_KILLED_MESSAGE]"), player.ship);
    			$GalTech_podType = "GalTech_escort_fighter_escape_capsule_pirate";
    		}
    		else
    		{
    			switch(this.$GalTech_shipType) 
    			{
    				case "GalTech_Escort_Fighter-escort":
    
    					this.ship.commsMessage(expandDescription("[GALTECH_ESCORT_FIGHTER_ESCORT_ROLE_KILLED_MESSAGE]"), player.ship);
    					$GalTech_podType = "GalTech_escort_fighter_escape_capsule";
    					break;
    
    				case "GalTech_Escort_Fighter-hunter":
    				case "GalTech_Escort_Fighter-hunter_team_01":	
    
    					this.ship.commsMessage(expandDescription("[GALTECH_ESCORT_FIGHTER_HUNTER_ROLE_KILLED_MESSAGE]"), player.ship);
    					$GalTech_podType = "GalTech_escort_fighter_escape_capsule";
    					break;
    
    				case "GalTech_Escort_Fighter-police":
    				
    					this.ship.commsMessage(expandDescription("[GALTECH_ESCORT_FIGHTER_POLICE_ROLE_KILLED_MESSAGE]"), player.ship);
    					$GalTech_podType = "GalTech_escort_fighter_escape_capsule_police";	
    					break;	
    				
    				// for pirates with small bounty, unlikely but better make sure
    				case "GalTech_Escort_Fighter-pirate":
    				case "GalTech_Escort_Fighter-pirate_team_01":	
    		
    					this.ship.commsMessage(expandDescription("[GALTECH_ESCORT_FIGHTER_PIRATE_ROLE_KILLED_MESSAGE]"), player.ship);
    					$GalTech_podType = "GalTech_escort_fighter_escape_capsule_pirate";
    					break;
    
    				default: 
    					break;	
    			};	
    		};
    						
    		// if the flag for pods is true the correct capsule is spawned
    		if(this.$GalTech_pod == 1)
    		{
    			debrisCount = this.$getRndInteger(1, 2);
    			system.addShips($GalTech_podType, debrisCount, this.ship.position);
    		};
    
    		debrisCount = this.$getRndInteger(4, 6);
    		// added explosive shrapnels similar to Constitution Class Heavy Cruiser
    		system.addShips("GalTech_effects_explosive_shrapnel", debrisCount, this.ship.position);
    		// added various depris as a new feature
    		system.addShips("GalTech_ship_debris", debrisCount, this.ship.position);
    
    		// added burning fuel as a new feature
    		debrisCount = (this.ship.fuel.toFixed(0)) * 2;	
    		system.addShips("GalTech_effects_burningFuel", debrisCount, this.ship.position);
    
    		// added some cargopods as a new feature
    		if($GalTech_cargoLoad > 0)
    		{
    			var cargoIndex = this.ship.cargoList;
    			var cargoTotal = 0;
    			
    			// calculate all containers from ship.cargoList
    			for (var i = cargoIndex.length - 1 ; i >= 0 ; --i)
    			{
    				cargoTotal = cargoTotal + this.ship.cargoList[i].quantity;
    			};
    
    			// shouldn't happen but better save than sorry
    			if(cargoTotal > $GalTech_cargoLoad)
    				$GalTech_cargoLoad = cargoTotal;
    			
    			// time to eject cargopods
    			for(var i = cargoIndex.length - 1 ; i >= 0 ; --i)
    			{
    				var cargoType = this.ship.cargoList[i].commodity;
    				var cargoPod = ("GalTech_container_" + cargoType);
    				var cargoCount = this.ship.cargoList[i].quantity;
    												
    				// Warning: additional commodities from an OXP are not covered and therefore will not be ejected 
    				// exceptions: witchfire_whiskey, holy_artifacts, quirium_crystal
    				while(cargoCount > 0)
    				{
    					this.ship.ejectSpecificItem(cargoPod);
    					cargoCount = cargoCount - 1;
    				};
    			};
    		};
    	};
    };	
    
    this.$getRndInteger = function(min, max)
    {
    	return Math.floor(Math.random() * (max - min + 1) ) + min;
    };