treasureclassex.txt is the drop-resolution graph for the entire game. Every monster that drops items names one or more treasure classes (TCs) in monstats or superuniques, and each named TC is a row in this file. A TC row either resolves to terminal item codes from armor / weapons / misc, or to other TC names that get resolved recursively. All drop math — the per-player NoDrop reduction, the magic-vs-rare-vs-unique quality roll, the guaranteed-drop counts on bosses — originates from a row in this table.
1,257 rows × 39 columns. A small set of rows are top-level TCs that get named directly by monsters; the bulk are intermediate sub-TCs that act as composable pools (equipment-by-act, junk pools, gem/rune pools, quality-tier filters). The graph is acyclic by convention — any TC referenced as an Item1–Item10 slot must be defined in an earlier row, since the engine reads top-to-bottom.
How a drop resolves
Two axes of resolution work together.
1. Group + level resolution. Many TCs share a group ID (the group column). When a monster's named TC matches a group, the engine selects the highest-level TC in that group whose level ≤ the monster's level. This is how the same conceptual pool — e.g. "Act 1 Equipment A" — scales across the game: there's an "Act 1 Equip A" at level 0, an "Act 2 Equip A" at level 12, all the way through "Act 5 (H) Equip A" at level 83, all sharing one group, and the engine picks the right tier for the monster being killed. 943 rows participate in a group and span groups 1 through 60+. For boss monsters the level check is ignored; the named TC fires directly.
2. Picks + NoDrop + Prob resolution. Inside the chosen TC, the engine rolls each Item# slot's Prob# against a denominator built from the slot weights and NoDrop. The Picks column controls how many rolls happen and how they're scored — this is the most important table-specific concept and is covered in detail below.
When a slot's roll lands on an Item# whose value names another TC, the engine recursively resolves that TC. Chains typically run 2–4 levels deep before hitting a terminal base-item code.
Columns
Identity
| Column | Meaning |
|---|---|
Treasure Class | Unique TC name. Referenced by monstats (TreasureClass, TreasureClassChamp, TreasureClassUnique, TreasureClassQuest, TreasureClassDesecrated, TreasureClassHerald and difficulty-suffixed variants), by superuniques (TC, TC(N), TC(H) and Desecrated suffixes), and by other rows in this file via the Item# columns. |
Group and level resolution
| Column | Meaning |
|---|---|
group | Group ID that ties together a family of TCs the engine selects among by monster level. 943 of 1,257 rows have a group; the remaining 314 are top-level boss/quest/event TCs that don't participate in group resolution. |
level | Minimum monster level at which this TC is the engine's choice within its group. The engine picks the highest-level TC in the group whose level ≤ monster level. 938 rows set a level. Range: 0 through 96. Boss monsters skip the level check entirely. |
Pick mode
The Picks column has two distinct semantics depending on sign — getting this wrong is the most common source of mis-computed drop rates.
Picks value | Semantics |
|---|---|
| Positive (N) | Roll N independent times against the TC. Each roll has chance Prob_X / (ProbSum + NoDrop) of producing item X, and chance NoDrop / (ProbSum + NoDrop) of producing nothing. Rolls are independent — the same item can repeat across picks, and the expected number of drops per kill is N × ProbSum / (ProbSum + NoDrop). 885 rows use positive Picks. Values observed: 1 (592 rows), 2 (42), 3 (17), 4 (45), 5 (115), 7 (74). |
| Negative (−N) | Exactly N guaranteed items drop. NoDrop is ignored in this mode. Each Prob# is now a quantity multiplier for its Item#, not a probability — the engine drops Prob_X copies of Item_X. The Prob values across all slots must sum to N. 372 rows use negative Picks. Values observed: −1 (64), −2 (116), −3 (45), −4 (42), −5 (90), −7 (15). |
| (blank) | Defaults to positive 1. 0 rows are blank in shipped data. |
Positive Picks is the standard pattern for boss and ambient-monster TCs (where any individual pick can fail to NoDrop). Negative Picks is used for guaranteed-quantity sub-TCs — the Champion item/potion pair (Picks = −2, one item slot + one potion slot, each Prob = 1), the act-quest sub-TCs that always fire, and the high-quantity boss drops like Andariel (H) Desecrated with Picks = −7.
NoDrop and player count
| Column | Meaning |
|---|---|
NoDrop | Weight added to the roll denominator for "no item this pick." Only applies when Picks is positive. 427 of 1,257 rows set a non-zero NoDrop. The higher this value relative to ProbSum (the sum of Prob1–Prob10), the more likely each pick lands on nothing. Player count reduces NoDrop according to the formula below. |
Player-count reduction is what gives "more players = more drops" its mechanical force. Every two extra players in the game, the effective NoDrop is multiplied by NoDrop / (NoDrop + ProbSum):
NoDrop_eff = NoDrop × (NoDrop / (NoDrop + ProbSum)) ^ floor((players − 1) / 2)
So at /players1 the exponent is 0 and NoDrop is unchanged. At /players3 it's multiplied once, at /players5 twice, at /players7 or /players8 three times. The "Party Players" component (other players within ~1.5 screens in online play) adds to this exponent in the same way.
For TCs with high NoDrop, the reduction is geometric and dramatic. Andariel's Andarielq Item (H) Desecrated A ships with NoDrop = 57 against ProbSum = 70; at /players7 her effective NoDrop drops to 57 × (57/127)^3 ≈ 5.15, meaning each pick goes from ~55% no-drop at /players1 to ~7% at /players7.
Item-quality ratios
| Column | Meaning |
|---|---|
Unique | Override on the unique-quality drop ratio for items rolled through this TC. Lower values are better — the ratio is divided by (MF × 100 / (MF + 250)) and an item rolls unique on 1 / (effective_ratio / 128). The vanilla constant is 1024; boss-tier TCs ship values like 983 (Andariel/Mephisto Hell), 800 (champion-item sub-TCs). |
Set | Same mechanic, set-quality ratio. |
Rare | Same mechanic, rare-quality ratio. |
Magic | Same mechanic, magic-quality ratio. |
427 rows set one or more quality ratios. The combination of (lower-than-default ratios) + (more picks) is what gives bosses their famous loot-burst profile — Andariel(H) ships Unique = 983, Set = 983, Rare = 1024, Magic = 1024 with Picks = 7, which is why she's the canonical farm target. The Desecrated/Terror variants of boss TCs typically leave these columns blank because they chain through to sub-TCs that apply the rolls themselves.
Item slots
| Column | Meaning |
|---|---|
Item1–Item10 | Each slot holds either a base-item code (from armor.txt, weapons.txt, or misc.txt — e.g. gld, weap75, r12, tes), or the name of another Treasure Class row (e.g. Act 5 (H) Equip A, Andarielq Item (H) Desecrated A, Ancient Statue 1). Comma suffixes are supported (gld,mul=2048 multiplies the gold drop). |
Prob1–Prob10 | Weight for the matching Item# slot. Interpreted as probability weight when Picks is positive, as quantity multiplier when Picks is negative (see Pick mode). |
Up to 10 slots are available per TC. Most rows use only 2–4; the maximum observed slot use is 7 (the boss desecrated TCs). Empty slots beyond the last used are blank, not zero.
Conditional gates
| Column | Meaning |
|---|---|
ConditionCalc | Expression string evaluated at drop time. If the expression is falsy, the TC is suppressed regardless of other rolls. 34 rows use this. Two common patterns: cond('Difficulty', hell) (gate the TC to Hell-only, used by the five Terrorize Act Consumable Desecrated TCs that drop Worldstone Shards) and (stat('heraldtier'.accr)>1) * (stat('heraldtier'.accr) < 4) (gate the TC to a specific Herald tier range, used by the Herald loot tables). The expression grammar uses the same calc-string engine as item stat calculations. |
Ladder gating
| Column | Meaning |
|---|---|
firstLadderSeason / lastLadderSeason | Restrict the TC to a contiguous range of ladder seasons (inclusive). Both blank = no ladder restriction. Only 1 row uses these: the Sunder Charms TC, restricted to season 2. |
Spawn flag
| Column | Meaning |
|---|---|
noAlwaysSpawn | When 1, the TC does not unconditionally fire when reached by a parent pick — it remains subject to ConditionCalc and other gates even after the parent has selected it. 6 rows set this to 1: the five Act N Terrorize Act Consumable Desecrated TCs (each gated to Hell, dropping Worldstone Shards) and the Sunder Charms TC. Blank in all 1,251 other rows. |
Quest gates
| Column | Meaning |
|---|---|
QuestFlag / QuestFlagEx | Reserved for quest-stage-gated TCs (drop only after a specific quest reaches a specific state). 0 rows use these in shipped data — the columns are present in the schema for engine flexibility but no live TC sets them. |
Engine-computed and structural
| Column | Meaning |
|---|---|
*ItemProbSum | Engine convenience field showing the sum of Prob1–Prob10 for the row. Always derivable from the data; the leading * marks it as reference-only output, not author-input. |
*ItemProbTotal | Engine convenience field showing ProbSum + NoDrop (the denominator for positive-Picks rolls). |
*TreasureClassDropChance | Engine convenience field showing the per-pick chance of any drop (ProbSum / (ProbSum + NoDrop)) before player-count reduction. |
*eol | End-of-row marker, always 0. Common to most .txt tables; reference-only, no gameplay effect. |
Item-code grammar in slots
Slot values use one of three forms.
Base-item code — a 3- or 4-character code from armor.txt, weapons.txt, or misc.txt. Examples: gld (gold), tes (Twisted Essence of Suffering), r12 (Sol rune), weap75 (a level-75-tier weapon-pool code resolved by itemtypes), armo75, cm1 (Annihilus base), cjw (Colossal Jewel base).
TC name — the Treasure Class of another row in this file. The engine resolves recursively. Common patterns: Act N (H) Equip A/B/C (per-act equipment pools), Act N (H) Good (high-tier item pools), Act N (H) Junk (low-tier filler pools), Andarielq Item (H) Desecrated A (boss-Terror sub-TC), Ancient Statue 1 through 5 (Colossal-Ancients portal-token sub-TCs).
Suffixed code — a base code or TC name followed by a comma and a modifier. The supported suffix observed in shipped data is mul=<n> (multiplier), used to scale gold drops on boss TCs: gld,mul=2048 in Diablo (H) means the gold drop is multiplied by 2048.
Worked example: Andariel (Terror Zone, Hell) drops a portal token
The chain that resolves when Hell-difficulty Andariel is killed in a Terror Zone, walking from her monstats row through three TC layers to a final item.
The destination of this chain is the Ancient Statue portal-token family. The portal to the Reign-of-the-Warlock Colossal Summit is opened by a Horadric Cube recipe in cubemain that consumes one of each of the five Ancient Statues (ua1 + ua2 + ua3 + ua4 + ua5 = Talic's Anguish + Korlic's Pain + Madawc's Ire + Bul-Kathos' Nightmare + Worusk's End → Red Portal, lvl=137). Each terrorized Hell act boss drops the matching act's statue (mostly; the rolls also produce adjacent-act statues at 5% each, see Step 4), so opening one portal requires kills across multiple bosses.
Step 1: Andariel's monstats row names a Desecrated TC. Andariel's TreasureClassDesecrated(H) column reads Andarielq (H) Desecrated A. The "Desecrated" suffix is the engine's internal name for Terror Zone (the column applies only when the area is currently terrorized).
Step 2: The Desecrated wrapper TC fires one guaranteed sub-TC pick.
| Column | Value |
|---|---|
Treasure Class | Andarielq (H) Desecrated A |
group | 20 |
level | 74 |
Picks | −1 |
NoDrop | 0 |
Item1 / Prob1 | Andarielq Item (H) Desecrated A / 1 |
Picks = −1 means exactly one guaranteed pick. With only one item slot and Prob1 = 1, every kill yields one resolution of Andarielq Item (H) Desecrated A. NoDrop is irrelevant in negative-Picks mode.
Step 3: The Item sub-TC rolls a wave of 7 picks against a weighted pool.
| Column | Value |
|---|---|
Treasure Class | Andarielq Item (H) Desecrated A |
Picks | 7 |
NoDrop | 57 |
Item1 / Prob1 | Act 3 (H) Equip B / 57 |
Item2 / Prob2 | Act 3 (H) Good / 9 |
Item3 / Prob3 | tes / 3 |
Item4 / Prob4 | Ancient Statue 1 / 1 |
ProbSum is 57 + 9 + 3 + 1 = 70. Each of the 7 picks rolls against a denominator of ProbSum + NoDrop = 70 + 57 = 127 at /players1, so each pick has these per-roll chances:
- Act 3 (H) Equip B: 57/127 ≈ 44.9% (recursively resolves into a specific armor/weapon drop)
- Act 3 (H) Good: 9/127 ≈ 7.1% (high-tier item pool)
tes(Twisted Essence of Suffering, Andariel's quest essence): 3/127 ≈ 2.4%Ancient Statue 1: 1/127 ≈ 0.8%- NoDrop: 57/127 ≈ 44.9%
Across 7 independent picks, the per-kill expected number of Ancient Statue 1 drops is 7 × 1/127 ≈ 5.51%. At /players7 the effective NoDrop drops to 57 × (57/127)^3 ≈ 5.15, the denominator becomes 75.15, and the per-kill expected number rises to 7 × 1/75.15 ≈ 9.32%.
Step 4: The Ancient Statue 1 TC resolves to one of three portal tokens.
| Column | Value |
|---|---|
Treasure Class | Ancient Statue 1 |
group | 41 |
level | 92 |
Picks | 1 |
NoDrop | 0 |
Item1 / Prob1 | ua1 / 18 |
Item2 / Prob2 | ua2 / 1 |
Item3 / Prob3 | ua3 / 1 |
ProbSum = 20, NoDrop = 0, Picks = 1. Every reach of this TC produces exactly one of three misc.txt portal tokens, with terrorized Andariel weighted toward the Act 1 token (since this chain runs out of Ancient Statue 1, which is keyed to her act):
ua1(Talic's Anguish, the Act 1 portal token): 18/20 = 90%ua2(Korlic's Pain, the Act 2 token): 1/20 = 5%ua3(Madawc's Ire, the Act 3 token): 1/20 = 5%
Terrorized Duriel goes through Ancient Statue 2 (Act 2 weighted), Mephisto through Ancient Statue 3 (Act 3 weighted), Diablo through Ancient Statue 4 (Act 4), Baal through Ancient Statue 5 (Act 5). To assemble one portal, a farmer needs one of each — so realistic farm plans hit all five terrorized act bosses, with the Act-1-token bottleneck being terrorized Andariel since she's the only source of ua1 at 90%.
The level=92 gate is significant: a monster reaching this TC must have monster level ≥ 92. Andariel's natural Hell level is 75, below 92. The Terror Zone penalty-level formula for act bosses (max(min(99, clvl+5), scalingLevel)) bumps her up only when the player's clvl is high enough, so at clvl < 87 a terrorized Andariel still can't reach this drop.
Worldstone Shards are a separate mechanic. Despite the visual similarity (both are act-keyed quest consumables that drop from terrorized monsters), the five Worldstone Shards (xa1–xa5, Western / Eastern / Southern / Deep / Northern, used to terrorize an entire Act) reach the drop pool through a different family of TCs: the five Act N Terrorize Act Consumable Desecrated rows, with Picks = 1, NoDrop = 6000, noAlwaysSpawn = 1, and ConditionCalc = cond('Difficulty', hell). That pool is referenced from terrorized Champion-Unique, Super-Unique, and Herald sub-TCs only — the five act-boss desecrated chains never route to it. Hell-difficulty terrorized act bosses drop portal tokens (Andariel only, via Ancient Statue 1 as shown above) but do not drop shards.
Cross-references
monstats— theTreasureClass*columns name TCs from this file. Standard, Champ, Unique, Quest, Desecrated, and Herald variants per difficulty.superuniques— theTC,TC(N),TC(H), and Desecrated columns name TCs from this file.monlvl— the per-level monster scaling that feeds into thelevelgate.levels— areaMonLvlcolumns determine the monster level the engine compares againstlevelhere.misc,armor,weapons— the terminal item codes referenced inItem#slots come from these tables.itemtypes— referenced when anItem#slot uses a pool code likeweap75orarmo75; the itype-level + tier resolution lives there.gems— rune codes (r01throughr33) used in TCs that drop runes.Properties.txt— used by mod-bearing items but not by TC slots directly; TCs are about which items drop, not what mods they roll.ItemRatio.txt— defines the base item-quality ratios (magic/rare/set/unique) that theUnique/Set/Rare/Magiccolumns on this file override.Skills.txt— referenced indirectly via items inmisc.txtthat grant skill charges; not by TC slots directly.