Index: binaries/data/mods/public/gui/session/selection_details.js =================================================================== --- binaries/data/mods/public/gui/session/selection_details.js +++ binaries/data/mods/public/gui/session/selection_details.js @@ -533,12 +533,12 @@ { "gain": gain.market2Gain, "owner": gain.market2Owner } ]; - let primaryGain = gain.traderGain; + let primaryGain = Math.ceil(gain.traderGain/10); for (let market of markets) if (market.gain && market.owner == gain.traderOwner) // Translation: Used in the trading gain tooltip to concatenate profits of different players - primaryGain += translate("+") + market.gain; + primaryGain += translate("+") + Math.ceil(market.gain/10); let tooltip = tradingGainString(primaryGain, gain.traderOwner); @@ -546,7 +546,7 @@ if (market.gain && market.owner != gain.traderOwner) tooltip += translateWithContext("Separation mark in an enumeration", ", ") + - tradingGainString(market.gain, market.owner); + tradingGainString(Math.ceil(market.gain/10), market.owner); return tooltip; } 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 * Math.sqrt( 1024/ cmpTerrain.GetMapSize() ) * cmpTerrain.GetMapSize() * Math.tanh(distance / cmpTerrain.GetMapSize()); gain.market1Owner = cmpMarket1Player.GetPlayerID(); gain.market2Owner = cmpMarket2Player.GetPlayerID();