A simple means of fixing the economy (the St. Kat's problem)

Post ideas & suggestions you have pertaining to the game here.
Post Reply
JohnBWatson
Fleet Officer
Fleet Officer
Posts: 1452
Joined: Tue Aug 19, 2014 10:17 pm

A major balance issue in the early to mid game is that, upon reaching St. Katherine's Star, the player effectively has enough money for equipment that will let them steamroll the region due to the ability to quickly trade between stations for an obscene profit. While many extremely complex solutions involving freighter AI and dynamic piracy have been proposed, I have a much simpler idea that will balance the economy with minimal additional code and development time, allowing for a much smoother and more enjoyable difficulty curve.

Code: Select all

Give each system a string array, "producedItemTypes", and another array, "demandedItemTypes". 

Upon generation, when adding a station to a system, add every item trait it will sell for below market price to the first array, and every item trait it will buy for above market price to the latter array. For example, when a hotel is added to a system, "Luxury" and "Food" would be added to demandedItemTypes.

Finally, check over the arrays for common traits. If any trait is in both lists, reduce the deviation from the market price at all stations in the system that produce or buy it by a factor of 5.

OPTIONAL: Reduce the deviation of buying price of items produced in neighboring systems by a factor of 2, and vice versa.
Thoughts?
User avatar
Song
Fleet Admiral
Fleet Admiral
Posts: 2801
Joined: Mon Aug 17, 2009 4:27 am

Nice idea. Would go well with an increased spawn-rate of the corporate factory + tying the items it produces in to the affinity of the system. Would have to have some bearing on (or be influenced by) what stations are available to produce/consume goods. I'm not sure the economy system is 'broken', although it's definitely a bit simplistic at times....but adding a bit more depth to it is always good.
Mischievous local moderator. She/Her pronouns.
george moromisato
Developer
Developer
Posts: 2997
Joined: Thu Jul 24, 2003 9:53 pm
Contact:

I definitely think this is an interesting idea.

There is an event, <GetGlobalPlayerPriceAdj>, which could be used to control prices as you suggest. This is used, for example, by the Black Market to give you a discount based on rank. But it could be used to alter prices based on some data stored in the system.

For an example, see: https://github.com/kronosaur/Transcende ... .xml#L1076
JohnBWatson
Fleet Officer
Fleet Officer
Posts: 1452
Joined: Tue Aug 19, 2014 10:17 pm

george moromisato wrote:I definitely think this is an interesting idea.

There is an event, <GetGlobalPlayerPriceAdj>, which could be used to control prices as you suggest. This is used, for example, by the Black Market to give you a discount based on rank. But it could be used to alter prices based on some data stored in the system.

For an example, see: https://github.com/kronosaur/Transcende ... .xml#L1076
That's quite interesting, I might have a go at modding that in once I have a better grasp of Tlisp. If I understand this correctly, the prices are adjusted in one swoop when the player docks with the station?
george moromisato
Developer
Developer
Posts: 2997
Joined: Thu Jul 24, 2003 9:53 pm
Contact:

JohnBWatson wrote:That's quite interesting, I might have a go at modding that in once I have a better grasp of Tlisp. If I understand this correctly, the prices are adjusted in one swoop when the player docks with the station?
Roughly. The event gets called inside of objGetBuyPrice, which is a function that returns the price at which the player can buy an item.

Basically, it get called every time the engine needs to figure out what price to offer to the player. You can change the price inside the event according to whatever system data you want.

If you want to compute all prices at once, then you could do it when the system/universe is created and store it in some table (or even with the item). Then you can use this event to return the price appropriately.
Post Reply