D2RDrops

The tabs this page names are the atlas's: open the atlas.

Method: where these numbers come from

Everything numeric here is computed from the game's own data files — levels.txt, monstats.txt, TreasureClassEx.txt, superuniques.txt, monumod.txt — extracted from build 3.3.93847, Reign of the Warlock data set. No figure is copied from a guide — the four speed tabs (IAS, FCR, FHR and FBR) are the one exception, naming the public work their frame counts and sequence tables rest on in their own note strip, not here. The order below: how the tables are resolved, the four mechanics every tab shares, one section per tab that needs one, then what is left out.

Three things are hand-kept rather than computed, stated in full here and cross-referenced everywhere else. Rune trade value (Pul = 1.0, reviewed 2026-08-29) and the Terror Zone rotation groups (a community-published list; the composition is server side, not in the game files) are the first two. The third is one exception shared by four tables, not four exceptions: the Bases tab's runeword base trade values (src/base_value.py), the Magic Items tab's magic item trade values (src/magic_value.py) and the skills that sell line both tabs carry, over the 14 class-item families (src/skill_value.py), and the Rare&Craft tab's verdicts, one table per slot (src/belt_value.py, bow_value.py, head_value.py, jewel_value.py, ring_value.py, amulet_value.py, necrohead_value.py, grimoire_value.py, armor_value.py, orb_value.py). Same kind of knowledge, hand-curated community trade judgement, each printing the date a human last reviewed it: 2026-09-05 for the first two, 2026-09-07 for the third, and on the Rare&Craft tab itself, beside each slot's corpus, for the fourth. A fifth table of the same kind, src/rare_value.py, decides which rare families the two in-game loot filters hide; it prices nothing and feeds no table here, so its reviewed date prints in the filters' generated README.txt instead.

