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

Expansion Outrider

Content

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description A relatively well-fitted freighter escort, capable of offering serious resistance to the modern generation of fast attack ships. For more details, please check the wiki page. A relatively well-fitted freighter escort, capable of offering serious resistance to the modern generation of fast attack ships. For more details, please check the wiki page.
Identifier oolite.oxp.zzz.Montana05_Taranis_outrider oolite.oxp.zzz.Montana05_Taranis_outrider
Title Outrider Outrider
Category Ships Ships
Author Roberto, Montana05 Roberto, Montana05
Version 2.00 2.00
Tags
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Information URL http://wiki.alioth.net/index.php/Outrider_(Oolite) n/a
Download URL https://wiki.alioth.net/img_auth.php/6/64/Oolite.oxp.zzz.Montana05_Taranis_outrider.OXZ n/a
License CC BY-NC-SA 4.0 CC BY-NC-SA 4.0
File Size n/a
Upload date 1656994380

Documentation

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

original_read_me.txt

Outrider
========

2006, by Robert Todd (Roberto on Oolite Forums)
2021, brought back to life by Montana05


Overview
========

The Outrider is the first ship to be produced by Taranis Corp, a company co-founded by a former chief designer at Faulcon deLacy 
and headquartered in the Lerelace system (28 light years from Lave). The vessel was conceived as a relatively well-specced 
freighter escort, capable of offering serious resistance to the modern generation of fast attack ships, yet affordable enough 
for the mass market. Taranis originally aimed to sell the ship for 100,000 credits, modifications to improve the hull rigidity 
resulted in a final price tag of 110K.

Initially, sales of the Outrider were modest at best; however, since its prominent appearance in the hit film The Riedquat Connection, 
it has become much more popular with shipping firms, bounty hunters of limited means and - reinforcing its "dangerous" image - pirates.


Notable features
================

The Outrider is available in two models - red and green - which are functionally identical. 
It matches the Sidewinder for speed but not maneuverability. It is relatively big for a vessel of its type, 
and despite its size, offers little room for cargo, on the other hand, it is on a par with the much larger Cobra Mk III 
in terms of resilience. The ship is fitted with a pulse laser as standard.


Notes
=====

This is my first OXP, so let me know if I've made any horrible gaffes! Hopefully not.


Credits
=======

My thanks to Murgh, Selezen, Giles, Draco_Caeles and others for their advice, and to Daniel Walker for his texturing guide!


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.12 / 2021/05/23 / Montana05 

improved textures and adjusted roles

V 1.11 / 2021/05/22 / Montana05

added manifest.plist
uploaded the package to the Expansions Manager

V 1.10 / 2006/08/14 / Roberto

modified custom views 
added "laser darkness" to the textures 
included the defense ship for the Taranis OXP

V 1.00 / 2006/06/20 / Roberto

initial release

read_me.txt

Overview
========

A relatively well-fitted freighter escort, capable of offering serious resistance to the modern generation 
of fast attack ships, yet affordable enough for the mass market.

The Outrider matches the Sidewinder for speed but not maneuverability. It is relatively big for a vessel of its type, 
and despite its size, offers little room for cargo. On the other hand, it is on a par with the much larger Cobra Mark III 
in terms of resilience. 

The ship is fitted with a pulse laser as standard.

History
=======

The Outrider is the first ship to be produced by Taranis Corporation, a company co-founded by a former chief designer 
at Faulcon deLacy and headquartered in the Lerelace system (28 light years from Lave). 

Taranis originally aimed to sell the ship for 100,000 Credits, but modifications to improve the hull rigidity 
resulted in a final price tag of 110K.

Initially, sales of the Outrider were modest at best. However, since its prominent appearance in the hit film 
"The Riedquat Connection", it has become much more popular with shipping firms, bounty hunters of limited means 
and - reinforcing its "dangerous" image - pirates.

