Index: binaries/data/mods/public/simulation/helpers/TraderGain.js =================================================================== --- binaries/data/mods/public/simulation/helpers/TraderGain.js +++ binaries/data/mods/public/simulation/helpers/TraderGain.js @@ -22,9 +22,11 @@ if (trader) { let cmpTrader = Engine.QueryInterface(trader, IID_Trader); + //gainMultiplier is normalized a 100m distance on a 1024 map if (!cmpTrader) return null; - gainMultiplier = cmpTrader.GetTraderGainMultiplier(); + let normalization = 1024 / 10000; + gainMultiplier = cmpTrader.GetTraderGainMultiplier() * normalization; } else //called from the gui, modifications already applied { @@ -37,10 +39,11 @@ // Calculate ordinary Euclidean distance between markets. // We don't use pathfinder, because ordinary distance looks more fair. - let distanceSq = firstMarketPosition.distanceToSquared(secondMarketPosition); - // We calculate gain as square of distance to encourage trading between remote markets - // and gainMultiplier corresponds to the gain for a 100m distance - gain.traderGain = gainMultiplier * distanceSq / 10000; + let distance = firstMarketPosition.distanceTo(secondMarketPosition); + let cmpTerrain = Engine.QueryInterface(SYSTEM_ENTITY, IID_Terrain); + // We calculate gain as distance between markets + // and + gain.traderGain = gainMultiplier * distance * Math.tanh(distance / cmpTerrain.GetMapSize()); gain.market1Owner = cmpMarket1Player.GetPlayerID(); gain.market2Owner = cmpMarket2Player.GetPlayerID();