These constants are hand-typed in the engine as well, and none is a table read, because no file in the game data carries them: the ladder season the runeword and treasure-class gates are read at (15, printed in the masthead); the resistance a boss enchantment adds (Fire, Cold and Lightning Enchanted +75, Stone Skin +50, Magic Resistant +40 to fire, cold and lightning); how many modifiers a unique boss draws (1 in Normal, 2 in Nightmare, 3 in Hell — the pool itself is read from monumod.txt); the printed names of those modifiers; the defence ethereal adds to an armour, half again its base defence (+50 %, rounded down before enhanced defence multiplies it — Blizzard's Arreat Summit, Item Basics), which is what lets a Rare & Crafted body armour card print what its base can reach; the two units a poison is kept in, 25 frames a second and a rate in 256ths of a point a frame, which the Poison tab computes in; and the zones left out of every ranking — the Uber zones, the three summits and Duriel's Lair, an editorial list; and the Poison tab's three ceilings — 999 damage on one typed line, 99,999 for one hit and 9,999 a second — editorial bounds too, set above anything an item's tooltip or a build the tables allow can reach. All but the last two are the game's own engine rules, documented by the community rather than shipped in a table; the last two are this atlas's own choice. So is the run model every zone score is built on, named once in the engine and printed in the formula on Where to Farm: 22 white kills per pack at density 700 plus 6 pack members, a rune weight of 40, a kill-time multiplier that stops at 1 / 0.22, an immune family at 0.25 of a kill's time, 22 s to reach a zone with a waypoint (12 with Teleport, 28 without one), and 0.35 s a kill (0.28 with Teleport).

How the loot tables are resolved

Every monster points at a treasure class: a weighted roll between gold, junk, equipment, "good" (jewelry, gems, runes) and a chance to drop nothing. Those entries usually point at further treasure classes. The cache resolves the whole chain under the group/level rule: when a TC belongs to a group, the game swaps it for the one in that group with the highest level at or below the monster's level. That is why an alvl 85 zone in Act I drops the same items as one in Act V.

In Nightmare and Hell an ordinary monster's level is the zone's (MonLvlEx), not monstats.txt's: whites at alvl, champions alvl+2, unique packs and super uniques alvl+3. Act bosses are the exception, keeping their own monstats.txt level, so theirs is max(alvl, Level): Mephisto 87, Diablo 94, Baal 99. Three quest bosses sit between the two rules: Radament and Nihlathak spawn at max(alvl, Level) and take the super unique's +3 on top, and The Summoner keeps the act-boss rule with nothing added -⁠- no table tells him apart from the other two, so that one is typed by hand, on a published level pair. That is the level the published calculators use, and the level at which the twelve anchors under "Finding one item" reproduce. Normal follows its own rule, below.

Validation. The engine reproduces the community's published figures to within 0.1 %: Pul from a Hell Bovine is 1 in 121,300 here against 1 in 121,304 published; Ber 1 in 730,549 against roughly 1 in 730,000. Everything is at /players 1. The six-object drop cap is modelled — a monster keeps at most six objects, gold and junk included, picks rolled in order, so the last branch loses out. The Countess rolls items before runes, which takes her runes from 2.27 to 1.87; the community estimates ~1.85. Duriel rolls close to nineteen objects and keeps six.

Normal

Normal is read from the same tables as Nightmare and Hell, under three rules of its own. Who spawns: a Normal zone's ordinary monsters come from levels.txt's mon1..25 and its champion and unique packs from umon1..25, two lists that differ in some zones; Nightmare and Hell draw both from nmon1..25. At what level: in Normal a monster spawns at its own monstats.txt Level, whatever the area says, and champions add 2 and unique packs 3 to theirs, so a Normal zone has no single drop level: the tables print the range its families span beside the area level (the Halls of the Dead Level 1 is area level 12 with every family at 15). Every Normal figure on every tab is resolved at those levels. How many boss modifiers: one, from a pool of 12 (see Immunities below).

Three tabs leave out what the difficulty shown cannot produce, rather than list it as impossible, and Normal is simply where that removes the most. Find Item offers only the unique and set items a zone or named target of that difficulty can drop, Bases only the bases its zones drop white, and Magic Items only the curated combinations it can generate. Each list is the engine asked once when the cache is built, over every zone of the difficulty at its three spawn tiers and every named target. An item chosen in one difficulty that another cannot drop returns to the tab's prompt there, and comes back on switching; typed by its exact name, the search's No match line says which difficulties drop it. The Terrorized columns model Hell only.

Immunities: base, and conditional

A monster is immune once its resistance reaches 100. Two sources:

Champions draw from a separate five-entry pool containing none of these enchantments. Super uniques carry fixed modifiers, listed in the Named Targets tab and already applied to their resistances there.

Breaking an immunity

A correction that persists in a lot of guides: only Conviction and Lower Resist break an elemental immunity, at 1/5 effectiveness. Amplify Damage and Decrepify do the same against physical, also at 1/5. Everything else — -X% to enemy resistance on gear, Infinity's own line included, facets, Cold Mastery — applies only after the immunity is gone. Cold Mastery did break immunities at D2R's launch; that was patched out.

So Amplify Damage on a physically immune monster leaves it at 80 % resistance, not 0. And a second breaker does not stack for free: Conviction and Lower Resist together both run at 1/5, even where one alone would have sufficed.

Sunder Charms are the other route, pulling the immunity down to 95 % resistance. The monster stays flagged immune, so reductions keep applying at 1/5 on top. Magic is the only type with no reduction at all: nothing touches magic resistance, and Black Cleft is the only tool that exists.

Magic find

The field takes your magic find exactly, any whole number from 0 to 1000. No brackets to fall between, and no figure here is shipped per bracket: everything magic find can move is recomputed from what you type. It applies the published diminishing-returns curve — effective MF = MF × 250 / (MF + 250) for uniques, × 500 / (MF + 500) for sets, × 600 / (MF + 600) for rares, and no curve at all on a magic roll — and the three figures beside the field are the first three, truncated the way the game truncates them. So 150 MF is worth +93 % on a unique, 400 MF +153 %, 1000 MF only +200 %. The multiplier reaches only the "items" half of the loot, which counts equipment only — armour, weapons, rings, amulets, charms and jewels: not runes, gems, potions or Uber keys. Going from 0 to 150 MF is therefore worth more than 150 to 400, and it shifts the ranking toward high-alvl zones rather than rune zones.

Which tabs move with the field, stated once here. itemratio.txt carries a magic-find column for no quality at all, so the four curves are the community-documented ones named above: the 250 and the 500, the 600 on a Rare roll, and on a Magic roll your magic find in full, with no curve. The Magic Items tab follows the field. A blue is what is left when the unique, set and rare rolls all fail and the magic roll succeeds, so magic find pulls both ways: on a base whose magic roll can fail it raises the chance several times over, and on a ring, amulet, jewel or charm, or any champion or unique-pack drop, whose magic roll cannot fail, it lowers it a little, because a better quality takes the item first. The Bases tab's white-drop odds stay at 0 % magic find: a white base is what is left when no better quality rolls, so magic find can only push that chance down, and 0 % is an honest upper bound rather than a guess standing in for a missing setting.

Teleport

The Teleport checkbox changes three constants: the trip to the zone, the travel time between packs, and the sprawl penalty on outdoor zones, which drops to a quarter of its full effect. Without teleport the big open zones of Act III and Act V collapse down the ranking; with it they climb back. After the damage type itself, this moves the ranking most.

On the FCR tab Teleport is offered to every class, not only the Sorceress. skills.txt gives it the ordinary cast animation, so each class casts it on its own cast table and its breakpoints are that class's FCR breakpoints; an Amazon's still move with the weapon in her hand. The other seven classes are lent it by gear, read from the item tables: Enigma grants it as a skill, and uniques and a magic suffix carry charges of it, each named on the card. Its restrict column is blank, so it cannot be cast shapeshifted: a Druid in a wereform returns to human form first, and the human table is the one read.

Finding one item

A treasure class does not drop a Harlequin Crest. It drops a Shako, and the game rolls that Shako's quality — unique, then set, then rare, then magic, the first success cancelling the rest. Three things have to go right, and the Find Item tab shows all three.

1. The base item drops. Most equipment is never named in the tables: probability goes to group tokens like armo60 and weap87, an item type plus a three-level band ending at the number. Which base wins inside a band is a fixed per-item-type frequency, taken from the community’s published treasure-class documentation: 3 for ordinary weapons and armour, 2 for Assassin Claws, 1 for every other class-restricted type, 1 for wands/sceptres/staves. Not the base's own rarity, which only gates whether it can spawn from the band. The band is engine behaviour, not a table entry, but the data pins it: armor.txt's quality levels fall into exactly the 29 buckets {3, 6, … 87} — exactly the 29 armo tokens the tables use. Type membership comes from ItemTypes.txt's Equiv1/Equiv2 closure. This step is what makes an item undroppable from a given monster: a Diadem is quality level 85, putting Griffon's Eye in the 87 band, and Mephisto's chain tops out at 78. Baal's reaches it, at 1 in 43,981 per kill at 0 % magic find — recorded, not validated, since no calculator publishes a figure for it.

2. That base rolls a quality, on the game's own itemratio.txt parameters:

chance = (Ratio − (mlvl − qlvl) ÷ Divisor) × 128
chance = chance × 100 ÷ (100 + effective magic find)
chance = max(chance, Min)
chance = max(chance − chance × field ÷ 1024, 128)   // the TC's quality field
P(this quality) = 128 ÷ chance                      // integer division

Effective magic find is MF × 250 ÷ (MF + 250) for uniques, MF × 500 ÷ (MF + 500) for sets. Every division truncates toward zero, in that order; it only matters where a divisor is 2 or 3 — sets, and the twelve item types only one class can use — but there it matters. The itemratio.txt row is the Uber one for an exceptional or elite base and the Class Specific one for those twelve types, derived from the type-equivalence closure reaching ItemTypes.txt's clas parent — not its Class column, which sits one field past StaffMods and would wrongly flag wands, staves, sceptres and knives as class-restricted. qlvl is the base item's own level: 58 for a Shako, not the 69 the fan sites quote, which is the unique's level and decides only eligibility.

field is TreasureClassEx.txt's Unique/Set/Rare/Magic column: subtractive, applied last, so a higher number is better odds. Inheritance takes the largest value per field along the path to the leaf, per the table's own documentation — "If there is both a value given for the TC as a whole and for a specific entry, the game will use the largest of those two. This also applies if a sub TC has values for it." Blank reads as 0, what ordinary monsters carry; champion and unique-pack tables carry 800, one act boss table 983, the Countess 883. 800 leaves 224/1024 of the base chance and 983 leaves 41/1024, so an act boss's equipment roll is roughly 5.5× a champion or super-unique table's. The max rule earns its keep on Pindleskin: his super-unique header writes 512/654, but his equipment mass flows through Act 5 (H) Uitem C, whose 800/800 is larger and applies.

3. The game picks which unique, in proportion to rarity, among only those whose own level is at or below the monster's. A successful roll on a base with no eligible unique becomes a rare, not a different unique, so the eligible ones' chances add to exactly the roll chance and never more. A Sacred Armor at monster level 99 has two — Tyrael's Might at rarity 1, Templar's Might at 8 — the 1 in 9 the community quotes for Tyrael's, derived here rather than copied.

End to end on the shipped tables: a Harlequin Crest from Hell Mephisto (mlvl 87) is 1 in 1,779 at 0 % magic find, 1 in 1,040 at 100 MF, 1 in 844 at 200 %; from Pindleskin (mlvl 86), 1 in 22,782 at 0 % and 1 in 13,325 at 100 %. No calculator quotes a per-kill number for a super unique, so Pindleskin's figure is pinned only by this project's own tests. These figures, and Baal's 1 in 43,981 above, are the engine's own; Find Item reads the same odds through a payload rounded to four significant digits, so its table can print a figure one or two higher -⁠- 1 in 1,780 for the Mephisto one.

What was validated, on the Classic/Expansion tables. The public calculators model data/base, not the tables this app ships, so validation runs there. Twelve published per-boss figures (Harlequin Crest, Arachnid Mesh, Mara's Kaleidoscope, Andariel's Visage, each from Hell Mephisto, Diablo and Baal, players 1, 0 % magic find) reproduce at a uniform 0.8944-0.8948 of the published "1 in N" — mean 0.8946, spread 1.00047 — so this engine is about 12 % more generous, 1.118× on the probability, by the same factor on all twelve. Three further anchors land exactly: the magic find response, published 1:1,841 at 0 % against 1:873 at 200 %, ratio 2.1088 against this engine's 2.1086; Tyrael's Might's rarity share, exactly 1/9; and eligibility — Arachnid Mesh is level 87 and Pindleskin's zone rolls uniques at 86, so it cannot drop from him. Two honesty notes: the per-boss figures are user comments on the item pages carrying them, not an editorial table, and the players 1 setting is inferred, supported by those two reproducing exactly under it.
The 12 % is the calculators' bug, not this engine's. One line of the open-source Kotlin calculator behind those tables, TreasureClassPathAccumulator.kt: picks > 1 -> calculateProbabilityForPicks(p, if (picks > 6) 6 else picks). A treasure class with Picks above six is computed as if it had six, the seventh deleted before it is rolled — and every Act boss has Picks=7. Everything else agrees with this engine (entry-TC-only group/level upgrade, NoDrop in the denominator, quality fields merged by max, negative Picks forking with probability 1), which is why two passes checking this engine against itself found nothing. The game keeps that pick: the community’s published magic-find guide measured Mephisto at 5.45 objects/kill at players 1, matching this engine's seven-picks-capped-at-six model (5.454) and not the six-picks one (4.875). The ratio follows from published/engine = 6 ÷ (7 × keep), keep being the cap's keep-fraction for that boss's table: 0.9582 for Mephisto, Diablo and Baal predicts 0.8945; Andariel's 0.9961 predicts 0.8605, measured exactly on Harlequin Crest from her, engine 1 in 1,563 against a published 1 in 1,817. Matching the calculators would mean capping Picks itself rather than the drop count, lowering every Act-boss figure by about 11 %. Deliberately not done: this engine models the game, not the calculators that approximate it.
Two data sets, on purpose. Blizzard changed the tables between the classic set the calculators model and the one shipped here, so the two legitimately disagree per item. Mephisto's NoDrop is 15 there and 33 here, which alone moves Charged Essence of Hatred from Mephisto from 1 in 12.08 (validated against a published 1:12.1) to 1 in 8.69 (recorded only). Across the twelve anchors the shipped tables' ratio to the same published figures ranges 0.9125-0.9782 (mean 0.9425, spread 1.072) rather than sitting at one number. Every absolute per-kill, per-run, hours-to-first-drop and terrorized figure carries a † — not for this, but because the base-item band step above is reconstructed from published per-type frequencies rather than read from a table column.
What is left out. Champion packs are computed per monster at area level + 2 — how a level-87 item becomes reachable in a level-85 zone — and shown only as a champion pill in the "Who can drop it" column. They are not in the per-run figures, because levels.txt gives a pack-slot count and no column splitting a slot into champion or unique, so a champion count would be a number nobody can check. Six group tokens the tables name — bow15, bow21, bow42, bow66, bow75, bow84 — match no item in this data set, and their probability evaporates. Every figure is a repeat kill, so the one-time quest tables (Mephistoq, Durielq) are unused; Andariel is the exception, her repeatable column being itself named Andarielq (N)/Andarielq (H). Everything is /players 1. A handful of uniques — the quest-reward bases, the Amulet of the Viper, and Annihilus and Hellfire Torch, whose item level of 110 sits above every monster level in the game — have no droppable path at all, and are reported as such rather than left off a table silently.

Bases for runewords

The Bases tab reads the two base-item tables the Find Item tab does — armor.txt and weapons.txt — plus runes.txt, the runeword table, and automagic.txt, the inherent-automod table an item's auto prefix column points at. misc.txt is excluded, and that is proved at build time: all 169 of its typed rows cap at zero sockets once their item type's ceiling applies, so no misc base could carry a runeword, and the build raises if a patch changes that.

Ladder season 15. This atlas is computed for ladder season 15, and its market is ladder and non-ladder combined. A runeword or a unique/set item can carry two ladder columns in the game's own data: a first season, when it starts existing at all, and a last ladder-only season, after which it becomes available off-ladder too — it never stops existing, and the second column plays no part in whether the item is in scope here (the "Ladder" column's own tooltip on the cards below has the mechanics). At season 15 no runeword in this data is still ladder-only: the seven season-1 runewords — Flickering Flame, Mist, Obsession, Pattern, Plague, Unbending Will, Wisdom — opened up after season 2, Mosaic after season 12, and the eight season-3 ones — Hysteria, Mania, Metamorphosis, Ground, Temper, Hearth, Cure, Bulwark — after season 14, with patch 3.3. Thirteen items are still ladder-only: the nine season-15 uniques (Gravenspine, The Battlebranch, Bane Ash, Pluckeye, Piercerib, Blinkbats Form, The Ward, Manald Heal, Bloodletter) and the four Angelical Raiment set pieces.