Using the new popularity and some incoming profits, the Outrider Mark II was designed. While the hull and
most specifications remained nearly the same, the ship did offer more cargo space, 4 mounts instead of 2 and 
an additional military shield enhancement. Soon, Commanders and companies started to replace their Outrider Mark I
with the latest version. Even the Space Security Group and the Bounty Hunter Guild began to place orders.

After the Galactic Navy picked the Navy Frigate as one of their capital ships, the navy variant Outrider Mark II-N 
was introduced. Originally intended to replace the Navy Viper the ship was used as a cheap alternative to the 
Viper Patrol by GalCop police instead. Currently, this fighter is only sold to GalCop institutions and trusted navies and 
organizations. However, there are rumors that, once in a while, a "vanished" ship could be found on the gray market.

Remarks
=======

The Outrider Mark I is a slightly tweaked version of Roberto's original OXP, all other ships were added with V 2.00.

This OXP includes an overwrite of the Taranis.OXP. While Roberto designed defense fighters, the station actually
never used them. The AI is also corrected.

The Outrider Mark II-N could only be bought in systems with a government of 2 (multi-government) or lower and 
only on stations not regulated by GalCop law (station allegiance different to GalCop). Remember, the purchase
of this ship is still restricted.

Credits
=======

Roberto aka Robert Todd (author, model, basic textures and specifications)
Griff (model and basic textures of the escape capsules)
another_commander (basic specular map of the escape capsules)

My thanks to Murgh, Selezen, Giles, Draco_Caeles and others for their advice, and to Daniel Walker for his texturing guide !

Requirements
============

Oolite V 1.88 or higher.

Details
=======

For additional details, please check the wiki-page: https://wiki.alioth.net/index.php/Outrider_(Oolite)

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 2.00 / 2022/07/05 / Montana05 

    converted and overhauled the entire package
    improved the materials and added more textures
    various implementations to adjust to the current standards

V 1.12 / 2021/05/23 / Montana05 

    improved textures and adjusted roles

V 1.11 / 2021/05/22 / Montana05

    added manifest.plist
    uploaded the package to the Expansions Manager

V 1.10 / 2006/08/14 / Roberto

    modified custom views 
    added "laser darkness" to the textures 
    included the defense ship for the Taranis OXP

V 1.00 / 2006/06/20 / Roberto

    initial release

Equipment

This expansion declares no equipment.

Ships

Name
Taranis_outrider_bhg_team_01
escape capsule
escape capsule
escape capsule
escape capsule
escape capsule
escape capsule
escape capsule
escape capsule
escape capsule
escape capsule
Outrider Mark I
Outrider Mark II
Deputy BHG Outrider Mark II-N
Outrider Mark II-N
Outrider Mark II-N
GalCop Outrider Mark II-N
BHG Outrider Mark II
Outrider Mark II
Outrider Mark II
Outrider Mark II
Outrider Mark II
SSG Outrider Mark II
Outrider Mark I
Outrider Mark I
Outrider Mark I
Outrider Mark I
Taranis_outrider_ssg_team_01
Outrider Mark I
Outrider Mark I

Models

This expansion declares no models.

Scripts

Path
Scripts/Taranis_outrider.js
this.name			= "Taranis_outrider";
this.author			= "Montana05";
this.description	= "event handler for the Taranis Outrider OXP";
this.version		= "2.00";
this.copyright		= "2022 Montana05";
this.licence   		= "CC BY-NC-SA 4.0";
"use strict";

