Back to Index Page generated: Nov 12, 2024, 11:02:04 PM

Expansion Tianve Pulsar

Content

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description Adds the famous Tianve Pulsar to the Tianve system Adds the famous Tianve Pulsar to the Tianve system
Identifier oolite.oxp.DrewWagar.TianvePulsar oolite.oxp.DrewWagar.TianvePulsar
Title Tianve Pulsar Tianve Pulsar
Category Ambience Ambience
Author Drew Wagar, phkb Drew Wagar, phkb
Version 2.6 2.6
Tags
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Information URL https://wiki.alioth.net/index.php/Tianve_OXP n/a
Download URL https://wiki.alioth.net/img_auth.php/4/42/Tianve_2.6.oxz n/a
License CC-BY-NC-SA 3.0 CC-BY-NC-SA 3.0
File Size n/a
Upload date 1716769133

Documentation

Also read http://wiki.alioth.net/index.php/Tianve%20Pulsar

readme.txt

Tianve.oxp v2.6
Copyright © 2009 Drew Wagar - http://www.wagar.org.uk
Contributions by Commander McLane and phkb.

This work is licensed under the Creative Commons
Attribution-Noncommercial-Share Alike 3.0 Unported License.

To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco,
California, 94105, USA.

Warning!

Please remove any previous Tianve OXPs (either v1.0, v1.1 or v1.2 - check the readme!) as this OXP will conflict with them! Older versions should now be discarded in favour of this one.

Description

This OXP adds 'flavour' to the Tianve Star System in the top right corner of Chart One. It adds a 'Pulsar' to the system, and a series of liners traveling to the Pulsar from the main station in orbit around Tianve. Other items include an extra station in orbit around the Pulsar, ad-boards throughout and a few other surprises for tourists to the system. There is also an exclusive opportunity to purchase a souvenir for your ship at the Pulsar station, so you can prove you've 'Seen the Pulsar'. You can locate the Pulsar using your 'advanced space compass' by selecting position 'P'.

Save Game

This download includes a save game for Oolite - Commander 'Cheapskate' - well, you should have used your own ship or taken a luxury liner :)
This should be put in your <oolite dir>/oolite.app/oolite-saves directory.
This will provide you with a basic ship to go exploring the Tianve system without needing to travel there, however you won't be able to keep your souvenir unless you use your own vessel.

Notes
<a href="https://www.flaticon.com/free-icons/quasar" title="quasar icons">Quasar icons created by Esteban Mansart - Flaticon</a>

These can be downloaded from the Elite wiki at http://wiki.alioth.net

Bugs and Feedback

2.6 Added PlanetFall 2.0 integration.
2.5 Ensured new planet textures as used in all circumstances.
2.4 Made all spawned items relative to the pulsar location, which is now adjustable via JS.
	Switched the AI for Rebecca to the AI provided by the mod (rather than route1Trader).
	Further tweaks to the Liner AI to not get too close to the pulsar.
	Fixed issues in liner AI that was sending ships to the witchpoint instead of the pulsar.
	Tweaked the position of the billboard and liners at the main station, so they're not almost directly in line with the dock.
	Corrected emission_map key in Liner shipdata.
	Added a unique cargo to New Cargoes that is only purchasable at the Pulsar Station.
	Redid the planet lights to hopefully fix issues on MacOS.
2.3 Corrected planet normal map to reflect light correctly. (Thanks to another_commander)
	Updated pulsar effect data so pulsar is brighter and has a blue color emitter. (Thanks to another_commander)
	Updated diffuse and specular maps for Rebecca's ship.
2.2 Reduced the number of flashers in the pulsar to improve performance.
2.1 Added normal and specular map to planet texture, and added city lights to the diffuse map.
	Fixed liner AI so it circles the pulsar at a safe distance.
	Message when first arriving in system will now come from the witchpoint beacon, rather than being a console message.
	Updated sample savegame to 1.90 format.
2.0 New design for pulsar that looks more like a pulsar.
	Update Rebecca's ship model to KillerWolf's Vampire Mk1.
    Update station model to Octahedron Station from Z-GrOovY.
    Updated equipment logic to no longer need TL99.
	Added a unique planet texture, which will be used if Famous Planets Overhaul isn't installed.
    Changed readme to plain text file.