A row becomes a candidate when it is spawnable, carries no quest flag, and its socket ceiling — the smaller of its own socket count and its item type's cap, the number Larzuk's reward maxes an item out to — reaches at least 2. Of 525 rows read, 422 survive (252 weapons, 170 armour); the type's cap is what actually limits 15 of them, all Sorceress orbs.

It fits a runeword when its item type, or an ancestor through the same closure the Find Item tab uses, is among the runeword's allowed types and not its excluded ones, and its socket ceiling reaches the rune count: 4,991 pairs pass. Inside every runeword-and-family group a base is dropped whenever another in that group is at least as good on every axis — damage, requirements, speed, defence, block, effective level — and strictly better on one: 542 pairs fall, leaving 4,449 kept, 391 distinct bases retained by at least one runeword and 31 of the 422 candidates retained by none. The two Assassin claw types are merged into one family here — the only hand-made merge in the treatment — because the split tracks no distinction a runeword or a player cares about. One axis deliberately does not read "more is better": whether the socket ceiling lands exactly on the rune count. Larzuk's reward gives the socket maximum, so overshooting wastes it, while landing exactly on it turns a lucky white drop straight into the finished runeword. 1,867 of the 4,449 kept pairs are exact.

Where to farm a white one. Finishing a runeword needs the base to drop white first — normal or superior, none of unique, set, rare or magic. A quality field of 1024 means "always this quality" by TreasureClassEx.txt's own documentation, and every champion and unique-pack item table carries exactly that on the magic field, so neither can ever drop a white base — not rarely, exactly never. Measured at every build, in all three difficulties: every regular-tier group-token leaf instance inherits no quality bonus at all, while every champion-tier and unique-pack-tier instance inherits the guaranteed-magic value, no exception in either group (the Bases tab's own note prints the counts). Every named target's table carries that value on every leaf a candidate could reach, with two exceptions whose tables are partly ordinary — The Cow King and The Smith. Over all 422 candidates the worst case from any champion, unique pack or other named target is a flat zero; those two are not.