this.shipSpawned = function(ship)
{
	if(ship.dataKey.search(/Taranis_outrider/i) < 0 || ship.isPlayer)
	{
		return;
	}
	else
	{
		var shipType = ship.dataKey;
		var shipRole = ship.primaryRole;
		
		// setup escape pods
		if(ship.hasRole("escape-capsule"))
		{
			let crewName = expandDescription("[nom]");
			let crewDescription = "a crew member of an evacuated ship";
			let crewRole = "hunter";  // the role is not particular important anymore, all data will be added by the script
			let crewRace = expandDescription("[Taranis_outrider_races_scientific]");  // adds a race to the crew members
			let crewRank = expandDescription("[Taranis_outrider_crew_civil_small]");
			let bhgRank = "Hunter";  // middle rank
			let crewInsurance = this.$getRndInteger(90, 450);
			let crewBounty = 0;
						
			// ranks for Bounty Hunter Guild taken from Random Hits OXP, all credits to LittleBear
			const Taranis_outrider_bhg_ranks_array = 
			["Outsider", "Recruit", "Vigilante", "Bailiff", "Deputy", "Tracker", "Hunter", "Sheriff", "Provost", "Marshal", "Enforcer", "Executioner", "Judge"];
			bhgRank = 
			Taranis_outrider_bhg_ranks_array[Math.floor(Math.random() * Taranis_outrider_bhg_ranks_array.length)];
			
			switch(shipType) 
			{
				case "Taranis_outrider_escape_capsule_std":

					crewName = ("the " + crewRace + " " + crewRank + " " + expandDescription("[nom]"));
					crewDescription = "a ship crew member";
					crewRole = "hunter";
					crewInsurance = this.$getRndInteger(90, 450);
					break;

				case "Taranis_outrider_escape_capsule_std_criminal":

					crewName = ("the " + crewRace + " " + expandDescription("[nom]"));
					crewDescription = "a " + expandDescription("[Taranis_outrider_criminals]") +  "wanted by GalCop police";
					crewRole = "pirate";
					crewBounty = crewInsurance + (15 * system.government);  // stable governments pay extra bonus
					crewInsurance = 0;
					break;

				case "Taranis_outrider_escape_capsule_std_pirate":

					crewName = ("the " + crewRace + " " + expandDescription("[Taranis_outrider_pirate_nicknames]") + expandDescription("[nom]"));
					crewDescription = "a " + expandDescription("[Taranis_outrider_criminals]") +  "wanted by GalCop police";
					crewRole = "pirate";
					crewBounty = (crewInsurance * 1.25) + (25 * system.government);  // stable governments pay extra bonus
					crewInsurance = 0;
					break;
					
				case "Taranis_outrider_escape_capsule_taranis_corp":

					crewName = ("the " + crewRace + " " + crewRank + " " + expandDescription("[nom]"));
					crewDescription = "an employee of Taranis Corporation";
					crewRole = "hunter";
					crewInsurance = (crewInsurance * 1.15);  // Taranis Corporation got better insurance conditions
					break;
					
				case "Taranis_outrider_escape_capsule_taranis_corp_criminal":

					crewName = ("the " + crewRace + " " + crewRank + " " + expandDescription("[nom]"));
					crewDescription = "a rogue employee of Taranis Corporation";
					crewRole = "pirate";
					crewBounty = (crewInsurance * 1.15) + (15 * system.government);  // stable governments pay extra bonus
					crewInsurance = 0;
					break;
	
				case "Taranis_outrider_escape_capsule_ssg":

					crewName = ("the " + crewRace + " " + crewRank + " " + expandDescription("[nom]"));
					crewDescription = "a SSG ship crew member";
					crewRole = "hunter";
					crewInsurance = (crewInsurance * 1.25);  // SSG got better insurance conditions
					break;
					
				case "Taranis_outrider_escape_capsule_ssg_criminal":

					crewName = ("the " + crewRace + " " + crewRank + " " + expandDescription("[nom]"));
					crewDescription = "a rogue SSG ship crew member";
					crewRole = "pirate";
					crewBounty = (crewInsurance * 1.25) + (15 * system.government);  // stable governments pay extra bonus
					crewInsurance = 0;
					break;

				case "Taranis_outrider_escape_capsule_bhg":

					crewName = ("the " + crewRace + " " + bhgRank + " " + expandDescription("[nom]"));
					crewDescription = "a member of the Bounty Hunter Guild";
					crewRole = "hunter";
					crewInsurance = (crewInsurance * 1.10);  // BHG got better insurance conditions
					break;
					
				case "Taranis_outrider_escape_capsule_bhg_criminal":

					crewName = ("the " + crewRace + " " + bhgRank + " " + expandDescription("[nom]"));
					crewDescription = "a rogue member of the Bounty Hunter Guild";
					crewRole = "pirate";
					crewBounty = (crewInsurance * 1.10) + (15 * system.government);  // stable governments pay extra bonus
					crewInsurance = 0;
					break;

				case "Taranis_outrider_escape_capsule_police":

					const Taranis_outrider_police_ranks_array = 
					["Ensign", "Space Junior Lieutenant", "Space Lieutenant", "Lt. Commander"];  // a crew of 1 to 2 person
					crewRank = 
					Taranis_outrider_police_ranks_array[Math.floor(Math.random() * Taranis_outrider_police_ranks_array.length)];

					crewName = ("the " + crewRace + " " + crewRank + " " + expandDescription("[nom]"));
					crewDescription = "an officer of GalCop Space Police";
					crewRole = "police";
					crewInsurance = (this.$getRndInteger(90, 450) + (15 * system.government));  // stable governments pay additional reward
					break;
					
				default: 
	
					break;	
			};

			ship.setCrew
			(
				{
					name: crewName,
					short_description: crewDescription,
					role: crewRole,
					species: crewRace,
					insurance: crewInsurance,
					bounty: crewBounty
				}
			);

			// removes individual roles
			ship.primaryRole = "escape-capsule";
		}
		else
		{
			let cargoSpace = ship.cargoSpaceCapacity;
			let cargoLoad = ship.cargoSpaceUsed;
			let cargoLeft = cargoSpace - cargoLoad;
			
			switch(shipRole) 
			{
				case "escort":
				case "escort-medium":
				case "Taranis_outrider_mark_I":
				case "Taranis_outrider_mark_II":
				case "Taranis_outrider_mark_II_ssg":
				
					if(shipRole.search(/Taranis_outrider/i) >= 0)
					{
						ship.primaryRole = "escort";
					};
				
					if(cargoLeft > 0)
					{
						for(var i = this.$getRndInteger(1, cargoLeft) - 1 ; i >= 0 ; --i)
						{
							ship.adjustCargo(this.$Taranis_outrider_space_jockey_cargo(), 1);
						};
					};
					break;

				case "taranis_defender":
				case "defense_ship":
				case "Taranis_outrider_mark_I_defender":
				case "Taranis_outrider_mark_II_defender":
				case "Taranis_outrider_mark_IIN_defender":
					
					if(shipRole.search(/Taranis_outrider/i) >= 0)
					{
						ship.primaryRole = "escort-medium";
						ship.switchAI("oolite-escortAI.js");
					};
				
					if(cargoLeft > 0)
					{
						for(var i = this.$getRndInteger(1, cargoLeft) - 1 ; i >= 0 ; --i)
						{
							ship.adjustCargo("firearms", 1);
						};
					};
					break;	

				case "hunter":
				case "hunter-medium":
				case "Taranis_outrider_mark_I_hunter":
				case "Taranis_outrider_mark_II_hunter":
				case "Taranis_outrider_mark_II_bhg":	
				case "Taranis_outrider_ssg_team_01":
				case "Taranis_outrider_bhg_team_01":

					if(shipRole.search(/Taranis_outrider/i) >= 0)
					{
						ship.primaryRole = "hunter";
					};

					if(cargoLeft > 0)
					{
						for(var i = this.$getRndInteger(1, cargoLeft) - 1 ; i >= 0 ; --i)
						{
							ship.adjustCargo(this.$Taranis_outrider_space_jockey_cargo(), 1);
						};
					};
					break;
				
				case "wingman":
				case "police":	
				case "Taranis_outrider_mark_IIN_bhg_deputy":
				case "Taranis_outrider_mark_IIN_police":	

					if(shipRole != "wingman")
					{
						ship.primaryRole = "police";
					};
					
					if(cargoLeft > 0)
					{
						for(var i = this.$getRndInteger(1, cargoLeft) - 1 ; i >= 0 ; --i)
						{
							ship.adjustCargo("firearms", 1);
						};
					};
					break;
								
				case "pirate":
				case "pirate-light-fighter":
				case "Taranis_outrider_mark_I_pirate":
				case "Taranis_outrider_mark_II_pirate":

					
					if(shipRole.search(/Taranis_outrider/i) >= 0)
					{
						ship.primaryRole = "pirate";
					};
					
					while(ship.cargoSpaceUsed == 0)  // makes sure that there is some cargo
					{
						if(this.$getRndInteger(1, 6) < 4)
						{
							ship.setCargoType("ILLEGAL_GOODS");
						}
						else
						{
							ship.setCargoType("PIRATE_GOODS");
						};
					};	
					break;
					
				default: 
	
					break;
			};
		};
		
		// if there is an existing script in shipDied time to move it
		ship.script.$Taranis_outrider_shipDied_old = ship.script.shipDied;
		ship.script.shipDied = this.$Taranis_outrider_shipDied;	
	};
};	