1.3	Fixed bugs with ship AI preventing correct behaviour around the pulsar
	Fixed bugs causing ships to crash when docking at Pulsar Station
	Removed extraneous ships from planetinfo.plist
	Added Tianve Pulsar specific equipment item, descriptions and availability
	Added player interaction to internal character
	Revised planet descriptions
	Altered in game graphics
1.2	Fixed bug with shipdata.plist where equipment was erroneously selected.
	Fixed bug with chance encounter ship location, which was making it almost impossible to locate.
1.1	Fixed bug with shipdata.plist where equipment wasn't selected as 'true' correctly.

Feedback and bug reports on the forum www.aegidian.org/bb or in person to drew@wagar.org.uk

Equipment

Name Visible Cost [deci-credits] Tech-Level
Tianve Dashboard Sticker yes 200 1+

Ships

Name
Tourist StarLiner - 'Seats Available, Commander!'
Tourist StarLiner - 'Join us next time, Commander!'
mass locker
Tianve Pulsar Monitoring Station
Vampire Mk1.5 : Rebecca Weston
Tianve Billboard
tianve-small-billboard-02
tianve-small-billboard-03
tps_hedronfaceplate
Griff Coriolis test
Griff Coriolis test

Models

This expansion declares no models.

Scripts

Path
Scripts/tianve-condition-script.js
"use strict";
this.name        = "Tianve-Conditions";
this.author      = "phkb";
this.copyright   = "2023 phkb";
this.description = "Condition script for Tianve Pulsar equipment";
this.license     = "CC BY-NC-SA 4.0";

//-------------------------------------------------------------------------------------------------------------
this.allowAwardEquipment = function(equipment, ship, context) {
	if (context == "scripted") return true;
    if (ship.dockedStation.name === "Tianve Pulsar Monitoring Station") return true;
	return false;
}
Scripts/tianve-liner-script.js
"use strict";
/*

tianve-line-script.js

Ship script for Tianve Pulsar Liners.

Oolite - Copyright © 2009 Giles C Williams and contributors

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.


Tianve.oxp - Copyright © 2009 Drew Wagar

This work is licensed under the Creative Commons
Attribution-Noncommercial-Share Alike 3.0 Unported License.

To view a copy of this license, visit
http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter
to Creative Commons, 171 Second Street, Suite 300, San Francisco,
California, 94105, USA.

*/

this.name = "tianve-liner-script";
this.author = "phkb";
this.copyright = "© 2023 phkb";
this.license = "CC-by-nc-sa 3.0";

this.linerAIPulsar = function() {
    var pws = worldScripts["oolite-tianve"];
    this.ship.destination = pws._posVE;
}

this.linerAIPoint1 = function () {
    var pws = worldScripts["oolite-tianve"];
    this.ship.destination = Vector3D(pws._pulsarPosPWM[0], pws._pulsarPosPWM[1], pws._pulsarPosPWM[2] - 160500).fromCoordinateSystem("pwm");
}
this.linerAIPoint2 = function () {
    var pws = worldScripts["oolite-tianve"];
    this.ship.destination = Vector3D(pws._pulsarPosPWM[0] - 159800, pws._pulsarPosPWM[1], pws._pulsarPosPWM[2]).fromCoordinateSystem("pwm");
}
this.linerAIPoint3 = function () {
    var pws = worldScripts["oolite-tianve"];
    this.ship.destination = Vector3D(pws._pulsarPosPWM[0], pws._pulsarPosPWM[1], pws._pulsarPosPWM[2] + 159800).fromCoordinateSystem("pwm");
}
this.linerAIPoint4 = function () {
    var pws = worldScripts["oolite-tianve"];
    this.ship.destination = Vector3D(pws._pulsarPosPWM[0] + 159800, pws._pulsarPosPWM[1], pws._pulsarPosPWM[2]).fromCoordinateSystem("pwm");
}

