No pity. No failstacks. No protection. Every attempt is a pure roll. Failure costs currency only — items are never destroyed or downgraded.
One shared ladder for gear (paid in Scrap) and enhancements (paid in Dust / Essence / Ink). Same success rates, different currencies. Attempt cost scales with the item's tier (2026-07-31): the T10 column is the hour-priced ladder unchanged, and lower tiers are discounted on the measured income curve — Cost(rung, T) = max(1, round(base × income(T) / income(10))) — so the time price of a rung is the same at every tier. Measured income at 30 battles/h (dismantle-everything basis): Scrap 16.7 → 201/h and Dust/Essence/Ink 1.32 → 19.71/h from T1 → T10 (×12.0 / ×14.9). All 360 attempt rows (4 categories × 9 rungs × 10 tiers) are authored in codex/grading.csv, generated by tools/gen_grading.py in dfmc-client; soul bundles in codex/soul_grading.csv (souls have no tier axis and are untouched).
Gear (Scrap per attempt)
| Rung | Success | T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| →Common | 100% | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| →Uncommon | 90% | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 4 |
| →Rare | 70% | 2 | 2 | 2 | 3 | 3 | 4 | 6 | 6 | 7 | 10 |
| →Epic | 50% | 2 | 4 | 5 | 8 | 9 | 11 | 17 | 19 | 21 | 30 |
| →Legendary | 35% | 5 | 7 | 10 | 16 | 19 | 22 | 34 | 38 | 43 | 60 |
| →Abyssal | 20% | 12 | 17 | 22 | 37 | 44 | 51 | 80 | 88 | 99 | 140 |
| →Divine | 8% | 15 | 22 | 29 | 47 | 57 | 66 | 102 | 114 | 128 | 180 |
| →Primordial | 3% | 18 | 27 | 35 | 58 | 70 | 80 | 125 | 139 | 156 | 220 |
| →Void | 0.5% | 18 | 27 | 35 | 58 | 70 | 80 | 125 | 139 | 156 | 220 |
Enhancements (Dust / Essence / Ink per attempt — identical grid per material)
| Rung | Success | T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| →Common | 100% | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 |
| →Uncommon | 90% | 1 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 5 |
| →Rare | 70% | 1 | 1 | 2 | 3 | 3 | 4 | 6 | 7 | 7 | 10 |
| →Epic | 50% | 1 | 3 | 4 | 5 | 7 | 8 | 12 | 13 | 15 | 20 |
| →Legendary | 35% | 3 | 5 | 8 | 11 | 13 | 16 | 23 | 27 | 30 | 40 |
| →Abyssal | 20% | 5 | 11 | 16 | 21 | 27 | 32 | 46 | 53 | 60 | 80 |
| →Divine | 8% | 11 | 21 | 32 | 43 | 54 | 64 | 93 | 106 | 119 | 160 |
| →Primordial | 3% | 21 | 43 | 64 | 86 | 107 | 129 | 186 | 212 | 239 | 320 |
| →Void | 0.5% | 43 | 86 | 129 | 171 | 214 | 257 | 371 | 424 | 477 | 640 |
| Target grade | Success | Gear @T10 (Scrap/try) | Gear cumulative expected @T10 | Enh. @T10 (material/try) | Enh. cumulative expected @T10 |
|---|---|---|---|---|---|
| Common | 100% | 2 | 2 | 2 | 2 |
| Uncommon | 90% | 4 | 6 | 5 | 8 |
| Rare | 70% | 10 | 21 | 10 | 22 |
| Epic | 50% | 30 | 81 | 20 | 62 |
| Legendary | 35% | 60 | 252 | 40 | 176 |
| Abyssal | 20% | 140 | 952 | 80 | 576 |
| Divine | 8% | 180 | 3,202 | 160 | 2,576 |
| Primordial | 3% | 220 | 10,535 | 320 | 13,243 |
| Void | 0.5% | 220 | 54,535 | 640 | 141,243 |
python tools/statmodel.py grids). Void gate alone: expected 44,000.
No pity anywhere. Costs were tier-flat until 2026-07-31; measured income scaling (×12 Scrap, ×15 materials T1→T10) meant a T1 attempt cost 12–15× the time an endgame attempt did, and grading was the only Scrap sink that ignored tier while crafting (25×T) scaled. The tier grid above holds hours-per-success constant across every tier instead; the odds curve still carries the sink.Class souls only — grading applies to souls slotted into the character's eight gear slots; creature-side souls do not grade. A class soul's grade is independent of the source creature's quality grade and is retained through the source line's advancement. All souls start Worn. SoulMult = 1 + (1/9) × (grade# − 1) multiplies the soul’s output (passive magnitude / granted move power) — Worn ×1.00 → Void ×2.00, nine equal steps, rebased 2026-08-05 from ×0.05/step which topped out at ×1.45. Which grade that reads depends on the kind of soul. A CLASS soul (CLS-*) uses its own graded field, upgraded through the ladder below. A CREATURE soul has no such field and never did — it reads the source creature’s quality grade, inherited from the egg. Creatures are not upgraded with resources; they are bred and hatched, so that lever is raised by breeding for a better egg, never bought. Until 2026-08-05 creature souls read the class field, which is unset on them, so every creature soul computed as Worn however good the creature was. LIVE on release since 2026-08-05 (0.32). See Equipment for the combined stage×grade surface. Each attempt costs the fixed four-currency bundle authored per step in codex/soul_grading.csv (Worn → Common: 30 Scrap + 2 Dust + 2 Essence + 2 Ink), and every currency in the bundle is required — there is no substituting one for another, so 5,000 Scrap and no Dust is refused “NOT ENOUGH DUST” (client clsGradeStep(), worker rollBundle()). The split keeps the old income-rate weights (15 Scrap : 1 Dust : 1 Essence : 1 Ink). Same success ladder as gear. Ichor excluded — the renamed Food is battle-earned and belongs to the breeding-and-hatching economy, not the sinks.
| Target grade | Success | SoulMult | Bundle per try (every currency required) | Cumulative expected Scrap / each of Dust, Essence, Ink |
|---|---|---|---|---|
| Common | 100% | ×1.11 | 30 Scrap · 2 Dust · 2 Essence · 2 Ink | 30 / 2 |
| Uncommon | 90% | ×1.22 | 30 Scrap · 2 Dust · 2 Essence · 2 Ink | 63 / 4 |
| Rare | 70% | ×1.33 | 60 Scrap · 4 Dust · 4 Essence · 4 Ink | 149 / 10 |
| Epic | 50% | ×1.44 | 90 Scrap · 6 Dust · 6 Essence · 6 Ink | 329 / 22 |
| Legendary | 35% | ×1.56 | 150 Scrap · 10 Dust · 10 Essence · 10 Ink | 758 / 51 |
| Abyssal | 20% | ×1.67 | 240 Scrap · 16 Dust · 16 Essence · 16 Ink | 1,958 / 131 |
| Divine | 8% | ×1.78 | 360 Scrap · 24 Dust · 24 Essence · 24 Ink | 6,458 / 431 |
| Primordial | 3% | ×1.89 | 540 Scrap · 36 Dust · 36 Essence · 36 Ink | 24,458 / 1,631 |
| Void | 0.5% | ×2.00 | 1,200 Scrap · 80 Dust · 80 Essence · 80 Ink | 264,458 / 17,631 |
tools/codex_tables.py.Inherited from the egg. Multiplies Attack, Defense, Utility, and HP. Never Speed.
| Worn | Common | Uncommon | Rare | Epic | Legendary | Abyssal | Divine | Primordial | Void |
|---|---|---|---|---|---|---|---|---|---|
| ×0.84 | ×0.88 | ×0.92 | ×0.96 | ×1.00 | ×1.04 | ×1.08 | ×1.12 | ×1.16 | ×1.20 |
Wild eggs cap at Legendary as eggs, but the hatch roll's +4 upside means a wild Legendary egg can still produce Abyssal 9% / Divine 1.5% / Primordial 0.5% / Void 0.1% hatchlings — above-Legendary creatures remain effectively a breeding pursuit. Void vs Worn = 43% more stats at identical species, level, and gear.
Ruling reversal, from a playtest report: the 07-29 tier-flat call let endgame income trivialize low-rung grading and undercut the tier-scaled sinks. Attempt cost now carries a Tier column in codex/grading.csv (360 rows), anchored so the T10 column is the approved hour-priced ladder unchanged and every lower tier pays the same time per rung on the measured income curve. The forge's grade surcharge derives from the same ladder at the recipe's tier, so forging can never become the cheap route at any tier — the invariant holds by construction.
Equipped gear never appears in the bag, so the upgrade panel could not reach it. Clicking an equipment slot now offers ATTEMPT UPGRADE on the currently equipped piece: the same grade ladder, costs and success rolls as a bag attempt, resolved in place. Sockets and the scroll follow the item through the promotion (the socket identity key carries the grade, and the promotion migrates it) — this also fixed a pre-existing bug where a bag item's sockets and scroll were silently orphaned by a successful grade upgrade.
The target decides, and Overall Power breaks the tie. Optimize For maximises the chosen metric, but on a slot where that metric cannot tell the candidates apart it falls back to overall power instead of leaving the slot alone.
Client: optScore2() and the candidate loop in optBuildPlan(). Probe: tools/probe_optfallback.py — BEFORE 6/6 (asserting the defence slots are skipped under ATK), AFTER 7/7.
The equipment header carries AUTO-OPTIMIZE: it proposes the strongest legal loadout from what the player owns — gear slots and tags, plus a global re-assignment of gems and runes drawn from the bag and from everything currently socketed on equipped pieces. The displayed POWER number is the single metric; slots that could host several stats resolve to whichever combination of piece and stones scores highest. Hard rules: stat-match (a stone only enters a host of its own base stat), class-locked weapons are never proposed, creatures, souls and scrolls are never touched, stones on unequipped inventory gear are not cannibalized, and ties keep the current piece so a second run proposes nothing. Nothing changes without the preview's confirmation; the preview states the exact inventory delta and is blocked by the inventory guard if the bag cannot absorb it.