this.$Taranis_outrider_shipDied = function $Taranis_outrider_shipDied(whom, why) 
{
	if(this.ship.dataKey.search(/Taranis_outrider/i) < 0 || this.ship.hasRole("escape-capsule") || this.ship.isPlayer)
	{
		return;
	}
	else
	{
		this.name = "Taranis_outrider";
		
		let shipType = this.ship.dataKey;
		let shipBounty = this.ship.bounty;
		let shipPos = this.ship.position;
		let MRP01 = 0;
		let criminalCrew = 0;
		let pirateCrew = 0;

		if(worldScripts["MRP01_ressource_spawn"])  // Montanas Ressource Pack 01 OXP
		{
			MRP01 = 1;
		};
		
		if(shipBounty > 7 && shipBounty < 15)
		{
			criminalCrew = 1;
		};

		if(shipBounty > 14 || this.ship.isPirate)
		{
			pirateCrew = 1;
		};

		// if Montanas Ressource Pack 01 OXP is installed the containers from there are used, otherwise let the core-game handle it
		if(MRP01 == 1 && this.ship.cargoSpaceUsed > 0)
		{
			for(let i = this.ship.cargoList.length - 1 ; i >= 0 ; --i)
			{
				let cargoType = this.ship.cargoList[i].commodity;
				let cargoPod = ("MRP01_container_" + cargoType);
				let cargoCount = this.ship.cargoList[i].quantity;
				
				system.addShips(cargoPod, cargoCount, shipPos);
			};
		};

		switch(shipType) 
		{
			case "Taranis_outrider_mark_I_defender":
			case "Taranis_outrider_mark_II_defender":	
			case "Taranis_outrider_mark_IIN_defender":

				if(criminalCrew == 1 || pirateCrew == 1)
				{
					system.addShips("Taranis_outrider_escape_capsule_taranis_corp_criminal", 1, shipPos);
				}
				else
				{
					system.addShips("Taranis_outrider_escape_capsule_taranis_corp", 1, shipPos);
				};
				break;
			
			case "Taranis_outrider_mark_II_ssg":
			case "Taranis_outrider_ssg_team_01":

				if(criminalCrew == 1 || pirateCrew == 1)
				{
					system.addShips("Taranis_outrider_escape_capsule_ssg_criminal", 1, shipPos);
				}
				else
				{
					system.addShips("Taranis_outrider_escape_capsule_ssg", 1, shipPos);
				};
				break;

			case "Taranis_outrider_mark_II_bhg":
			case "Taranis_outrider_mark_IIN_bhg_deputy":
			case "Taranis_outrider_bhg_team_01":
				
				if(criminalCrew == 1 || pirateCrew == 1)
				{
					system.addShips("Taranis_outrider_escape_capsule_bhg_criminal", 1, shipPos);
				}
				else
				{
					system.addShips("Taranis_outrider_escape_capsule_bhg", 1, shipPos);
				};
				break;
			
			case "Taranis_outrider_mark_IIN_police":
			
				system.addShips("Taranis_outrider_escape_capsule_police", 1, shipPos);
				break;
				
			case "Taranis_outrider_mark_I_pirate":
			case "Taranis_outrider_mark_II_pirate":
								
				system.addShips("Taranis_outrider_escape_capsule_std_pirate", 1, shipPos);
				break;
				
			// escort, hunter
			default:
				
				if(criminalCrew == 1)
				{
					system.addShips("Taranis_outrider_escape_capsule_std_criminal", 1, shipPos);
				}
				else if(pirateCrew == 1)
				{
					system.addShips("Taranis_outrider_escape_capsule_std_pirate", 1, shipPos);
				}
				else
				{
					system.addShips("Taranis_outrider_escape_capsule_std", 1, shipPos);
				};
				break;	
		};
	};

	if(this.ship.script.$Taranis_outrider_shipDied_old)
	{
		this.ship.script.$Taranis_outrider_shipDied_old(whom, why);
	};
};