Scripts/tianve-masslocker.js
"use strict";
this.name = "tianve-masslocker";
this.author = "capt murphy and phkb";
this.copyright = "2011 capt murphy";
this.license = "CC BY-NC-SA 3.0"; // see http://creativecommons.org/licenses/by-nc-sa/3.0/ for more info.
this.description = "Mass Locker script";

this.shipSpawned = function () {
    this.masslocker_controlTimer = new Timer(this, this.masslockerTimer, 0, 1);
}

this.masslockerTimer = function () {
    this.ship.position = player.ship.position.add(player.ship.vectorUp.multiply(300));
}

this.playerWillEnterWitchspace = this.shipRemoved = this.entityDestroyed = function () {
    if (this.masslocker_controlTimer && this.masslocker_controlTimer.isRunning) {
        this.masslocker_controlTimer.stop();
        delete this.masslocker_controlTimer;
    }
}
Scripts/tianve-newcargoes.js
"use strict";
this.author = "cim";
this.copyright = "© 2011-2014 cim.";
this.license = "CC-BY-SA 3.0";
this.name = "CargoTypeExtension-Station-TianvePulsarStation";
this.description = "Tianve Pulsar Station market definition";

this.startUp = function () {
	if (!worldScripts.CargoTypeExtension) {
		for (var prop in this) {
			if (prop !== 'name' && prop !== 'version' && prop !== "oolite_manifest_identifier") {
				delete this[prop];
			}
		}
		return;
	}
	else {
		worldScripts["CargoTypeExtension"].registerOXPStation(this.name, "tianve-pulsar-station");
		this.$registerNewCargoTypes();
	}
}

this.$registerNewCargoTypes = function () {
	var obj = new Object;
	obj.ID = "TP-LW1";
	obj.genericType = "liquor_wines";
	obj.specificType = "Pulsar Padlamanggan";
	obj.buySystems = [[246], [], [], [], [], [], [], []];
	obj.sellSystems = [[], [], [], [], [], [], [], []];
	obj.desc = "Locally distilled under the concentrated light of the pulsar, this exotic liqueur is created in our dedicated distillery from the most exquisitely macerated mangoes from tropical Tianve.";

	worldScripts["CargoTypeExtension"].registerCargoType(obj);
}


/* Station API */


this.randomCargoChance = function (good) {
	var generic = worldScripts["CargoTypeExtension"].cargoDefinition(good, "genericType");
	if (generic == "luxuries") {
		return 0.75;
	}
	return 0;
}

this.randomCargoAmount = function (good) {
	return 3;
}

this.exportCargoAmount = function (good) {
	var generic = worldScripts["CargoTypeExtension"].cargoDefinition(good, "genericType");
	if (good == "CTE_CTS_O4" || good == "CTE_CTS_R1" || good == "CTE_CTA_O1" || good == "CTE_CTS_IS1" || good == "TP-LW1") return 2;
	return 0;
}

this.exportCargoPrice = function (good) {
	return 0.9 + (Math.random() * 0.2);
}

this.randomImportChance = function (good) {
	return 0;
}

this.systemImportChance = function (good) {
	var generic = worldScripts["CargoTypeExtension"].cargoDefinition(good, "genericType");
	if (generic == "food" || generic == "liquor_wines" || generic == "luxuries") {
		return 1;
	} else {
		return 0;
	}
}

this.importCargoPrice = function (good) {
	return 0.9 + (Math.random() * 0.2);
}

// they have police patrol ships, so they probably obey Galcop rules here
this.importPermitCheck = function () {
	return true;
}

this.exportPermitCheck = function () {
	return true;
}

this.stationGossip = function () {
	return false;
}
Scripts/tianve-populator.js
"use strict";
this.name = "oolite-tianve";
this.author = "Drew Wagar and Contributions by Commander McLane and phkb";
this.copyright = "© 2009 Drew Wagar.";
this.description = "Makeover for the Tianve Star System in Chart One";
this.license = "CC-by-nc-sa 3.0";

this._pulsarPosPWM = [-537000, 138000, 1011250];
this._pulsarStnPWM = [];

// todo
// 3. rotate the pulsar?
// 4. add ships to shiplibrary.plist
// 5. new cargoes specialties

