Back to Index Page generated: May 8, 2024, 6:16:03 AM

Expansion Communications Pack A

Content

Warnings

  1. Information URL mismatch between OXP Manifest and Expansion Manager string length at character position 0

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description Adds lots of extra NPC communications to the game, increasing the variety of existing messages and also adding several new ones. Adds lots of extra NPC communications to the game, increasing the variety of existing messages and also adding several new ones.
Identifier oolite.oxp.cim.comms-pack-a oolite.oxp.cim.comms-pack-a
Title Communications Pack A Communications Pack A
Category Ambience Ambience
Author cim cim
Version 0.5 0.5
Tags
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Information URL n/a
Download URL https://cim.sotl.org.uk/games/files/oolite/Comms_Pack_A_0.5.oxz n/a
License MIT MIT
File Size n/a
Upload date 1404062251

Documentation

Also read http://wiki.alioth.net/index.php/Communications%20Pack%20A

Equipment

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

Ships

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

Models

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

Scripts

Path
Scripts/comms-pack-a.js
this.author      = "cim"; 
this.copyright   = "� 2011-2014 cim."; 
this.licence = "CC-BY-SA 3.0";
this.version     = "0.5"; 
"use strict";

/* World script name. For a new comms pack, change this to a unique name */
this.name = "Comms Pack A";

/* The generic prefix used for this OXP's comms entries in
 * descriptions.plist */
this.$commsPrefix = "commsPackA";