// food, medicine, booze and guns, what else you need for your trip ? :P
this.$Taranis_outrider_space_jockey_cargo = function()
{
	const space_jockey_cargo_array = ["firearms", "food", "liquor_wines"];

	 // Darkside Moonshine Distillery OXP
	if(worldScripts["witchfire-populator"] && space_jockey_cargo_array.indexOf("witchfire_whiskey") < 0)
	{
		space_jockey_cargo_array.push("witchfire_whiskey");
	};
	
	// medicine is part of several OXP's therefore a check of the market is required
	if(system.mainStation)
	{
		let goods = system.mainStation.market;
		for(let i in goods) 
		{
			if(goods[i].key == ["medicine"] && space_jockey_cargo_array.indexOf("medicine") < 0)
			{
				space_jockey_cargo_array.push("medicine");
			};
		};
	}; 

	let space_jockey_cargo = 
	space_jockey_cargo_array[Math.floor(Math.random() * space_jockey_cargo_array.length)];

	return (space_jockey_cargo);
};

this.$getRndInteger = function(min, max)
{
	return (Math.floor(Math.random() * (max - min + 1) ) + min);
};
Scripts/Taranis_outrider_police_conditions.js
this.name			= "Taranis_outrider_police_conditions";
this.author			= "Montana05";
this.description	= "condition script for the GalCop Outrider ships";
this.version		= "2.00";
this.copyright		= "2022 Montana05";
this.licence		= "CC BY-NC-SA 4.0";
"use strict";