this._posVE;
this._posStn;
this._massLocker = null;
this._always = false; // used for debugging only

// OXP link note:
// To relocate the pulsar, change the "this._pulsarPosPWM" values during startUp function
//-------------------------------------------------------------------------------------------------------------
this.startUp = function() {
	if (worldScripts["Famous Planets Overhaul"]) {
		// we want to keep our texture for the planet
		var fpo = worldScripts["Famous Planets Overhaul"];
		var idx = fpo.planetList[0].indexOf(246);
		fpo.planetList.splice(idx, 1);
	}

	var pf = worldScripts.PlanetFall2;
	if (!pf) return;
    pf._locationOverrides["0 246"] = {
        main: [
            {
                roles: ["capitalCity", "capitalCity", "capitalCity", "leisureComplex", "leisureComplex", "factory"],
                names: ["Tianvilus (Capital City)", "Wagarville (City)", "Drewston (City)",  "Pillars of Tiaxus (Xootian Desert)", "Mount Aliothn (Leisure Complex)", "Acid Lake City (Factory)"],
            },
        ],
    };
}

//-------------------------------------------------------------------------------------------------------------
this.startUpComplete = function () {
	var vx = worldScripts.VimanaX_HUD;
	if (vx) {
		// update vimana to use a different model to the original
		vx._gameShips["Tianve Pulsar Monitoring Station"] = "octahedron";
		vx._gameShips["The Pulsar Monitoring Station"] = "octahedron";
		vx._gameShips["Vampire Mk1.5 : Rebecca Weston"] = "vampiremk1";
		vx._gameShips["Tianve Billboard"] = "billboard";
		vx._gameShips["Tourist StarLiner - 'Join us next time, Commander!'"] = "boa_cruiser";
		vx._gameShips["Tourist StarLiner - 'Seats Available, Commander!'"] = "boa_cruiser";
	}

    // make sure our texture wins any races to be the last texture installed
    var info = System.infoForSystem(0, 246);
    info.texture = "tianve_planet.png";
}


//-------------------------------------------------------------------------------------------------------------
this.turnStationToEntity = function (station, entity) {
	var targetVector = entity.position.subtract(station.position).direction();
	station.orientation = targetVector.rotationTo([0, 0, 1]);
}

//-------------------------------------------------------------------------------------------------------------
this.systemWillPopulate = function () {
	this._posVE = null;
	this._posStn = null;

	if (galaxyNumber === 0 && system.ID === 246 || this._always == true) {
		this._pulsarStnPWM.push(this._pulsarPosPWM[0] + 9000);
		this._pulsarStnPWM.push(this._pulsarPosPWM[1] - 500);
		this._pulsarStnPWM.push(this._pulsarPosPWM[2] - 192250);
		this._posStn = Vector3D(this._pulsarStnPWM).fromCoordinateSystem("pwm");
		system.setPopulator("tianve_pulsar_station", {
			callback: function (pos) {
				var pws = worldScripts["oolite-tianve"];
				var pl = Vector3D(pws._pulsarPosPWM).fromCoordinateSystem("pwm");
				pws._posVE = pl;
				var ve = system.addVisualEffect("tianve_pulsar_flashers", pws._posVE);
				ve.orientation = system.mainPlanet.orientation;
				
				var stn = system.addShips("[tianve-pulsar-station]", 1, pos, 0)[0];
				worldScripts["oolite-tianve"].turnStationToEntity(stn, ve);

				// get the main station position as a pwm value
				var msp = Vector3D(system.mainStation.position).toCoordinateSystem("pwm");
				
				// at the main station
				system.addShips("tianve-liner-moving", 1, Vector3D.interpolate(system.mainStation, stn, 0.01));
				system.addShips("tianve-small-billboard-01", 1, Vector3D(msp[0] - 8550, msp[1] - 8500, msp[2] - 3000).fromCoordinateSystem("pwm"));
				system.addShips("tianve-liner-motionless", 1, Vector3D(msp[0] - 7000, msp[1] - 8000, msp[2] - 3000).fromCoordinateSystem("pwm"));

				// At the Witchpoint Marker
				system.addShips("tianve-small-billboard-01", 1, Vector3D(-2500, 2500, 442500).fromCoordinateSystem("pwm"));
				system.addShips("tianve-liner-moving", 1, Vector3D(-3500, 3500, 442500).fromCoordinateSystem("pwm"));

				// Halfway between the Main Station and the Pulsar
				system.addShips("tianve-liner-moving", 1, Vector3D.interpolate(system.mainStation, stn, 0.5));
				system.addShips("tianve-small-billboard-02", 1, Vector3D.interpolate(system.mainStation, stn, 0.5));

				// At the Pulsar
				system.addShips("tianve-liner-moving", 2, pos, 10000);
				system.addShips("tianve-small-billboard-03", 1, Vector3D(pws._pulsarStnPWM[0] + 6500, pws._pulsarStnPWM[1], pws._pulsarStnPWM[2] - 11500).fromCoordinateSystem("pwm"));
				system.addShips("tianve-rebecca", 1, Vector3D(pws._pulsarStnPWM[0], pws._pulsarStnPWM[1] + 10000, pws._pulsarStnPWM[2]).fromCoordinateSystem("pwm"));
			},
			location: "COORDINATES",
			coordinates: this._posStn,
			deterministic: true
		});
	}
}

