Skip to content
10TheDragon edited this page Mar 19, 2026 · 1 revision

Welcome to the bss-values-index wiki!

BSS Values Tool — Formulas & Calculations

A full reference for every formula, filter, and calculation used in the BSS Values Tool.


Table of Contents


Item Value

Function: getAvg(item) — the foundation of every other calculation.

Every value displayed and compared in the tool comes from this function. It prefers bssmvalues.com's own smoothed average, falling back to a midpoint if unavailable.

if cached_graph_value > 0:
    return cached_graph_value          // bssmvalues.com's smoothed graph value

return (value_min + value_max) / 2    // midpoint fallback

If both value_min and value_max are missing or non-numeric, the item is treated as unpriced and excluded from value-based calculations.


Tier System

Function: getTier(avg) — assigns a community-defined bracket to every item.

The tool walks this table top-to-bottom and assigns the first tier whose range contains the item's avg value. Tiers are a community convention, not an official game mechanic.

Tier Min Max Notes
Legendary 100 Top-tier, usually limited items
Epic 10 100 High-end tradeable items
Ultra-Rare 3 10 Actively traded mid-tier
Very Rare 1 3 Common target for upgrading
Rare 0.5 1 Standard entry point
Uncommon 0.1 0.5 Low-end, useful as adds
Common 0.01 0.1 Filler / quest items
Basic 0 0.01 Near-zero value

Items tend to trade within plus or minus 1 tier. Jumping 2+ tiers in a single trade is significantly harder regardless of value matching.


Trading Calculator

Verdict Thresholds

diff = yourTotal - theirTotal
pct  = |diff| / theirTotal x 100

pct <= 5%                 ->  Fair Trade
pct <= 15% AND diff < 0   ->  Close — LB  (adds suggested)
diff > 0                  ->  OP  (you overpaid)
diff < 0                  ->  LB  (you underpaid)

Both the raw value difference and the percentage are shown simultaneously — for example: OP +3.50 (+18.2%).

Trade Type Detection

yourItems > 1 AND theirItems = 1  ->  UP (Upgrading)
yourItems = 1 AND theirItems > 1  ->  DG (Downgrading)
both sides > 1                    ->  Multi-item trade

In an UP trade expect to OP slightly. In a DG trade require OP from them.

Adds Suggestion

When you are LB by 15% or less, the tool finds items from the full catalogue that could close the gap:

gap        = |diff|
candidates = items where avg <= gap x 1.2
sorted by  = |item.avg - gap| ascending
show top   = 4 results

Trade Success %

Function: calcTradeSuccess(combo, targetValue)

Estimates the likelihood a trade offer gets accepted in the BSS trading hub. Output is always clamped between 5 and 95 — a trade can never be guaranteed or impossible.

n          = number of items you are offering
total      = sum of avg values of your items
base       = 60   // ~60% baseline acceptance rate

// Factor 1: Value closeness  (0 to +60 pts)
valueDiff  = |total - targetValue| / targetValue
valueScore = max(0,  1 - valueDiff x 2.5) x 60

// Factor 2: Overpay bonus  (0 to +15 pts)
opRatio    = (total - targetValue) / targetValue
opBonus    = if OPing: min(15,  opRatio x 40)

// Factor 3: Item count penalty  (-5 per extra item)
countPenalty = (n - 1) x 5

// Factor 4: Tier distance penalty  (-8 per tier jumped)
avgComboTier  = average tier index of your items
targetTierIdx = tier index of target  (0 = Legendary ... 7 = Basic)
tierDistance  = max(0,  targetTierIdx - avgComboTier)
tierPenalty   = tierDistance x 8

// Final
raw    = base + valueScore + opBonus - countPenalty - tierPenalty
result = clamp(round(raw), 5, 95)
Factor Max contribution Direction
Base rate 60 pts Always added
Value closeness +60 pts Reduces as values diverge
Overpay bonus +15 pts Scales with how much you OP
Item count -5 per extra item 1 item = 0 penalty, 4 items = -15
Tier distance -8 per tier jumped Same tier = 0 penalty, 3 tiers = -24

This is an estimate based on BSS trading conventions, not a real probability derived from actual trade data. Use it as a guide, not a guarantee.


Demand Adjustment

Function: calcTradeSuccessAdj(combo, targetValue, targetItem)

Takes the base success % and adjusts it based on the demand levels of what you are giving vs what you are asking for. Only applied when Sort Mode is not Value.

Sort Mode Formula
Value No adjustment — base score returned unchanged
Both base - (targetDemand / 5) x 15 + (avgYourDemand / 5) x 12
Demand 50 + (avgYourDemand - targetDemand) x 12 (value math ignored)
  • Both mode: asking for a high-demand item costs up to -15 pts; offering high-demand items gains up to +12 pts
  • Demand mode: only the demand gap between give and receive determines the score

Upgrader

Target Pool Filter

Items are only shown as upgrade targets if their value falls within 10% of your combo's total:

comboTotal x 0.90  <=  target.avg  <=  comboTotal x 1.10

Combo Generation

Function: allSubsets(arr)

Every possible non-empty combination of your items is generated using bit masking:

