Every item in the game has a base cost_gp value stored as a decimal (two places, representing copper accuracy). Merchants adjust the final trade price based on their personal merchant_favor toward the party.
merchant_favor is tracked per merchant as an integer from 0 to 100:
Buy Price (what the player pays the merchant)
buy_P=max(1.0, 4.0−(merchant_favor×0.03)+campaign_economy_modifier)\text{buy\_P} = \max(1.0,\ 4.0 - (\text{merchant\_favor} \times 0.03) + \text{campaign\_economy\_modifier})buy_P=max(1.0, 4.0−(merchant_favor×0.03)+campaign_economy_modifier)
Buy price = cost_gp × buy_P (rounded to nearest 0.01 gp / copper)
Sell Price (what the merchant pays the player)
sell_P=1.0+(merchant_favor×0.002)\text{sell\_P} = 1.0 + (\text{merchant\_favor} \times 0.002)sell_P=1.0+(merchant_favor×0.002)
Sell price = cost_gp × min(1.20, sell_P) (rounded to nearest 0.01 gp / copper)
campaign_economy_modifier is an optional global slider set by the GM at campaign start: –0.5 (generous world), 0 (standard), or +0.5 (harsh economy).
Final prices may be paid in any combination of copper (0.01 gp), silver (0.1 gp), gold (1 gp), and electrum (0.5 gp) coins.
Favor Level | merchant_favor | Buy Multiplier | You Pay (Buy) | Merchant Pays You (Sell) | Feels Like |
Hated | 0 | 4.0× | 400% | 100% | Hostile — total gouge |
Unfriendly | 10–29 | 3.7–3.1× | 310–370% | 102–106% | Barely tolerated |
Neutral | 50 | 2.5× | 250% | 110% | Standard medieval merchant |
Friendly | 70 | 1.9× | 190% | 114% | Regular customer |
Favored | 90 | 1.3× | 130% | 118% | Good relationship |
Beloved | 100 | 1.0× | 100% (at cost) | 120% | VIP — best deals + bonus |
Favor Level | You BUY it | Merchant pays you if you SELL it | Notes |
Hated (0) | 400.00 gp | 100.00 gp | Pure gouge |
Unfriendly (20) | 340.00 gp | 104.00 gp | Still painful |
Neutral (50) | 250.00 gp | 110.00 gp | Classic 150 % medieval markup |
Friendly (70) | 190.00 gp | 114.00 gp | Noticeable break |
Favored (90) | 130.00 gp | 118.00 gp | Solid discount |
Beloved (100) | 100.00 gp | 120.00 gp | At cost + 20 % sell bonus |
Before any buying or selling, a player may attempt haggling once per merchant visit. This is a contested roll:
Difference = Player total − Merchant total (Tie always goes to the player.)
Permanent results (applied immediately to the database):
The updated favor takes effect for the entire visit and all future visits.
Gifting gold or valuable items improves merchant_favor, but it is deliberately expensive and inefficient, especially as favor rises. This prevents easy “gold-spam” juicing while still rewarding players who want to invest in a relationship (exactly like BG3’s level-scaled gifting cost).
Approximate cost per +1 favor:
Current Favor Range | Value needed per +1 favor |
|---|---|
0–45 | 50 gp |
46–70 | 100 gp |
71–85 | 200 gp |
86–90 | 400 gp |
This keeps gifting useful for small relationship boosts or roleplay flavor, but makes quests, haggling, and consistent good behavior the real path to “VIP” pricing.