/* This function runs at game startup to set up the comms */
this.startUp = function()
{
	/* ensure the priority AI library is started */
	if (worldScripts["oolite-libPriorityAI"].startUp)
	{
		worldScripts["oolite-libPriorityAI"].startUp();
	}

	/* This object defines the communications to be set up. It has
	 * several layers: the first layer is the communications role for
	 * the ships; the second layer is the personality of the pilot;
	 * the third layer is the communications key, and the value is a
	 * key in descriptions.plist which is expanded to give the
	 * communications text. 
	 *
	 * See notes in descriptions.plist for more
	 * information. Using descriptions.plist rather than just putting
	 * literal text strings in makes it much easier to reuse
	 * components between roles and personalities.
	 *
	 * The roles have standard names defined by the core Oolite AIs
	 * (and potentially by OXP AIs, but we're not adding any new comms
	 * for those here).
	 *
	 * The personalities we can name what we like, so they should have
	 * an OXP-specific prefix, in this case "commsPackA". When a ship
	 * is added it gets a personality picked randomly from those
	 * available for its role - several comms packs could be defining
	 * different personalities.
	 *
	 * The communications keys again have standard names from Oolite
	 * core - again, custom OXP AIs might define some more, but we
	 * aren't adding new comms to those here.
	 *
	 * Oolite defines "oolite_surrender" and "oolite_thanksForHelp" as
	 * generic communications, so these need redefining for every
	 * role, even those which don't have messages.
	 */
	var comms = {
		/* role: bounty hunters */
		hunter: {
			/* The _makeComms function saves a bit of typing on
			 * defining key/value entries like
			 * "oolite_killedTarget": "[commsPackA_vigilante_killedTarget]",	
			 */
			/* Comms keys/values - see
			 * http://wiki.alioth.net/index.php/Oolite_PriorityAI_Documentation#Usage
			 * for a list of available keys. */

			/* personality: motivated by stopping criminals for 'justice' */
			commsPackA_vigilante: this._makeComms("vigilante",
				  [
					  "attackLowEnergy",
					  "beginningAttack",
					  "beginningAttackThargoid",
					  "beginningFight",
					  "continuingAttack",
					  "continuingAttackThargoid",
					  "distressResponseAggressor",
					  "distressResponseSender",
					  "engageWitchspaceDriveFlee",
					  "engageWitchspaceDriveGroup",
					  "friendlyFire",
					  "groupIsOutnumbered",
					  "incomingMissile",
					  "killedTarget",
					  "quiriumCascade",
					  "selectedStation",
					  "startFleeing",
					  "surrender",
					  "thanksForHelp",
					  "thargoidAttack",
					  "waypointReached"
				  ]),

			/* personality: motivated by being given money.
			 *
			 * Mostly defines the same keys as the vigilante above,
			 * with a few differences */
			commsPackA_mercenary: this._makeComms("mercenary",
				  [
					  "attackLowEnergy",
					  "beginningAttack",
					  "beginningAttackThargoid",
					  "beginningFight",
					  "continuingAttack",
					  "continuingAttackThargoid",
					  "distressResponseAggressor",
					  "distressResponseSender",
					  "engageWitchspaceDriveFlee",
					  "engageWitchspaceDriveGroup",
					  "firedMissile",
					  "friendlyFire",
					  "groupIsOutnumbered",
					  "incomingMissile",
					  "killedTarget",
					  "quiriumCascade",
					  "selectedStation",
					  "surrender",
					  "thanksForHelp",
					  "thargoidAttack",
					  "waypointReached"
				  ])
		},
		/* Traders of various sorts. No specific entries for
		 * trader-courier, trader-smuggler, trader-opportunist yet.
		 * Oolite defines "agreeingToDumpCargo" and "makeDistressCall",
		 * so all trader entries should include them to avoid the
		 * generic fallbacks. */
		trader: {
			/* personality: out to get the best profit from the trip */
			commsPackA_capitalist: this._makeComms("capitalist",
				  [
					  "agreeingToDumpCargo",
					  "attackLowEnergy",
					  "beginningAttack",
					  "beginningAttackThargoid",
					  "continueFleeing",
					  "continuingAttack",
					  "dockingWait",
					  "eject",
					  "engageWitchspaceDriveGroup",
					  "escortAccepted",
					  "friendlyFire",
					  "makeDistressCall",
					  "quiriumCascade",
					  "startFleeing",
					  "surrender",
					  "thanksForHelp",
					  "thargoidAttack"
				  ]),

			/* personality: hoping this time will be the big one */
			commsPackA_optimist: this._makeComms("optimist",
				 [
					 "agreeingToDumpCargo",
					 "attackLowEnergy",
					 "dockingWait",
					 "eject",
					 "engageWitchspaceDriveGroup",
					 "escortAccepted",
					 "friendlyFire",
					 "incomingMissile",
					 "makeDistressCall",
					 "quiriumCascade",
					 "selectedStation",
					 "selectedWitchspaceDestination",
					 "startFleeing",
					 "surrender",
					 "thanksForHelp",
					 "thargoidAttack"
				 ])
		},
		// pirates and associates
		/* Oolite defines 'oolite_makePirateDemand' for pirates */
		pirate: {
			/* Looter: out to make a profit from "free" cargo */
			commsPackA_looter: this._makeComms("looter",
			   [
				   "attackLowEnergy",
				   "beginningAttack",
				   "beginningAttackThargoid",
				   "continuingAttack",
				   "eject",
				   "engageWitchspaceDriveFlee",
				   "firedMissile",
				   "friendlyFire",
				   "groupIsOutnumbered",
				   "hitTarget",
				   "killedTarget",
				   "killedUncrewedTarget",
				   "landingOnPlanet",
				   "makePirateDemand",
				   "quiriumCascade",
				   "scoopedCargo",
				   "selectedWitchspaceDestination",
				   "surrender",
				   "thanksForHelp"
			   ]),
			/* Rebel: fighting against an oppressive state */
			commsPackA_rebel: this._makeComms("rebel",
			   [
				   "attackLowEnergy",
				   "beginningAttack",
				   "beginningAttackThargoid",
				   "continuingAttack",
				   "continuingAttackThargoid",
				   "eject",
				   "engageWitchspaceDriveFlee",
				   "engageWitchspaceDriveGroup",
				   "friendlyFire",
				   "groupIsOutnumbered",
				   "hitTarget",
				   "incomingMissile",
				   "killedTarget",
				   "killedUncrewedTarget",
				   "makePirateDemand",
				   "quiriumCascade",
				   "scoopedCargo",
				   "startFleeing",
				   "startHelping",
				   "surrender",
				   "thargoidAttack",
				   "thanksForHelp"
			   ])
		},
		// assassins
		assassin: {
			/* Enforcer: working to protect a criminal organisation */
			commsPackA_enforcer: this._makeComms("enforcer",
			 [
				 "attackLowEnergy",
				 "beginningAssassination",
				 "beginningAttack",
				 "beginningAttackInanimate",
				 "continuingAttack",
				 "firedMissile",
				 "hitTarget",
				 "killedTarget",
				 "killedUncrewedTarget",
				 "quiriumCascade",
				 "startFleeing",
				 "surrender",
				 "thargoidAttack",
				 "thanksForHelp",
				 "waypointReached"
			 ]),
			/* Freelancer: takes on contracts for the money, from
			 * various sources */
			commsPackA_freelancer: this._makeComms("freelancer",
			 [
				 "attackLowEnergy",
				 "beginningAssassination",
				 "beginningAttack",
				 "beginningAttackInanimate",
				 "continuingAttack",
				 "firedMissile",
				 "hitTarget",
				 "killedTarget",
				 "killedUncrewedTarget",
				 "quiriumCascade",
				 "startFleeing",
				 "surrender",
				 "thargoidAttack",
				 "thanksForHelp",
				 "waypointReached"
			 ])
		},
		// police ships
		police: {
			/* Formal by-the-book police */
			commsPackA_academy: this._makeComms("academy",
				[
					"beginningAttack",
					"beginningAttackThargoid",
					"distressResponseAggressor",
					"distressResponseSender",
					"eject",
					"firedMissile",
					"friendlyFire",
					"killedTarget",
					"markForFines",
					"offenceDetected",
					"patrolReportIn",
					"startHelping",
					"surrender",
					"thanksForHelp",
					"thargoidAttack"
				]),
			/* Aggressive police looking for a fight */
			commsPackA_vicious: this._makeComms("vicious",
				[
					"beginningAttack",
					"beginningAttackThargoid",
					"continuingAttack",
					"continuingAttackThargoid",
					"distressResponseAggressor",
					"distressResponseSender",
					"dockingWait",
					"eject",
					"firedMissile",
					"friendlyFire",
					"hitTarget",
					"killedTarget",
					"markForFines",
					"offenceDetected",
					"quiriumCascade",
					"surrender",
					"thanksForHelp",
					"thargoidAttack"
				])
		},
		// escorts
		escort: {
			/* Paramilitary-style escorts: hired from
			 * professional(ish) organisations. */
			commsPackA_paramilitary: this._makeComms("paramilitary",
				[
					"attackLowEnergy",
					"beginningAttack",
					"beginningAttackThargoid",
					"continuingAttack",
					"continuingAttackThargoid",
					"eject",
					"escortFormation",
					"escortMotherAccepted",
					"friendlyFire",
					"groupIsOutnumbered",
					"incomingMissile",
					"killedTarget",
					"quiriumCascade",
					"startHelping",
					"surrender",
					"thanksForHelp"
				]),
			/* Friendly escorts: probably know the crew of the ship
			 * they're escorting personally. */
			commsPackA_friendly: this._makeComms("friendly",
				[
					"attackLowEnergy",
					"beginningAttack",
					"beginningAttackThargoid",
					"continuingAttack",
					"continuingAttackThargoid",
					"eject",
					"escortFormation",
					"escortMotherAccepted",
					"friendlyFire",
					"groupIsOutnumbered",
					"incomingMissile",
					"killedTarget",
					"quiriumCascade",
					"startHelping",
					"surrender",
					"thanksForHelp"
				])

		},
		// station<->surface shuttles
		shuttle: {
			commsPackA_cargoshuttle: this._makeComms("cargoshuttle",
				[
					"dockingWait",
					"eject",
					"incomingMissile",
					"landingOnPlanet",
					"makeDistressCall",
					"quiriumCascade",
					"selectedStation",
					"surrender",
					"thanksForHelp"
				]),
			commsPackA_touristshuttle: this._makeComms("touristshuttle",
				[
					"dockingWait",
					"eject",
					"incomingMissile",
					"landingOnPlanet",
					"makeDistressCall",
					"quiriumCascade",
					"selectedStation",
					"surrender",
					"thanksForHelp"
				])
		},
		// stations and rock hermits
		station: {
			commsPackA_mainstation: this._makeComms("mainstation",
				[												
					"friendlyFire",
					"killedAlly",
					"killedNonTarget",
					"killedTarget",
					"launchDefenseShips",
					"launchPatrol",
					"offenceDetected",
					"quiriumCascade"
				])
		},
		hermit: {
			commsPackA_rockhermit: this._makeComms("rockhermit",
				[												
					"attackLowEnergy",
					"friendlyFire",
					"killedAlly",
					"launchMiner",
					"quiriumCascade"
				])
		},
		// scavengers and miners
		scavenger: {
			commsPackA_loner: this._makeComms("loner",
				[
					"beginningAttack",
					"surrender",
					"thanksForHelp"
				]),
			commsPackA_cheerful: this._makeComms("cheerful",
				[
					"attackLowEnergy",
					"eject",
					"incomingMissile",
					"mining",
					"scoopedCargo",
					"surrender",
					"thanksForHelp"
				])
		},
		// station defence ships
		defenseShip: {
			commsPackA_defenseship: this._makeComms("defenseship",
				[
					"attackLowEnergy",
					"beginningAttack",
					"beginningAttackThargoid",
					"eject",
					"friendlyFire",
					"incomingMissile",
					"killedTarget",
					"quiriumCascade",
					"surrender",
					"thanksForHelp"
				])
		} 
	};

	/* This loads the communications settings into the library */
	worldScripts["oolite-libPriorityAI"]._setCommunications(comms);
}


/* This function makes a set of descriptions.plist entries, to save a
 * little typing. 'specific' is the personality we're writing for, and
 * 'entries' is an array of the communications keys (which assumes an
 * oolite_ prefix on all of them. */
this._makeComms = function(specific, entries)
{
	var result = {};
	for (var i=entries.length-1;i>=0;i--)
	{
		var entry = entries[i];
		result["oolite_"+entry] = "["+this.$commsPrefix+"_"+specific+"_"+entry+"]";
	}
	return result;
}