//-------------------------------------------------------------------------------------------------------------
this.shipLaunchedFromStation = function (launchStation) {
	if (launchStation == system.mainStation && system.ID == 246 && galaxyNumber == 0) {
		launchStation.commsMessage("Don't forget to visit the Pulsar whilst you're here, Commander!", player.ship);
	}
	this.$startTimer();
}

//-------------------------------------------------------------------------------------------------------------
this.shipExitedWitchspace = function () {
	this.$startTimer();
	if (system.ID == 246 && galaxyNumber == 0) {
		var b = system.shipsWithPrimaryRole("buoy-witchpoint")[0];
		if (b) {
			b.commsMessage("Welcome to %H! To visit the Pulsar, select 'P' on your advanced space compass, Commander!", player.ship);
		}
	}
}

//-------------------------------------------------------------------------------------------------------------
this.playerBoughtEquipment = function (equipmentKey) {
	if (equipmentKey === "EQ_TIANVE_STICKER") {
		mission.setInstructionsKey("tianve_sticker");
		player.ship.removeEquipment("EQ_TIANVE_STICKER");
	}
}

//-------------------------------------------------------------------------------------------------------------
this.$startTimer = function() {
	if (this._timer && this._timer.isRunning) this._timer.stop();
	if (this._posVE) {
		this._timer = new Timer(this, this.$checkPosition, 0.5, 0.5);
	}
}

//-------------------------------------------------------------------------------------------------------------
this.$checkPosition = function $checkPosition() {
	if (!this._posVE) {
		this._timer.stop();
		return;
	}
	var p = player.ship;
	var dist = p.position.distanceTo(this._posVE);
	if (dist < 159200) {
		p.temperature += 0.05;
	}
	if (dist < 160000 && !this.masslocker) {
		this.masslocker = system.addShips("tianve-masslocker", 1, player.ship.position.add(player.ship.vectorUp.multiply(300)))[0];
	}
	if (dist >= 160000 && this.masslocker) {
		this.masslocker.remove(true);
		this.masslocker = null;
	}
}
Scripts/tianve-rebecca-script.js
"use strict";
/*

tianve-rebecca-script.js

Ship script for Rebecca Weston.

Oolite - Copyright © 2009 Giles C Williams and contributors

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.


Tianve.oxp - Copyright © 2009 Drew Wagar

This work is licensed under the Creative Commons
Attribution-Noncommercial-Share Alike 3.0 Unported License.

To view a copy of this license, visit
http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter
to Creative Commons, 171 Second Street, Suite 300, San Francisco,
California, 94105, USA.

*/

this.name = "tianve-rebecca-script";
this.author = "Commander McLane";
this.copyright = "© 2009 Drew Wagar";
this.license = "CC-by-nc-sa 3.0";