this.allowSpawnShip = function(shipKey) 
{
	var systemGov = system.government;
	
	if(system.isInterstellarSpace || system.sun.isGoingNova || system.sun.hasGoneNova)
	{
		return false;
	};

	// Dictators OXP and Commies OXP got their own police force
	if((systemGov == 3 && worldScripts["dictators.js"]) || (systemGov == 4 && worldScripts["communist_population"]))
	{
		return false;
	};
	
	switch(shipKey) 
	{
		case "Taranis_outrider_mark_IIN_bhg_deputy":
					
			// GalCop deputies in unstable and dangerous systems
			if(systemGov < 3)
			{
				return true;
			};
			break;

		// GalCop space police in systems with a stable government, minimum techLevel required for maintenance
		case "Taranis_outrider_mark_IIN_police":
			
			if(systemGov >= 3 && system.techLevel > 6)
			{
				return true;
			};
			break;
			
		default:
			break;	
	};
	// otherwise prohibited
	return false;
};
Scripts/Taranis_outrider_yard_conditions.js
this.name			= "Taranis_outrider_yard_conditions";
this.author			= "Montana05";
this.description	= "conditions for the purchase of an Outrider Mark II-N";
this.version		= "2.00";
this.copyright		= "2022 Montana05";
this.licence   		= "CC BY-NC-SA 4.0";
"use strict";

this.allowOfferShip = function(shipKey)
{
	// in unstable and dangerous systems on stations outside GalCop jurisdiction
	if(system.government < 3 && player.ship.dockedStation.allegiance != "galcop")
	{
		return true;
	};
	
	// otherwise prohibited
	return false;
};