These odds are at 0 % magic find, an honest upper bound rather than a guess — the mechanism is stated once under Magic find. And no candidate base is ever a treasure-class leaf in this data, on any zone table or any named target's, so every one reaches the ground through the group-token band step under "Finding one item" — which is why every white-drop figure here carries a †.

The trade-value tiers. This tab's value column is the hand-kept table described at the top of the page. Three tiers, most to least wanted: Sought, Useful, No value. The two blanks earlier reviews carried (No market yet, for an item-type family nobody had priced; Not yet reviewed, for one base a data fix had only just brought into scope) are gone as of the 2026-09-05 review, which reached every base either tab can price and gave each a verdict instead of a placeholder standing in for review debt. That review read the community marketplace (5 September 2026), one shop's own base and item catalogues, and a community item database, and cross-checked all three against one marketplace snapshot also collected 2026-09-05 — a one-off record, not refreshed since and not queried live, so nothing on either tab depends on it staying reachable.

A same-day lineage rule sits on top of those tiers. A base's normal, exceptional and elite forms — Kite Shield, Dragon Shield, Monarch — count as one lineage, and once its elite member is Sought, that is where the trade happens: a Useful verdict on a normal or exceptional relative usually reads as stale evidence rather than a second live market, so it drops to No value. Four kinds of base are excused: one too new this ladder season for the market to have found it; one whose own reason names a runeword or requirement no Sought relative offers; one the engine's comparison drops as dominated but the market buys anyway; and a class item, whose whole point is the class it is locked to, so an elite sibling never dominates it — which is why Assault Helmet and Savage Helmet keep their Useful tier under the Sought Conqueror Crown. Every base the rule drops still carries its own reason on the tab.