this.shipSpawned = function () {
	// sets primary role to "hunter", to make it accept distress calls
	this.ship.primaryRole = "hunter";
	/*	
		// establishes the station group of the monitoring station
		var pulsarStationGroup = system.shipsWithRole("tianve-pulsar-station", this.ship)[0].group;
	
		// adds Rebecca to the station group
		pulsarStationGroup.addShip(this.ship);
	
		// and makes her aware of that
		this.ship.group = pulsarStationGroup;
	*/
	// starts a timer that periodically looks for the player
	// the timer looks every ten seconds (second number)
	this.scanForPlayerTimer = new Timer(this, this.scanForPlayer, 0, 10);
}

this.scanForPlayer = function () {
	//  when having the player in scanner range for the first time ...
	if (this.ship.position.distanceTo(player.ship.position) < 25600) {
		this.$updatePAD();
		// ... a message is sent ...
		this.ship.commsMessage("So it's Commander " + expandDescription("[commander_name]") + ", eh? I've heard of you. Just behave yourself around here, or else!");
		// ... and the timer is stopped
		this.scanForPlayerTimer.stop();
	}
}

this.playerWillEnterWitchspace = this.shipDied = function () {
	// if the ship suffers an existence failure, either by dying or by the player leaving the system,
	// the timer is stopped and removed
	this.scanForPlayerTimer.stop();
	delete this.scanForPlayerTimer;
}

this.rebeccaAIPoint1 = function() {
	//-518000 137500 979000
	var pws = worldScripts["oolite-tianve"];
	this.ship.destination = Vector3D(pws._pulsarStnPWM[0] + 10000, pws._pulsarStnPWM[1], pws._pulsarStnPWM[2]).fromCoordinateSystem("pwm");
}
this.rebeccaAIPoint2 = function() {
	//-538000 137500 979000
	var pws = worldScripts["oolite-tianve"];
	this.ship.destination = Vector3D(pws._pulsarStnPWM[0] - 10000, pws._pulsarStnPWM[1], pws._pulsarStnPWM[2]).fromCoordinateSystem("pwm");
}
this.rebeccaAIPoint3 = function() {
	//-528000 147500 979000
	var pws = worldScripts["oolite-tianve"];
	this.ship.destination = Vector3D(pws._pulsarStnPWM[0], pws._pulsarStnPWM[1] + 10000, pws._pulsarStnPWM[2]).fromCoordinateSystem("pwm");
}
this.rebeccaAIPoint4 = function() {
	//-528000 127500 979000
	var pws = worldScripts["oolite-tianve"];
	this.ship.destination = Vector3D(pws._pulsarStnPWM[0], pws._pulsarStnPWM[1] - 10000, pws._pulsarStnPWM[2]).fromCoordinateSystem("pwm");
}
this.rebeccaAIPoint5 = function() {
	//-528000 137500 989000
	var pws = worldScripts["oolite-tianve"];
	this.ship.destination = Vector3D(pws._pulsarStnPWM[0], pws._pulsarStnPWM[1], pws._pulsarStnPWM[2] + 10000).fromCoordinateSystem("pwm");
}
this.rebeccaAIPoint6 = function() {
	//-528000 137500 969000
	var pws = worldScripts["oolite-tianve"];
	this.ship.destination = Vector3D(pws._pulsarStnPWM[0], pws._pulsarStnPWM[1], pws._pulsarStnPWM[2] - 10000).fromCoordinateSystem("pwm");
}

//-------------------------------------------------------------------------------------------------------------
this.$updatePAD = function () {
    // add our dead officer to PAD
    var pad = worldScripts.Lib_PAD;
    pad._addPageInCategory(
        "PERSONS.REBECCA WESTON",
        {
            name: "Rebecca Weston",
            origin: "Tianve",
            species: "Human",
            gender: "Female",
            age: 26,
            ship: "Vampire Mk1.5",
            rank: "",
            t0: 0,
            t1: "rebecca_weston.png",
            t2: 0,
            info: []
        },
        ["PERSONS.GENERIC"],
        false
    );

	var infoLines = expandDescription("[rebecca_weston_info]").split("\n");
	var i = infoLines.length;
	while (i--) {
		worldScripts.Lib_PAD._setPageEntry("PERSONS.REBECCA WESTON.info", infoLines[i]);
	}
}