| Back to Index | Page generated: Oct 27, 2025, 5:37:22 AM | 
 Expansion Riredi
 Expansion Riredi| 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.3 | 2.3 | 
| Tags | ||
| Required Oolite Version | ||
| Maximum Oolite Version | ||
| Required Expansions |  |  | 
| 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/1/18/Riredi_2.3.oxz | n/a | 
| License | CC-BY-NC-SA 3.0 | CC-BY-NC-SA 3.0 | 
| File Size | n/a | |
| Upload date | 1753243878 | 
Also read http://wiki.alioth.net/index.php/Riredi
============================
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.3
		* Moved all text into descriptions.plist for easier localisation.
		* Updated planet normal map.
	Version 2.2
		* Added PlanetFall2 integration.
	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 ***
        
                  
        | Name | 
|---|
| Pitviper Coluberguard | 
| Pitviper MkII Coluberguard | 
| cb68_pitviper2-coluberguard-int | 
| cb68_pitviper2-police | 
| Docking Slit (Octagon) | 
| Sodalite Station Coluber Inc. | 
| 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";
    }
	var pf = worldScripts.PlanetFall2;
	if (!pf) return;
    pf._locationOverrides["0 210"] = {
        main: [
            {
                roles: ["capitalCity", "capitalCity", "leisureComplex", "leisureComplex", "factory", "factory"],
                names: expandDescription("[riredi_planet_locations]").split("|"),
            },
        ],
    };
}
//-------------------------------------------------------------------------------------------------------------
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 (var 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 = expandDescription("[riredi_newcargo]");
	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 = expandDescription("[riredi_newcargo_desc]");
	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 == "" ? expandDescription("[riredi_includes]") : expandDescription("[riredi_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: expandDescription("[riredi_ship]", { name: shp.name, extras: extrasText, price: formatCredits(price, false, true) }),
        shipdata_key: shipKey,
        price: price,
        personality: Math.floor(Math.random() * 32768),
        extras: extras
    });
} |