Typing an item-type or class word into the search box instead of a base's own name — "wand", "shield", "paladin" — switches the tab into a list of every base that word names, sorted by value tier then farm hours, reading the identical figures computed above one base at a time.

Valuable magic items

The Magic Items tab answers what neither of the previous two can: which blue item is worth farming, and what the real odds of one are. Everything numeric comes out of magicprefix.txt and magicsuffix.txt, plus gamble.txt for the "how do I get one" text. Only which combination is worth farming, and why, is community knowledge — curated in src/magic_value.py, inside the same one exception the other two trade tables sit in.

The affix level formula. The gate an affix's level column is checked against is not the item's level but its affix level, and the two differ by the base's own quality level:

if ilvl > 99:             ilvl = 99
if qlvl > ilvl:           ilvl = qlvl        // applied BEFORE the branch below
if magic_lvl > 0:         alvl = ilvl + magic_lvl
elif ilvl < 99 - qlvl//2: alvl = ilvl - qlvl//2
else:                     alvl = 2*ilvl - 99
alvl = min(alvl, 99)                        // integer arithmetic throughout

A community item-generation reference carries the ilvl-vs-qlvl floor verbatim and was read from this machine; the pseudo-code including the else half is published in two further references, both of which returned HTTP 403 here, so that half is cited rather than read. What validates the formula on this data is a published item-level table that was read: its skiller item levels — 61 for a 31-35 life suffix, 77 for 36-40, 91 for 41-45 — reproduce exactly, because a Grand Charm's qlvl is 1 and its affix level tracks its item level one for one. A Small Charm's qlvl is 28, which is why the 3/20/20's "needs item level 61" anchor also lands: alvl(61) = 61 − 14 = 47, and the 16-20 life of Vita row on scha is level 47.

How many affixes, and which. A published affix reference, read from this machine, verbatim: "only one suffix: 50%, only one prefix: 25%, prefix and suffix: 25%". Those sum to exactly 1, so "every magic item carries at least one affix" is a property of the outcome space rather than a separate rule. The pick within a slot is frequency-weighted over the rows that are spawnable, carry a nonzero frequency, sit at or below the item's affix level, and type-match the base through the same Equiv1/Equiv2 closure the other two tabs use.

maxlevel. The community position — cited by reference, since that host fails TLS verification from this machine — is that the game does not read this column, and that is the reading used: MAXLEVEL_INERT. Both readings are computed and compared rather than argued about. At the row that changes most, prefix pool lcha at affix level 91, ignoring the column keeps 101 rows worth 247 frequency points against 99 rows worth 245 honouring it, dropping Shimmering twice, at two different levels. Across every (pool, affix level) pair any curated row uses, 53 of the 91 rows would see their resolved affix's share move at all (median about 0.9 %, worst 22.0 % on Gloves +2 Javelin and Spear Skills / 20% increased attack speed) — almost always because another row sharing that pool and level lost a gated competitor and every survivor's share shifted, not because the row's own affix was dropped.

Roll windows. A curated combination usually wants a specific roll — 45 life out of of Vita's 41-45 range — and the odds of that exact roll are uniform over the integer range. Two stated assumptions, neither cited because no published source documents either: the within-range roll is uniform, and an affix carrying two mods (Fine rolls both attack rating and maximum damage) rolls each independently, so wanting the top of both multiplies the two chances.

The quality roll is the same Unique → Set → Rare → Magic sequence "Finding one item" documents, on the same parameters, quality fields still applying last. Two type gates off ItemTypes.txt matter here. Rare is blank on all five charm types (charms can never be rare) and 1 on ring/amulet/jewel/every ordinary equipment type. Magic is not its mirror, and reading it as "can this roll magic" is the trap: it is blank on every ordinary equipment type, which plainly do drop magic. It means "always at LEAST magic", on the eleven rows carrying it — the charms, rings, amulets, both jewels and two magic-only quiver types — where there is no normal outcome to fall into. Champions and unique packs count here, unlike white bases: their item tables carry the same Magic = 1024 that makes a white base impossible on the Bases tab, which makes the magic roll here certain, so where that tab's champion column is a flat zero this tab's is its best number. These hours follow the magic find you type, in both directions — see Magic find above.

