The conceptually simple (but not simple to implement) solution is that industries place orders (long term contracts) for input cargos with other industries.
The player then constructs routes / provides vehicles on existing routes to deliver according to those 'orders'.
I don't mean we have to draw a little scroll graphic for popup notification of 'orders' or any nonsense like that, I simply mean that for any given cargo, industries only accept that cargo from their preferred supplier(s). Orders would be stable and long term.
This addresses the core problem, that the game rewards players for acting in a way that is both unrealistic (not a problem), but also counter-intuitive to the sense of economic efficiency and good sense that many of us have (reduces enjoyment = problem). Transporting goods from a source far away when there is a source nearby just *seems wrong* to many of us, yet the game *explicitly* rewards it for most cargos. On the other hand, lots of players seem to be fine with it, accepting it as part of the game world.
In fact, if we did take the realism argument, freight companies typically charge per ton-mile, so it's correct to be rewarded for distance travelled. The problem is that the game world provides no rationale for industries accepting goods from a distant source when there is a close source.
So one solution would be to change the game world to provide a rationale for this counter-intuitive demand. i.e. we transport the goods because the industry requests it (we are a transport industry after all, not a manufacturing conglomerate). Customer has a need, we meet it. That's understandable, right?
Orders could be placed with suppliers chosen at random from the list of available industries, but weighted to favour nearby industries. The orders could be placed/replaced on an occasional basis, for example whenever an industry opens or closes, or as part of whatever events system that the production callback uses (I haven't read the code even though I have it checked out, slap me). This should be relatively undemanding on CPU use (I have no idea if this is true, it's just an assertion, slap me).
I would envisage an 'order' being a simple mapping of cargo type, supplier, destination. There would be no quantity - any stockpiling/production control behaviour is already correctly handled by newgrf. Price would be determined by the existing cargo payment calculations. If an industry wants to pay for expensive transportation, assume it has some reason we don't need to go into (we could imagine it's quality for example, or price - plenty of real examples if we need them). But we don't need to worry about that, we're just a transport company...
I'm not suggesting implementing this idea of 'orders' between industries, my feeling is that the result would be sufficiently similar to cargo destinations to achieve the same end goal (more satisfying gameplay). I haven't read all the cargodest patch documentation, nor played a game with that (busy drawing FIRS...slap me), but if cargodest is being actively developed, it seems to make more sense to pursue that.
Having thought about it for at least 30 seconds (slap me) it does strike me that 'most of this' is close to being handled by newgrf. We already have a callback for checking number of industries of type
x, and the distance to
the nearest instance. We have callbacks for controlling production and cargo acceptance. However we have absolutely no way of identifying where a unit of cargo originated, and that really would
kybosh my scheme, as well as no doubt some other things about the internals of OpenTTD that (to devs) it will be painfully obvious I don't understand.
Also, I'm not sure how much my suggestion above will make sense. I have a pretty clear vision of why this 'distance no object' system detracts from gameplay for a certain type of player, and I can see a simple solution, but I don't know if I've explained it clearly (err...slap me).
To me it definitely looks like an issue of proper domain, and any solution that attempts to tweak, distort or modify payment rates is doomed to failure as the payment rates are grounded in a sound economic model supported by both theory and reality, and in tune with our native mental concept of how reward should be operated.
An alternative would seem to be a full market economy with spot prices for all cargos. This was done brilliantly in Railroad Tycoon 3, and I loved it, but the anecdotal evidence was that lots of people *didn't*. I talked to Phil Steinmeyer (one of the lead RT3 developers) about it, and he seemed to think they over-stretched themselves away from the core 'trains trains trains' character of Railroad Tycoon. In any case, I believe a full market economy in OpenTTD is probably a huge non-starter, and probably not desirable as it's not really the essential character of the game. I've been around the game (played original TTD a lot) for the last three years, and no-one is talking about developing a market economy so far that I've seen, so probably unlikely to happen.
cheers,
Andy