Basic market fix for old oxps

Discussion and information relevant to creating special missions, new ships, skins etc.

Moderators: winston, another_commander

Post Reply
Layne
---- E L I T E ----
---- E L I T E ----
Posts: 355
Joined: Sat Mar 28, 2015 11:14 pm

Basic market fix for old oxps

Post by Layne » Fri Jul 24, 2015 9:51 pm

Right, so with some help from another_commander, I've finally been able to upgrade my Oolite to 1.82 and still get it to work moderately well on my crummy laptop. (Side note, is anyone else using Deep Horizons Planetary Systems as a moon/planet re-texture? It's had some strange behavior in 1.82 and I had to switch to Additional Planets to get a similar effect.) Obviously, with the new markets, a lot (a lot a lot) of older oxp's have ancillary stations that no longer provide trading. These include Anarchies, Commies, Dictators, etc, the system oxps, for the most part. Looking at Norby's patch for Planetfall, I'm still not sure I see how to quickly add markets back into these stations.

Is there a quick template I can look at for returning functioning markets to older oxps? Not just duplicates of the main station market, but with some more specialized prices?
Reports of my death have been greatly underestimated.

User avatar
spara
---- E L I T E ----
---- E L I T E ----
Posts: 2553
Joined: Wed Aug 15, 2012 4:19 am
Location: Finland

Re: Basic market fix for old oxps

Post by spara » Fri Jul 24, 2015 10:05 pm

Wildships has a fairly straight forward conversion script. That might get you going.

Layne
---- E L I T E ----
---- E L I T E ----
Posts: 355
Joined: Sat Mar 28, 2015 11:14 pm

Re: Basic market fix for old oxps

Post by Layne » Fri Jul 24, 2015 10:06 pm

spara wrote:Wildships has a fairly straight forward conversion script. That might get you going.
Thanks, that'll probably be just what I need!
Reports of my death have been greatly underestimated.

User avatar
spara
---- E L I T E ----
---- E L I T E ----
Posts: 2553
Joined: Wed Aug 15, 2012 4:19 am
Location: Finland

Re: Basic market fix for old oxps

Post by spara » Sat Jul 25, 2015 2:04 pm

Finally back to my rig. Here's a short howto for anyone looking for a way to bring back markets to the old OXPs containing commodities.plist definition file. This method practically makes a carbon copy of the original market by duplicating the old market creation method in js.

The initial setting should be an old station OXP with shipdata.plist and commodities.plist files in the Config folder.

1. Create a folder named "Scripts" to the root of the OXP.
2. Create a uniquely named js-file to the Scripts folder. For example "my-station-market.js".
3. Copy-paste the following into the just created market file.

Code: Select all

"use strict";

this.name = "my-station-market";

//put the original defs here. no def is handled later.
this.$originalDefs = {
      "food" : [0, 0, 25, -1, -1, 250, 5, 5, 0],
      "textiles" : [0, 0, 18, -1, 0, 250, 5, 10, 0],
      "radioactives" : [0, 0, 53, -2, -3, 0, 7, 15, 0],
      "slaves" : [0, 0, 20, -2, -1, 5, 0, 3, 0],
      "liquor_wines" : [0, 0, 130, -1, -1, 250, 15, 5, 0],
      "luxuries" : [0, 0, 190, 8, -1, 250, 9, 21, 0],
      "narcotics" : [0, 0, 36, -5, -9, 250, 5, 5, 0],
      "computers" : [0, 0, 150, 14, -1, 250, 3, 21, 0],
      "machinery" : [0, 0, 120, 6, 1, 250, 31, 10, 0],
      "alloys" : [0, 0, 88, 3, 1, 250, 21, 10, 0],
      "firearms" : [0, 0, 100, 13, 0, 0, 63, 0, 0],
      "furs" : [0, 0, 170, -9, -1, 250, 63, 21, 0],
      "minerals" : [0, 0, 16, -1, -2, 15, 3, 31, 0],
      "gold" : [0, 0, 100, 0, 0, 0, 4, 0, 1],
      "platinum" : [0, 0, 181, 0, 0, 0, 21, 0, 1],
      "gem_stones" : [0, 0, 50, 0, 0, 0, 10, 0, 2],
      "alien_items" : [0, 0, 125, 1, 0, 0, 31, 0, 0]
};

this.updateLocalCommodityDefinition = function(goodDefinition) {
	var commodity = goodDefinition.key;
	var oldDefs = this.$originalDefs[commodity];
	
	//define the market size for the station
	goodDefinition.capacity = 127;
	
	//old style definition found for the good. calculate it the old way
	if (oldDefs) {
		var market_base_price = oldDefs[2];
		var market_eco_adjust_price = oldDefs[3];
		var market_eco_adjust_quantity = oldDefs[4];
		var market_base_quantity = oldDefs[5];
		var market_mask_price = oldDefs[6];
		var market_mask_quantity = oldDefs[7];
		var market_rnd = Math.floor(Math.random() * 256);

		var economy = system.economy;
		
		var price = (market_base_price + (market_rnd & market_mask_price) + (economy * market_eco_adjust_price)) & 255;
		price *= 0.4;
		
		var quantity = (market_base_quantity + (market_rnd & market_mask_quantity) - (economy * market_eco_adjust_quantity)) & 255;
		if (quantity > 127) quantity = 0;
		
		quantity &= 63;
		
		goodDefinition.quantity = quantity;
		goodDefinition.price = price * 10;
	}

	//no definition found. just add some variance to the system market (+/-5%)
	else {
		goodDefinition.price = goodDefinition.price * (1.05 - Math.random() * 0.1);
		goodDefinition.quantity = Math.floor(goodDefinition.quantity * (1.05 - Math.random() * 0.1));
	}

	//no definition found. no market on that commodity
	//else {
	//	goodDefinition.price = 0;
	//	goodDefinition.quantity = 0;
	//	goodDefinition.capacity = 0;
	//}

	//scale down if quantity too high
	if (goodDefinition.quantity > goodDefinition.capacity)
		goodDefinition.quantity = Math.floor(goodDefinition.quantity / 127 * goodDefinition.capacity);

	return goodDefinition;
};
4. Replace the definitions in the script above with the definitions from the old commodities.plist. Only replace the numbers! In case the old commodities.plist is in xml, you'll probably want to convert it to open step with xml2ns.py script found from the wiki: [wiki]Oolite Converters[/wiki].
5. Tweak the capacity of the station to your liking by editing goodDefinition.capacity.
6. Decide what to do with custom commodities. By default the script just adds some variance.
7. Remember to save your new market file!
8. Open shipdata.plist file and find the definition for the station.
9. Add

Code: Select all

market_script = "my-station-market.js";
below the line saying market=.... The place really does not matter, but it's tidier that way.
10. Save shipdata.plist, start the game while holding shift and visit the station. If all went well, it should have a functional market. If not, latest.log will probably tell you what went wrong.

That should be it. Have fun tweaking :mrgreen: .

Post Reply