Two things the numbers do that the tab's layout does not hide, both measured before curation and neither a bug. First, a row can reach zero zones and only named targets: the 45-life skiller needs item level 91, which no Hell zone reaches even at its unique-pack ceiling of 88, so its only sources are Hell Diablo and Hell Baal. A published item-level table additionally names Nihlathak, and the disagreement is stated rather than smoothed over: this engine puts every super unique at its zone's area level + 3, leaving him under 91, against his own monstats.txt Level(H) of 92 — three readings, three answers. That +3 convention is not validated against a published super-unique figure, because none exists: no calculator quotes a per-kill number for a super unique. What is checked is its arithmetic and the eligibility boundary it produces — Pindleskin, at Nihlathak's Temple's area level 83, comes out at 86, and Arachnid Mesh, item level 87, is exactly zero from him and non-zero from Mephisto one level higher. Second, a higher item level can be worse, because the affix pool only grows with affix level: the 3/20/20 small charm's affix chance falls from roughly 3.5×10⁻⁶ at its lowest reachable item level to about 2.9×10⁻⁶ at item level 99, so a lower-area-level Hell zone can out-farm a higher one for it. The tab's card states both per row from its own numbers — see its collapsed "combinations examined and left off" note for the 21 (plus 3, Reign of the Warlock's own Warlock class) skill tabs considered for the Grand Charm skiller list, and every other combination set aside.

The category search described under "Bases for runewords" works here too, over this tab's own combinations and the per-kill odds above.

Rare&Craft

The Rare&Craft tab covers the slots with a priced corpus behind them: rare and crafted belts, rare bows and crossbows, rare circlets, druid pelts and barbarian helms, the crafted blood helm, the rare jewel, rare and crafted rings and amulets, rare necromancer heads and grimoires, eight rare elite body armours, rare sorceress orbs, rare necromancer wands, Warlock daggers and scepters, rare and crafted gloves and boots, rare Assassin claws, rare javelins, and rare throwing knives and axes. The belts came first, 392 sellers' asks; each slot's corpus was read independently by two reviewers who then settled every point they disagreed on, and the tab names each corpus and its reviewed date. Each family is tiered against its own asks: Sought is the top quarter, No value is under one Ist, and a stat is at least Useful when a quarter of sellers or more list it and items with it do not ask less, or when it raises the price a lot without reaching the top quarter. The tab prints those tiers, how many listings carry each stat, and the median asking price — of every listing and of those with the item's best stat, to the nearest half rune — which is what sellers ask and never what an item sells for: the few buyer offers bid about a tenth of it for the same belt. The crafted recipes and the modifiers each one always adds are read from cubemain.txt; only the verdicts are hand-kept, the belts' reviewed 2026-10-09. Where a rare belt drops is not computed yet: the drop odds of a rare with a given set of affixes are their own piece of work.

One slot's cards and the two in-game loot filters disagree on purpose, and it is the only place they do: the ten lowest Assassin claws — Katar through Fascia, the ones the game never gives an Assassin skill — carry cards here and are hidden by both filters. The market does price them, which is why they have cards; they are left off the filters all the same, so the ground stays quiet for the eleven that can roll a skill. Every other rare card with a Sought or Useful row is shown by both filters, and every card with neither is hidden.

Uniques and Sets

What it is. Two tabs that list every unique item and every set piece the game tables hold, so the market verdicts being collected land on a card that already exists. 810 unique cards come from 416 items of uniqueitems.txt: every item a player can hold, the cube's Sunder charms and Colossal Jewels included and the 6 quest items left out. Wherever the base can be ethereal the item has an ethereal card of its own (369 of them; rings, amulets, jewels and charms never are), and the 5 cards whose every copy is ethereal have no plain twin, since the game makes none. The eight Rainbow Facets are told apart by their element and the moment their skill fires; the Hellfire Torch is one card per class, its class roll read off the table, the Warlock included. 36 sets and 144 pieces come from sets.txt and setitems.txt, each piece with the lines it gains as more of its set is worn and its set's whole bonus table. Every line on both tabs is worded by the chain the Affixes tab uses; a line naming a group of the game's own, rather than one property, lists what the group can give.

Patch 3.4. Read off news.blizzard.com, "Diablo II: Resurrected Ladder Season 16", "Patch 3.4 Notes" on 2026-11-07: 18 uniques, the 4 pieces of Isenhart's Armory and the runeword Eternity change, on Ladder and offline only. Each changed item is two cards: Legacy, the version these tables describe, and New v3.4, marked Ladder S16. The new version's stats are not in the game tables yet and are not guessed. Eternity is not shown until the runeword market.

What it does not say yet. No price, no verdict and no best stat: the market is being collected, and every such cell reads not available until it is. A card's description says only what the tables establish until then.

Skills that sell

What it is. The Bases and Magic Items cards both carry a "Skills that sell" line for the 14 class-item type codes a +skill roll can land on, covering 159 spawnable base items. 83 curated rows: 31 Sought and 52 Useful, naming 57 distinct skills. Reviewed 2026-09-07, printed for the same reason the other two dates are — hand-curated market judgement goes stale.

What is derived, and it is more than on the other two tabs. 1.16 added the game's own skill tables to data/ — skills.txt, skilldesc.txt, playerclass.txt and the English string table — so every NAME on that line is a table read rather than a typed string. All 240 player skills of the eight classes resolve through skilldesc.txt's own str name key into the string table, and that is what the line prints. It matters more than it sounds: skills.txt's skill column is the INTERNAL name and differs from the displayed one for 27 skills, so the game's Phoenix Strike is stored as Royal Strike and its Fissure as Eruption. Which skills CAN roll is derived too: ItemTypes.txt's StaffMods column decides whether a single named skill is possible at all — blank for 4 of the 14 types, which is why "+3 Multiple Shot" on an Amazon bow does not exist — and the skill-tab bonuses come from magicprefix.txt's skilltab rows and automagic.txt's inherent automods, under the same classspecific rule the affix pools use.

What is curated, and how honestly. The tier, the roll and the evidence. Each row carries the roll the evidence actually showed rather than a target — where no priced line named a figure at all, 19 of the 83 rows, the row is marked "MIN" and the tooltip says why — and each carries its evidence class, so hovering a roll tells you whether it rests on a priced buyer line, a priced seller ask, a mention carrying no number, or a table read. 2 of the 14 families have nothing Sought at all, and the card prints that out loud with the measurement behind it: silence in a market floors a row at Useful and is never read here as proof of worthlessness. The market side is one saved sweep of the community marketplace collected 5 September 2026 and never refreshed, with four further community references read on 2026-09-07; no trade site was contacted for this pass.

Affixes

What it is. The Affixes tab writes out every magic prefix and suffix a player can meet, in the words the game itself prints, with the full range each entry rolls rather than the roll on any one item. 990 entries over 449 distinct names — 517 prefixes and 473 suffixes — carrying 1138 lines between them.

Why there is more than one row per word. Because a word is not worth the same everywhere. Of the Leech is 4-5 % life stolen on a weapon and 3 % on gloves; of Alacrity arrives at level 25 on a weapon and level 43 on gloves. One row per NAME would keep the word and throw away the answer, so there is one row per entry the tables carry. An entry identical to another in every column the tab shows would be folded — 0 are today — because a row printed twice with the same numbers reads as a rendering fault rather than as data. And only the rows the game rolls are listed: a row the tables mark spawnable but give no frequency weighs nothing in the pick, so it is left out here exactly as the Magic Items tab leaves it out.

Where an affix can land is derived from the base items, not from the type codes. magicprefix.txt’s itype columns name ancestors — weap, armo and misc overlap by design — so a filter built straight on them reads as noise. Every base item’s type-equivalence closure is tested against the entry’s allowed and excluded types instead, and what survives is bucketed into the 13 equipment slots the filter offers. The two level columns stay apart for the reason the Sets tab keeps its own two apart: where an affix starts appearing and what a character needs to use it are different questions.

Nothing here is typed in English either, and nothing had to be taught: the same chain the Sets tab walks phrases all 1175 modifiers those rows carry across 90 property codes, with 36 printing nothing because the game folds a cold length into the cold damage line beside it. 1 is listed as spawning nowhere at all: its affix level is above any item level the game reaches, so nothing can carry it. It is reported rather than dropped, for the same reason the hidden count is.

Runewords

What it is. The Runewords tab counts the runes you hold, in one of five profiles kept between launches, and lays out every runeword against them: Ready when you hold every rune the recipe asks, One short and Two short when that many runes are missing, Browse all for the lot. Each runeword is read alone against the whole profile, so two Ready cards may need the same rune, and a rune a recipe asks twice is counted twice — Infinity's two Ber against one held is one short, never ready. Each runeword's name is the game's own string table's, never runes.txt's comment column: that column still calls Hysteria and Mania “Hustle (armor)” and “Hustle (weapon)”. Blizzard renamed them with Reign of the Warlock (the community runeword references), so their cards say so and a search for “hustle” still finds both.

Every figure on a card is a table read. The recipe and its order, the number of sockets (the number of runes, which the base must have exactly), the item types and the level (the highest rune's own levelreq in misc.txt) come from runes.txt. The stats are the finished item as the game shows it: the runeword's own lines and what each of its runes gives in that kind of item (gems.txt, whose three columns are a weapon, a helm or body armour, and a shield), added together. The same stat is summed — Smoke's +250 Defense vs. Missile and its Nef's +30 draw one line, +280 — the four resistances and the four attributes are drawn as one line only when all four are equal (itemstatcost.txt's display groups), and the lines come in the game's own order, its descpriority column, worded through properties.txt and the game's string table the way the Affixes tab words an affix. A runeword that can be made in two kinds of item — Dragon, Dream, Fortitude, Phoenix and Spirit — prints one list for each. A line marked varies rolls between its two numbers when the runeword is made. The bases named are the first the Bases tab keeps for that runeword, elite first. The ladder line is read off runes.txt's season columns; at season 15 every runeword can be made off-ladder, and Mosaic alone cannot be made on a ladder character.

What it does not say yet. The value block — the expert verdict from Trophy to Charsi Food, the median asking price, and what the base, ethereal, the sockets and the roll do to it — is empty until the runeword market is collected, by the owner's decision. No rune value is printed and no sort reads one: the atlas's own rune value table (Pul = 1.0, used to rank zones on the Runes tab) carries no reviewed date yet. There is no cube on this tab. A rune count stops at 999, an editorial bound: runes stack in the shared stash and no table caps them. The rune images are the game's own rune art.

IAS

The frames one attack takes, from the class’s own attack animation, the weapon’s speed, the IAS you type and the skills and slows you set. Only attacks are listed; the table shows every breakpoint of that attack.

Mercenaries. A mercenary is timed like a player: its own attack animation in animdata.d2 (the token is its monstats.txt row’s), the weapon’s speed and the same formula, which reproduces every row of the Amazon Basin’s tables for the Rogue, the Desert Mercenary and the two-handed Barbarian. The Desert Mercenary’s Jab is the sequence monstats.txt names for it in monseq.txt, two hits; the Barbarian’s attack hits twice per swing. The weapons each can hold are read off its row’s hand types, with one engine rule no table carries: the Rogue takes the Amazon’s bows, the Desert Mercenary refuses the Amazon’s spears and javelins. Nothing publishes the Iron Wolf’s attack or the Barbarian with a one-handed sword, and the dual-wield Barbarian’s Frenzy has no record at all, so it shows a dash. A mercenary also waits for its AI between swings, at least one frame (monstats.txt, aidel); the frames shown are the swing itself. A Paladin’s Fanaticism reaches his mercenary: skills.txt marks it an aura, and its attack-speed line, unlike its damage line, is not halved for an ally, so the mercenary gets the Paladin’s own figure. Its hit recovery is read off animdata.d2 too, each token’s get-hit record.

FCR

The frames one cast takes at your faster cast rate, read off the class’s own cast table. Only casts are listed, Teleport for every class; the band below lights the breakpoint you reach.

FHR

The frames you lose each time you are hit, read off the class’s own hit recovery table at your FHR, for the form and, where the table depends on it, the weapon you hold.

FBR

The frames one block takes, read off the class’s own block table at your FBR; a Paladin reads the Holy Shield table when it is ticked.

Poison

What it is. The Poison tab adds up the poison of the items you wear. You type each item's poison line as its tooltip prints it — “+175 poison damage over 6 seconds” is 175 and 6 — and the tab answers three figures: the damage per second, what one hit does in total, and how long it lasts; and, on every row, what that item brings to the first two. Under the bonuses, two more lines take the skills whose poison joins your items' on the same hit. It opens on an example of eight real items, every figure read off uniqueitems.txt and magicprefix.txt / magicsuffix.txt.

How several poisons combine. Every item keeps its poison as a rate — 256ths of a point each frame — and a length in frames. When you hit, the game adds every item's rate, and adds every item's length and divides it by the number of items. One item counts once however many poison lines it carries: its tooltip already shows them added into one line, and that line is what to type. A jewel, gem or rune in a socket is an item of its own — but the socketed item's tooltip already shows its gems' poison added into its own line, so type the item's line without them and each gem on a row of its own, or the tab counts one source where the game counts several. So one more item always raises the damage per second, but a short, weak one pulls the averaged length down and can lower what one hit does in total — the reason the tab prints both, and marks every row raises or lowers.

To within one point. A tooltip rounds its damage to the nearest point — a Chipped Emerald's 9.96 prints 10 — so a typed line does not say the stored rate exactly; of the rates that print what you typed, the tab takes the one whose exact total is closest to it, and computes in whole numbers the way the game does. The total of one hit is therefore exact to within about one point per item.

Three ceilings, the tab's own. A typed line over 999 damage counts for nothing and says not counted: no item's tooltip prints that much, so it is a typing slip. Past 99,999 damage for one hit or 9,999 a second the card prints dashes instead of a figure, and so does a row whose item alone passes 9,999 a second — no build the tables allow comes near either, and the usual cause is a length typed too short. Each is refused rather than held at its bound, because a figure held at a bound is one no item gives.

The two bonuses. +% poison skill damage raises every item's rate alike; −% enemy poison resistance is read against a monster with none, and the game stops it at −100 %, which doubles the damage. Because both scale every item the same way, neither can turn an item that raises a figure into one that lowers it. A skill's tooltip already carries your +% poison skill damage, so the tab applies it to the items only.

The skills that join it. Three attack skills add their poison to your items' on the same hit, and the tab has a line for them: Poison Dagger, and the javelin of Poison Javelin and of Plague Javelin — the javelin only. The skill's rate joins the items', and its length joins theirs before the game divides by the number of items, so the skill lengthens every item's poison. You type the skill's line as its tooltip prints it, both ends of its range, and the tab counts the middle of the range. Venom has a line of its own, because it stays on from hit to hit: it adds its rate, and the game then makes your items' poison last Venom's 10 frames (0.4 seconds) instead of their own — but an attack skill keeps its own length, so Venom beside Poison Dagger keeps the items' poison where Venom on a plain attack cuts it. Treachery casts level 15 Venom on any class: 305–325 poison damage over 0.4 seconds. The tab reproduces the community's two published examples exactly, on the same three items: with Poison Dagger, 13,944 to 14,482 damage over 348 frames; with Venom as well, 24,699 to 25,941 over 350.

The poison skills that never join it. Five more skills poison a monster, and none has a line, because the game never adds their poison to your items': Rabies, whose poison is dealt apart from the werewolf's ordinary bite that carries your items'; Poison Nova and Poison Explosion, cast poison that carries none of your items'; Poison Creeper and a skeletal mage, another creature's attack rather than yours. The clouds of the two javelins are the same. When one of these and your items' poison meet on a monster, nothing adds up: the stronger poison per second replaces the weaker, length and all, and a weaker one changes nothing.

What is not computed. Poison does not tick on a frame another hit lands, and multi-hit attacks such as Strafe or Multiple Shot divide the lengths differently in community testing. The rule the tab computes is the engine's own as the open reconstruction of the game's source, D2MOO, gives it (SUnitDmg.cpp, Missile.cpp) — a reconstruction of the classic engine, since the current game's source is not public — and it reproduces the community's published three-item example exactly: rates 291, 500 and 143, lengths 275, 250 and 179 frames, 853 damage over 234 frames.

Stated limitations

The in-game loot filters

The two loot filters offered above the Bases tab's search box — Farm and Early-season — are generated from this project's own tables (src/base_value.py, src/magic_value.py, data/rotw/*.txt), the same figures the rest of this page reads; nothing in either is hand-typed. There is one way to get one into the game, and it is three steps: copy it here, then in the game Esc → Loot Filter → Import from Clipboard, then Confirm. Ctrl+Alt toggles the active filter on and off in game, and holding Alt shows everything on the ground regardless of it.