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

Expansion Riredi

Content

Warnings

  1. Required Expansions mismatch between OXP Manifest and Expansion Manager at character position 0071 (DIGIT ZERO vs LATIN SMALL LETTER N)
  2. No version in dependency reference to oolite.oxp.phkb.MarketScriptInterface:null

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description Adds some eye candy and background story to the ooniverse, a customized Riredi system. Adds some eye candy and background story to the ooniverse, a customized Riredi system.
Identifier oolite.oxp.captain_beatnik.Riredi oolite.oxp.captain_beatnik.Riredi
Title Riredi Riredi
Category Ambience Ambience
Author Captain Beatnik and phkb Captain Beatnik and phkb
Version 2.1 2.1
Tags
Required Oolite Version
Maximum Oolite Version
Required Expansions
  • oolite.oxp.phkb.MarketScriptInterface:0
  • oolite.oxp.phkb.MarketScriptInterface:
  • Optional Expansions
    Conflict Expansions
    Information URL https://wiki.alioth.net/index.php/Riredi_OXP n/a
    Download URL https://wiki.alioth.net/img_auth.php/0/03/Riredi_2.1.oxz n/a
    License CC-BY-NC-SA 3.0 CC-BY-NC-SA 3.0
    File Size n/a
    Upload date 1709981418

    Documentation

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

    riredi_readme.txt

    ============================
    Riredi-v1.0.0-2014-01-12.oxp
    ============================
    
    
    VERSION:
    	2.0
    
    
    DATE:
    	2024-02-07
    
    
    REQUIRES:
    	Oolite Version 1.91.x
    
    
    FEATURES:
    	This .oxp adds some eye candy to the ooniverse, a customized Riredi-system.
    
    	Riredi is very fabled for the Rirediian mountain slug. These gigantic creatures 
    	are isles of flourishing life on the barren planet and each of them forms 
    	a complete ecosystem. Dealing with radioactives is strictly prohibited on 
    	this world because radiation is harmful to the slugs. 
    	
    	Riredi is home of Coluber Inc. and Riredisec Ltd. 
    
    	Enjoy!	
    
    
    CONTENTS:
    	license.txt
    	riredi_readme.txt
    	requires.plist
    	
    	<Config>
    		commodities.plist		
    		demoships.plist
    		descriptions.plist
    		planetinfo.plist
    		shipdata-overrides.plist
    		shipdata.plist
    		shipyard-overrides.plist
    		
    	<Models>
    		cb68_pitviper-coluberguard.dat
    		cb68_pitviper2-coluberguard.dat
    		cb68_sodalite_station-dock-riredi-coluber.dat
    		cb68_sodalite_station-riredi-coluber.dat
    				
    	<Textures>
    		cb68_pitviper-coluberguard_em_map.png
    		cb68_pitviper-coluberguard.png
    		cb68_pitviper2_coluberguard_em_map.png
    		cb68_pitviper2_coluberguard_normal.png
    		cb68_pitviper2_coluberguard_specular.png
    		cb68_pitviper2_coluberguard.png
    		cb68_riredi.png
    		cb68_sodalite_station-dock-bgs_tunnel-riredi-coluber.png
    		cb68_sodalite_station-dock-riredi-coluber_em_map.png
    		cb68_sodalite_station-dock-riredi-coluber.png
    		cb68_sodalite_station-riredi-coluber_em_map.png
    		cb68_sodalite_station-riredi-coluber_nm_map.png
    		cb68_sodalite_station-riredi-coluber_sp_map.png
    		cb68_sodalite_station-riredi-coluber.png
    		riredi_diffuse.png
    		riredi_normal.png
    		
    KNOWN ISSUES:
    	None.
    
    
    DEPENDENCIES:
    	None.
    
    
    AUTHOR:
    	Robert Triflinger (Captain Beatnik)
    	Contact: captain.beatnik@gmx.de  
    
    
    ATTRIBUTION:
    	This work is derived from the original configuration files and artwork that come with the Oolite� program
    	package.
    
    	Thanks a lot to Giles C Williams (aegidian) and all contributors for developing Oolite.
    
    
    LICENSE:
    	All artwork, scripts and configuration files in this work are licensed 
    	under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) 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.
    	
    	You are free:
    
        	* to Share - to copy, distribute and transmit the work
       	* to Remix - to adapt the work
     
    	Under the following conditions:
    
        	* Attribution - You must attribute the work in the manner specified by the author or licensor 
    	  (but not in any way that suggests that they endorse you or your use of the work).
    	* Noncommercial - You may not use this work for commercial purposes.
        	* Share Alike - If you alter, transform, or build upon this work, you may distribute the resulting work 
    	  only under the same or similar license to this one.
    
    	With the understanding that:
    
        	* Waiver - Any of the above conditions can be waived if you get permission from the copyright holder.
        	* Public Domain - Where the work or any of its elements is in the public domain under applicable law, 
    	  that status is in no way affected by the license.
        	* Other Rights - In no way are any of the following rights affected by the license:
              - Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations;
              - The author's moral rights;
              - Rights other persons may have either in the work itself or in how the work is used, such as publicity 
    	    or privacy rights.
        	* Notice - For any reuse or distribution, you must make clear to others the license terms of this work. 
              The best way to do this is with a link to this web page: http://creativecommons.org/licenses/by-nc-sa/3.0/
    
    	(This is a human-readable summary of the Legal Code (the full license).)
    
    VERSION HISTORY:
    =======================
    	Version 2.1 
    		* made radioactives illegal in Riredi
    		* added a custom diffuse map for nav buoys in Riredi
    
    	Version 2.0 (by phkb)
    		* updated textures on station, included normal and specular maps.
    		* updated planet textures, added lights, normal and specular maps.
    		* switched from the Pitviper Mark I to the Pitviper Mark II for the Coluber Guard.
    		* used updated textures for Pitviper Mark II.
    		* made the Coluber Guard police ships the default ones for the Riredi system.
    		* removed unused ballturret entry from shipdata.plist.
    		* ensured the main station is selling predominately Coluber ships (if there are Coluber ship mods installed).
    		* added a New Cargoes commodity (Rirediian Mountain Slug Emollient)
    
    	Version 1.0.0 
    		*First release of this .OXP
    ========================
    *** end of file ***

    Equipment

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

    Ships

    Name
    Pitviper Coluberguard
    Pitviper MkII Coluberguard
    cb68_pitviper2-coluberguard-int
    cb68_pitviper2-police
    Docking Slit (Octagon)
    Sodalite Station Coluber Inc.

    Models

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

    Scripts

    Path
    Scripts/coluberguard_conditions.js
    "use strict";
    this.name = "coluberguard_conditions";
    this.author = "phkb";
    this.copyright = "2024 phkb";
    this.license = "CC BY-NC-SA 4.0";
    
    //----------------------------------------------------------------------------------------
    this.allowSpawnShip = function(shipKey) {
        // only in Riredi
        if (galaxyNumber == 0 && system.ID == 210) return true;
        return false;
    }
    
    Scripts/riredi_market.js
    "use strict";
    this.name = "riredi_market";
    this.author = "phkb";
    this.copyright = "2024";
    this.license = "CC BY-NC-SA 4.0";
    
    /*
    	We're making radioactives illegal to import in Riredi, as well as reducing the price (they want to get rid of them)
    	and reducing the number for sale (so there's not *too* much money for nothing)
    */
    //-------------------------------------------------------------------------------------------------------------
    this.$updateLocalCommodityDefinition = function (goodDefinition, station, systemID) {
    	if (goodDefinition.key == "radioactives") {
    		if ((station === 0 || station == null) && (galaxyNumber == 0 && systemID && systemID == 210)) {
    			goodDefinition.legality_import = 1;
    			goodDefinition.price *= 0.75;
    			goodDefinition.quantity *= 0.5;
    		}
    	}
    	return goodDefinition;
    }
    
    //-------------------------------------------------------------------------------------------------------------
    this.startUp = function () {
    	var msi = worldScripts.MarketScriptInterface_Main;
    	msi.$addMarketInterface("system_local", "$updateLocalCommodityDefinition", this.name, "highest");
    }
    Scripts/riredi_navbuoy.js
    "use strict";
    this.name = "riredi_navbuoy";
    this.author = "phkb";
    this.copyright = "2024";
    this.license = "CC BY-NC-SA 4.0";
    
    this._key = "oolite";
    this._diffuse = "cb68_navbuoy.png";
    this._emission = "cb68_navbuoy_illumination.png";
    this._normal = "oolite_buoy_normal.png";
    this._specular = "oolite_buoy_specular.png";
    
    //-------------------------------------------------------------------------------------------------------------
    this.startUp = function() {
        // check if the DHI Nav Buoy is installed
        if (Ship.shipDataForKey("DHI_Nav_Buoy")) {
            this._normal = "DHI_Nav_Buoy_Normal.png";
            this._specular = "DHI_Nav_Buoy_Specular.png";
            this._key = "DHI";
        }
    }
    
    //-------------------------------------------------------------------------------------------------------------
    this.startUpComplete = function() {
        // make sure our texture wins any races to be the last texture installed
        var info = System.infoForSystem(0, 210);
        info.texture = "riredi_diffuse.png";
    }
    
    //-------------------------------------------------------------------------------------------------------------
    this.shipSpawned = function(ship) {
        if (galaxyNumber == 0 && system.ID == 210) {
            switch (ship.dataKey) {
                case "buoy":
                case "buoy-witchpoint":
                case "DHI_Nav_Buoy":
                case "DHI_Nav_Buoy-witchpoint":
                    if (this._key == "oolite") {
                        ship.setMaterials({"oolite_buoy_diffuse.png": {
                            shininess:20, gloss:0.65, specular_color:[0.8, 0.83, 0.85, 1.0], 
                            diffuse_map:this._diffuse, 
                            emission_map:this._emission, 
                            normal_map:this._normal, 
                            specular_map:this._specular}});
                    } else {
                        ship.setMaterials({"DHI_Nav_Buoy.png": {
                            shininess:20, gloss:0.65, specular_color:[0.8, 0.83, 0.85, 1.0], 
                            diffuse_map:this._diffuse, 
                            emission_map:this._emission, 
                            normal_map:this._normal, 
                            specular_map:this._specular}});
                    }
                    break;
            }
        }
    }
    Scripts/sodalite-newcargoes.js
    "use strict";
    this.author = "cim";
    this.copyright = "© 2011-2014 cim.";
    this.license = "CC-BY-SA 3.0";
    this.name = "CargoTypeExtension-Station-Sodalite";
    this.description = "Sodalite station market definition";
    
    this.startUp = function () {
    	if (!worldScripts.CargoTypeExtension) {
    		for (prop in this) {
    			if (prop !== 'name' && prop !== 'version' && prop !== "oolite_manifest_identifier") {
    				delete this[prop];
    			}
    		}
    		return;
    	}
    	else {
            if (!worldScripts["RandomStationNames"]) {
                worldScripts["CargoTypeExtension"].registerOXPStation(this.name, "cb68_sodalite_station-riredi-coluber");
            } else {
                worldScripts["CargoTypeExtension"].registerOXPStation(this.name, "cb68_sodalite_station-riredi-coluber_no_beacon_version");
            }
    		this.$registerNewCargoTypes();
    	}
    }
    
    this.$registerNewCargoTypes = function () {
    	var obj = new Object;
    	obj.ID = "RC-MGE1";
    	obj.genericType = "luxuries";
    	obj.specificType = "Rirediian Mountain Slug Emollient";
    	obj.buySystems = [[210], [], [], [], [], [], [], []];
    	obj.sellSystems = [[5,57,59,60,69,78,92,99,156,167,218,223,231,241,249,253,], 
            [14,53,81,89,113,115,144,224], 
            [31,53,67,84,95,107,127,195,198,212,223], 
            [25,46,47,51,56,72,89,104,111,115,120,121,153,174,175,179,184,200,217,232,239,243,248,249], 
            [5,34,35,43,44,47,48,51,105,191,196,212,216,239,240], 
            [22,34,35,53,59,80,96,110,119,132,159,204,227,232,234,242], 
            [0,3,17,39,84,87,97,106,124,129,162,179,184,222,233,241], 
            [0,19,22,54,67,72,73,87,135,142,143,154,156,184,209,241,252]];
    	obj.desc = "A secretion of the Rirediian Mountain Slug, with scientifically proven benefits for a variety of insectoid exoskeleton conditions.";
    
    	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 == "RC-MGE1") 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 == "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/sodalite_station.js
    "use strict";
    this.name = "sodalite_station_script";
    this.author = "phkb";
    this.copyright = "2024 phkb";
    this.license = "CC BY-NC-SA 4.0";
    
    this._types = ["cb68_pitviper-player", "cb68_pitviper-beast-player", 
        "cb68_pitviper2-player", "cb68_pitviper2b-player", "cb68_pitviper2c-player", "cb68_pitviper2d-player", "cb68_pitviper2e-player",
        "cb68_blue_racer-player", "cb68_red_racer-player", "cb68_yellowbelly_racer-player", "cb68_yellowbelly_racer-player2", "cb68_black_racer-player"];
    
    //-------------------------------------------------------------------------------------------------------------
    this.shipSpawned = function () {
        var sy = this.ship.shipyard;
        var i = sy.length;
        // look for an existing coluber ships in the shipyard
        while (i--) {
            if (this._types.indexOf(sy[i].shipdata_key) >= 0) {
                // there are already coluber ships
                return;
            }
        }
        // make sure we only have spawnable ships in the _types array
        i = this._types.length;
        while (i--) {
            if (!Ship.shipDataForKey(this._types[i])) this._types.splice(i, 1);
        }
        // if we don't have any coluber ship oxps installed, exit at this point
        if (this._types.length == 0) return;
        // if we get here, there were no coluber ships in the shipyard, but there are some oxps installed
        // first, make sure there aren't many other ships
        i = sy.length;
        while (i--) {
            if (Math.random() > 0.25) this.ship.removeShipFromShipyard(i);
        }
        // now go and add some ships
        this.$addPitvipersToShipyard();
    }
    
    //-------------------------------------------------------------------------------------------------------------
    this.$addPitvipersToShipyard = function () {
        var optional = ["EQ_ECM", "EQ_ADVANCED_NAVIGATIONAL_ARRAY", "EQ_PASSENGER_BERTH", "EQ_ENERGY_UNIT", "EQ_FUEL_INJECTION", 
            "EQ_SCANNER_SHOW_MISSILE_TARGET", "EQ_MULTI_TARGET", "EQ_GAL_DRIVE", "EQ_SHIELD_BOOSTER", "EQ_HEAT_SHIELD"];
    
        var forSale = parseInt(Math.random() * 5) + 6; // something between 6 and 10 ships for sale
        for (var shps = 0; shps <= forSale; shps++) {
            var s = this._types[parseInt(Math.random() * this._types.length)];
            var extras = [];
            var txt = "";
            var extrasCount = parseInt(Math.random() * 3);
            var extrasCost = 0;
    
            for (var i = 1; i <= extrasCount; i++) {
                if (Math.random() > 0.75) {
                    // pick a piece of equipment to add
                    var itm = optional[parseInt(Math.random() * optional.length)];
                    var eq = EquipmentInfo.infoForKey(itm);
                    if (eq.techLevel <= system.techLevel && eq.techLevel <= this.ship.equivalentTechLevel) {
                        extras.push(itm);
                        txt += (txt == "" ? "Includes " : " and ") + eq.name;
                        extrasCost += (eq.price / 10);
                    }
                }
            }
            if (txt != "") txt += ". ";
            this.$addShip(s, extras, txt, extrasCost);
            this._types.splice(this._types.indexOf(s), 1);
        }
    }
    
    //-------------------------------------------------------------------------------------------------------------
    this.$addShip = function (shipKey, extras, extrasText, extrasCost) {
        var shp = Ship.shipDataForKey(shipKey);
        if (!shp) return;
        var price = (parseInt(shp._oo_shipyard.price) + extrasCost) * 0.9; // discounted when buying at a Sodalite station
        this.ship.addShipToShipyard({
            short_description: shp.name + ": Standard customer model. " + extrasText + "Price " + formatCredits(price, false, true) + ".",
            shipdata_key: shipKey,
            price: price,
            personality: Math.floor(Math.random() * 32768),
            extras: extras
        });
    }