for mask = 1 to (2^n - 1):
    include item[i] if bit[i] of mask is set

max items: 8   (2^8 - 1 = 255 possible combos)

Capped at 8 items to prevent browser lag. Combos producing the same target are deduplicated, keeping only the highest success % per target.

Sorting

Sort mode Order
Best Chance success % descending
Best Value target.avg descending
Custom % distance from your chosen % ascending
Demand mode override Re-sort by target.demand descending after above

Wishlist

Coverage Bar

pct = min(1,  myTotal / targetTotal)

pct >= 0.90  ->  green   (can afford)
pct >= 0.60  ->  amber   (getting close)
pct <  0.60  ->  red     (significantly short)

Gap Value

if you have items AND you are short:
    gapVal = targetTotal - myTotal   // find what you still need
else:
    gapVal = targetTotal             // find something for the full target

Match Windows

Match type Filter Sort (Value mode) Sort (Demand mode)
Singles distance from gapVal / gapVal <= 30% Closest to gapVal demand descending
Pairs sum distance from gapVal / gapVal <= 25% Closest sum avg demand of pair
Best Offers distance from targetTotal / targetTotal <= 15% success % descending demand adjusted

Best Offers only appear when your have-items contain subsets that actually cover the full target within 15%.


Trasher Score

Function: calcTrashScore(item, invAvg) — returns 0 to 100, higher = more trashable.

invAvg = average value of all items in your drop zone that have a numeric value. Unpriced items are excluded from this average.

Sort Mode Formula
Value round(min(100, max(0, (1 - avg/invAvg) x 70 + 30)))
Demand round((1 - demand/5) x 100)
Both round((1 - demand/5) x 60 + min(40, (1 - avg/invAvg) x 40))
// Score thresholds
score >= 61  ->  TRASH  (red)
score >= 31  ->  MAYBE  (amber)
score <  31  ->  KEEP   (green)

Limited and seasonal items are never recommended for trash regardless of their score.


Portfolio Health

Function: calcPortfolioHealth() — shown in the Recommender tab.

Four factors, each scored 0 to 100, then averaged into a single overall score.

Factor Formula What it measures
Avg Demand (weightedAvgDemand / 5) x 100 How tradeable your inventory is on average
Diversity min(1, uniqueTierCount / 5) x 100 How many different value tiers are represented
Liquidity max(0, 1 - spread) x 100 How close items are to each other in value
Value Density min(1, avgValuePerItem / 10) x 100 Average value per item, caps at avg 10
overall = round((demandScore + divScore + liqScore + densityScore) / 4)

overall >= 70  ->  Healthy
overall >= 45  ->  Fair
overall <  45  ->  Needs Work

Spread = weighted mean absolute deviation from avg value, divided by total value.


Market Overview

Before every data refresh, current values are snapshotted. After the refresh, each item is compared to detect significant changes.

// An item appears as a gainer or loser only if:
|current - previous| / previous  >=  0.5%

// The same threshold triggers the flash animation on item cards

Items below this threshold are considered noise. In Value mode only demand 3 or above items appear in the Most Demanded strip. In Demand mode all items are shown.


Trade Matcher

Path type Filter Combined success
Direct distance from targetValue / targetValue <= 15% calcTradeSuccessAdj(combo, target)
2-step chain Step 1: combo within 15% of intermediate / Step 2: intermediate within 30% of target round(step1% x step2% / 100)

The 2-step search checks the top 30 items by value below the target value as potential intermediates. Results sorted by combined success % descending.


Recommender

No numeric formula — applies conditional rules to each item in your inventory.

Limited item protection: items marked as static (Star Signs) or with avg 50 or above and demand 3 or above are never recommended for trash or trade-away in any mode.

Mode Rule Action shown
Gain Value trashScore >= 65 AND demand <= 2 AND not limited Trade away (UP)
Gain Value demand >= 4 AND avg >= invAvg, find target at 1.2 to 3x value with equal or higher demand Upgrade (UP)
Gain Value avg < 0.1 AND demand <= 1 AND not limited Use as adds / Discard
High Demand demand >= 4 Keep and trade strategically
High Demand demand <= 1 AND not limited Swap for higher-demand item
What to Hold is limited Hold — do not trash
What to Hold demand >= 3 AND avg >= invAvg Hold
What to Hold demand <= 1 AND avg <= invAvg x 0.5 AND not limited Trade away

Recommender mode auto-syncs with Sort Mode. Switching to Demand activates High Demand mode. Switching to Value switches back to Gain Value.


Sort Mode Effects

How the global Sort Mode toggle changes each section of the tool.

Section Value Both Demand
Browse / Browsers Sort by avg value Sort by avg value Sort by demand descending
Tier headers Value range Value range Avg demand / 5
Success % Value only Value + demand adjustment Demand gap only
Upgrader results By sort mode Demand adjusted % Re-sort by target demand
Wishlist singles Closest to gap value Closest to gap value demand descending
Trasher score 100% value vs inv avg 60% demand + 40% value 100% demand
Catalogue By trash score By trash score By demand descending
Market demanded strip Only demand 3 or above All items All items
Recommender mode Auto switches to Gain Value No change Auto switches to High Demand

Formulas last updated March 2026