← Game Design DocumentHomeChecklist

Stat & Equipment Tables

Numerical source of truth for all equipment, modifier, and progression values · validated against the damage formula at levels 1 / 25 / 50 / 75 / 100 · includes acquisition & upgrade economy · July 2026

0 — Core formulas (revised)

Creature stat (Atk/Def):  Stat = (Core + Σ TagStats) × AxisMult × QM
                              Core = 0.6 × 7.5 × (level + 25)     AxisMult = (3 × axisGrade + 5) / 8
                              (STAT_SCALE = 7.5; k = 0.60 since 2026-08-02 — grade-5 creature at level 100: Core 562.5 × AxisMult 2.50)
Creature Speed (flat):             Speed    = axisGrade          (1-10, equals axis grade)
Creature HP:                       HP       = ((4 × level + 35) × (5 + DefenseGrade) / 11 × 7.5 + Σ Heart tags) × QM
Creature quality multiplier:       QM       = 0.80 + 0.04 × qualityGrade      (applies to Atk/Def/HP — NEVER Speed)

Character Attack:   ((Σ ItemStats(Attack)  + 0.25 × Core) × ClassRating × (1 + Σ increased%) + 188) × ClassSoulMult   ClassRating = (3 × stageStat + 5) / 8
Character Defense:  ((Σ ItemStats(Defense) + 0.25 × Core) × ClassRating × (1 + Σ increased%) + 188) × ClassSoulMult   (+188 = innate floor, post-multiplier)
                    ClassRating never falls below 1.00 (grade 1 ×1.00, grade 5 ×2.50, grade 10 ×4.375), so gear always delivers at least its printed value.
                    ClassSoulMult = the class soul's grade multiplier (clsSoulMultOf, Worn ×1.00 → Void ×2.00); it multiplies the finished number, floor included.
                    No RiskPremium (removed 2026-08-02(b), CHAR_RISK = 0).
                    Characters carry 25% of Core as a level term — before July 2026 a character's Attack did not scale with level at all.
Character HP:       ((4 × level + 35) × (5 + stageDefStat) / 11 × 7.5 × 1.5 + Σ flat HP items) × (1 + soul HP%) × ClassSoulMult   (no squish term since 2026-08-02(b))
Character Speed:    Grade_Speed for the class stage (classes.csv) — a per-class, per-stage value like Attack and Defense, never a constant. No gear sources; only in-battle stat stages move it.
Boss HP:            5 × Floor + 150   (explicit budget per boss in bosses.csv — not the creature HP formula)

Damage:  RawDamage   = ((2 × Level / 5 + 2) × MovePower × Attack / Defense) / (130 / 7.5) + (15 + Attack / 50) / hits
         FinalDamage = RawDamage × Synergy/Anti × Random(0.9–1.1) × (1 + Σ increased%) × Π(more)
         No same-type damage bonus and no type-effectiveness multiplier — there is no type chart.
         Type interaction lives only in each move's Synergy and Anti clauses.
The earlier Battle System formula (g×6+2)×L/100+g×3 was inconsistent with its own level-100 table; the revised base-stat formula above reproduces the committed table exactly (grade×30+50 at level 100) and keeps grade ratios level-invariant. HP was re-curved linear-in-level so turns-to-kill stays constant while leveling.

Move power bands

BandPowerCooldown
Light500
Standard800–1
Heavy1202
Nuke1603–4
Stat aggregation (multiplier model). ItemStat = (implicit + Σ gems + Σ Flat enchants) × (1 + Σ rune % + Σ Increased% enchants) × (1 + (LOCAL soul − 1) + Σ More% enchants). Scrolls roll ONE enchantment on apply. The CLASS comes from codex/enchants.csv (weights Flat 45 / Increased 40 / More 15), and the roll can only take the stat the host item itself carries — a Defense item never rolls Attack. The VALUE comes from codex/scroll_bands.csv (3.5 scroll rework, 2026-09-05): the SCROLL's tier picks the class band (T1 Flat 4–7, Increased 10.0–20.0%, More 12.0–22.0% … T10 Flat 40–76, Increased 13.0–27.0%, More 16.0–29.0%) and the scroll's grade bends the draw toward the top, position = u^(1/K) with K 1.0 (Worn) … 5.0 (Void). The host item's tier and grade do not enter. More is additive with the item's LOCAL soul multiplier rather than a separate factor. Duplicates are allowed and stack inside their bucket. There is no separate reroll action: applying another scroll over a socketed one rerolls it, drawing a fresh class AND value, and the enchantment it replaces is destroyed. Scrolls can never be unsocketed; gems and runes always return to the bag intact. Three maximum More rolls from T10 scrolls reach +87%, flat enchants add into the base band. Character and creature stats and damage: see the formulas block above (Core 0.6 × 7.5 × (level + 25), rating (3g + 5) / 8, divisor 130 / 7.5, flat term 15 + Attack/50, innate floor +188, random band 0.9–1.1). The figures that follow are the July 2026 history of how those numbers were reached (Core k later went 1.0 → 0.60 and RiskPremium and the HP squish were removed, 2026-08-02(b)). Validated fully-maxed: striker vs char wall 15. MAGNITUDE REWORK + BALANCE PACKAGE (July 2026): every item implicit in items.csv was multiplied by 3 and the class multiplier by 2.5 (denominator 20 -> 8), a combined stat scale of 7.5; Core, the innate floor, HP and the damage constants (divisor 130 -> 17.33, flat 2 -> 15) all scale with it, so the rework alone leaves combat identical and only makes the numbers legible. On top of that: Core k 1.6 -> 1.0, tag implicits x3 again (3.0 -> 27.0 total), the innate floor 10 -> 25 pre-scale, the character level term and risk premium above, character HP x1.5 with the squishiness term, and a wild Attack tag budget from floor 11.1, creature mirror 16.0, HP-stacked creature wall 19.3.

1 — Equipment base type implicits (grade × level tier)

Flat values, always active — rounded half-up and lifted so every +1 tier and every +1 grade strictly increases the value (each cell is at least 1 above its left and upper neighbour; the base curve applies wherever it already separates). Formulas: Main Hand 16.5 × tier × GF (flat Attack, all classes) · Off Hand 4.5 × tier × GF flat Attack for Mage / Archer / Brute / Assassin lines · defensive off hands (Warrior shields, Professor tomes) 6.6 × tier × GF flat Defense — a fifth armour piece · Armour 6.6 × tier × GF · where GF = 1 + 0.12 × (grade − 1).

Main hand implicit — flat Attack (16.5 × T × GF)

Weapon tiers: every 10 levels (Level req 1 / 10 / 20 / … / 90); tiers drop at floor (crafting was removed 2026-10-01). 3 art identities per hand — bands T1–3 / T4–6 / T7–10 track the class stages; within a band, tiers are prefixed Veteran's / Champion's / Tyrant's and reuse the band image. The grid below is the flat Attack each tier gives at each grade.

Grade \ TierT1
1–10
T2
11–20
T3
21–30
T4
31–40
T5
41–50
T6
51–60
T7
61–70
T8
71–80
T9
81–90
T10
91–100
Worn173350668399116132149165
Common1837557492111129148166185
Uncommon20416182102123143164184205
Rare22456790112135157180202224
Epic24497398122147171195220244
Legendary265379106132158185211238264
Abyssal285785114142170199227255284
Divine306191121152182213243273304
Primordial326597129162194226259291323
Void3469103137172206240275309343

Off hand implicits

Offensive off hands (Mage / Archer / Brute / Assassin): flat Attack, 4.5 × tier × GF — same grid as the Attack/Defense gems below. Defensive off hands (Warrior shields, Professor tomes): flat Defense, 6.6 × tier × GF — same grid as armour above. Every class line totals the same 33 × T × GF gear budget; sword-and-board splits it toward Defense.

Armour implicit — flat Defense (Head / Chest / Gloves / Feet, per piece)

Grade \ TierT1
1–10
T2
11–20
T3
21–30
T4
31–40
T5
41–50
T6
51–60
T7
61–70
T8
71–80
T9
81–90
T10
91–100
Worn7132026334046535966
Common8152230374452596774
Uncommon9162533414957657482
Rare10182736455463728190
Epic11202939495968788898
Legendary122132425363748495106
Abyssal1323344557687991102114
Divine1424364961738597109121
Primordial15263952657891103116129
Void16274155698296110124137

Accessory implicits

Signet (+Attack): 6.0 × tier × GF. Ward retired — Defense on choice slots is dominated by HP at the max-build anchor (see Section 10 note).

Grade \ TierT1
1–10
T2
11–20
T3
21–30
T4
31–40
T5
41–50
T6
51–60
T7
61–70
T8
71–80
T9
81–90
T10
91–100
Worn6121824303642485460
Common7132027344047546067
Uncommon8152230374552606774
Rare9162433414957657382
Epic10182736445362718089
Legendary11192938485867778696
Abyssal122131415262728393103
Divine132233445566778899110
Primordial1424354759718294106118
Void15253750627587100112125

Relic — flat HP: 9.0 × tier × GF

Grade \ TierT1
1–10
T2
11–20
T3
21–30
T4
31–40
T5
41–50
T6
51–60
T7
61–70
T8
71–80
T9
81–90
T10
91–100
Worn9182736455463728190
Common102030405060718191101
Uncommon1122334556677889100112
Rare1224374961738698110122
Epic13274053678093107120133
Legendary142943587286101115130144
Abyssal153146627793108124139155
Divine173350668399116132149166
Primordial1835537188106123141159176
Void1937567594112131150168187
Speed has zero gear sources. No implicit, gem, rune, enchantment, or skill-tree node grants Speed. Turn order is fixed at draft by axis grade (creatures) and the constant 15 (character); only temporary in-battle stat stages can shift it. This preserves clean speed tiers — a Speed-grade advantage cannot be bought.

2 — Tag base type implicits (creature equipment)

Fang (+Creature Attack) and Carapace (+Creature Defense): 54 × tier × GF. Heart (+Creature HP): 110 × tier × GF — see Heart below for why it is not the same number.

Fang / Carapace

Grade \ TierT1
1–10
T2
11–20
T3
21–30
T4
31–40
T5
41–50
T6
51–60
T7
61–70
T8
71–80
T9
81–90
T10
91–100
Worn54108162216270324378432486540
Common60121181242302363423484544605
Uncommon67134201268335402469536603670
Rare73147220294367441514588661734
Epic80160240320400480559639719799
Legendary86173259346432518605691778864
Abyssal93186279372464557650743836929
Divine99199298397497596696795894994
Primordial1062123184235296357418479531058
Void11222533744956267478689910111123

Heart — flat HP

110 × tier × GF, about 2× the Fang / Carapace grid — multiply the table above by 2.04. A point of Creature Defense is simply worth more than a point of Creature HP: the Defense tag is added to Core before the axis multiplier (1.0–4.375) and quality, while the HP tag is flat. At the old equal coefficient, measured in effective HP against the real damage roll, Carapace beat Heart by 1.46× to 2.66× at every level and every Defense grade tested, so Heart was never a pick. The doubled coefficient buys parity in EFFECTIVE durability, not double the wall: at Defense grade 9 the two are within a point of each other at Lv 40. They now trade places on two axes — low-Defense creatures and early floors favour Heart (grade 2: +40% vs +29%; Lv 10: +17% vs +8%), high-Defense creatures and deep floors favour Carapace (Lv 80: +26% vs +21%). Revised 2026-07-27; the previous rule was that HP is no cheaper per point than any other stat, which is what made Heart a dead item.

3 — Gems (flat, own grade × own level tier)

Garnet (+Attack), Onyx (+Defense), Bloodstone (+HP): all 4.5 × tier × GF. Local on character gear, Personal on Tags. Speed cannot appear on any modifier.

Attack / Defense gem (Garnet / Onyx)

Grade \ TierT1
1–10
T2
11–20
T3
21–30
T4
31–40
T5
41–50
T6
51–60
T7
61–70
T8
71–80
T9
81–90
T10
91–100
Worn591418232732364145
Common6101520253035404550
Uncommon7111722283339455056
Rare8121824313743495561
Epic9132027334047536067
Legendary10142229364350586572
Abyssal11152331394654627077
Divine12172533415058667583
Primordial13182635445362717988
Void14192837475666758494

HP gem (Bloodstone)

Same grid as the Attack / Defense gems above (4.5 × tier × GF).

4 — Runes (%, own grade × own level tier)

6% + 3% × (grade − 1) + 0.6% × tier (2026-10-23, C4; was 12% + 1.2% × (grade − 1)). Additive with other increased% within an item (Local) or on the creature (Personal via Tags). Ruin (+% Attack), Aegis (+% Defense), Vitality (+% HP).

Grade \ TierT1
1–10
T2
11–20
T3
21–30
T4
31–40
T5
41–50
T6
51–60
T7
61–70
T8
71–80
T9
81–90
T10
91–100
Worn6.6%7.2%7.8%8.4%9.0%9.6%10.2%10.8%11.4%12.0%
Common9.6%10.2%10.8%11.4%12.0%12.6%13.2%13.8%14.4%15.0%
Uncommon12.6%13.2%13.8%14.4%15.0%15.6%16.2%16.8%17.4%18.0%
Rare15.6%16.2%16.8%17.4%18.0%18.6%19.2%19.8%20.4%21.0%
Epic18.6%19.2%19.8%20.4%21.0%21.6%22.2%22.8%23.4%24.0%
Legendary21.6%22.2%22.8%23.4%24.0%24.6%25.2%25.8%26.4%27.0%
Abyssal24.6%25.2%25.8%26.4%27.0%27.6%28.2%28.8%29.4%30.0%
Divine27.6%28.2%28.8%29.4%30.0%30.6%31.2%31.8%32.4%33.0%
Primordial30.6%31.2%31.8%32.4%33.0%33.6%34.2%34.8%35.4%36.0%
Void33.6%34.2%34.8%35.4%36.0%36.6%37.2%37.8%38.4%39.0%

5 — Enchantment pool

One enchantment rolls when a scroll is applied (server /api/roll, kind enchant). No Ink reroll and no reroll action: applying another scroll over a socketed one is the reroll, and the old enchantment is destroyed. The class is drawn from codex/enchants.csv (Flat 45 / Increased 40 / More 15) on the stat the host item carries (Attack, Defense or HP; Creature Attack / Defense / HP on Tags). The value comes from codex/scroll_bands.csv: the scroll's tier picks the band, the scroll's grade bends the draw, position = u^(1/K), K from 1.0 (Worn) to 5.0 (Void). The host item's tier and grade do not enter, and there is no minimum grade. Example columns show the median roll.

ClassWeightScopeT1 bandT5 bandT10 bandRare T5 scroll (median)Void T10 scroll (median)
Flat45Local / Personal on Tags (base bracket, with gems)4–720–3840–76+32+71
Increased40Local (additive % bucket, with runes)10.0%–20.0%11.3%–23.1%13.0%–27.0%+19.2%+25.2%
More15Local (multiplicative bucket, additive with the LOCAL soul)12.0%–22.0%13.8%–25.1%16.0%–29.0%+21.4%+27.3%

6 — (removed)

Refinement does not exist (D ruling 2026-08-10; purged from all text 2026-08-25). Section number kept so later references hold.

QM = 0.80 + 0.04 × qualityGrade — multiplies Attack, Defense, and HP. Never Speed (flat speed tiers are a design pillar). Wild eggs cap at Legendary; Abyssal–Void come from breeding only. Wild spawns roll their own quality once at spawn from codex/wild_quality_weights.csv (zone-banded, Legendary cap) — see the GDD wild-spawn section.

QualityWornCommonUncommonRareEpicLegendaryAbyssalDivinePrimordialVoid
Multiplier ×0.84×0.88×0.92×0.96×1.00×1.04×1.08×1.12×1.16×1.20

Void vs Worn = ×1.20 / ×0.84 = 43% more stats at identical species, level, and gear.

8 — Character stats per level (multiplier model)

Superseded by section 0 — corrected 2026-08-02. The paragraph that stood here described the PRE-July-2026 character model (ClassAxisMult = (3×stageStat+5)/20, a flat +10 floor, no level term) and was never updated by the magnitude rework. The shipped model is section 0: CharStat = (ΣItemStats + 0.25×Core) × ClassRating + 188 with ClassRating = (3×stageStat+5)/8. It also claimed Warrior and Professor run Attack 9.5 with a 2.2 off hand; items.csv authors both at Attack 16.5 main hand and a 6.6 Defence off hand, the same coefficient as an armour piece. The tier table below has NOT been re-verified and is indicative only.

TierLevelsAttack pool (Σ items)Defense pool (Σ items)
WornRareVoidWornRareVoid
T11–10294064355080
T211–2057771196590135
T321–3086115177100135205
T431–40114156237130180275
T541–50143194296165225345
T651–60171233356200270410
T761–70200271414230315480
T871–80228310475265360550
T981–90257348533295405620
T1091–100285388593330450685

Each pool is one bare loadout summed: Attack = Arming Sword + Crude Signet + Crude Signet; Defense = Kite Shield + Cowl + Padded Jerkin + Handwraps + Footwraps (each piece’s own N × T × GF grid above). Example: level 100 Archon (Atk 10), Void T10 bare set → (593 + 0.25 × 562.5) × 4.375 + 188 = 3,398 Attack before enhancements and ClassSoulMult; the same set on Sorcerer (Atk 8) → 2,847. Section 10’s MAX numbers are a July 2026 record that this bare set already passes (see its note). Generated by tools/codex_tables.py.

9 — Creature soul framework (value ranges by soul grade)

Soul grade = the quality grade of the creature the soul came from. Specific effects per species per slot (800 total) are content design; every effect's numeric budget must fit these ranges.

ScopeBudget formulaWornLegendaryVoid
Local (this item)×(1.04 + 0.02 × grade) item total×1.06×1.16×1.24
Personal (bearer)+(1 + grade)% to one stat/mechanic+2%+7%+11%
Team (all allies)+(0.5 + 0.55 × grade)% per ally+1%+3.8%+6%

10 — Validation results

Not generated (C17 sweep, 2026-10-23). These turns-to-kill figures are a July 2026 simulation record. Their scenarios (“PvE trash”, “Striker”, “Wall”, the MAX build) are not defined in any CSV or tool, and they predate the +188 innate floor and the square-root Attack / Defense ratio (T4, 2026-10-22), so they are kept as a dated record, not as current numbers. Regenerating them needs the scenario definitions written down first.

Per-unit turns-to-kill, standard spam rotation (Power 80), mean random roll, quality ×1.00, no enhancements except where stated. Char columns: on-tier Rare gear, bare (no gems/runes/enchants), Archon/Paladin stage stats. Rows predate the +10 innate floor — it shifts the char columns by ~0.5–2 turns in the character’s favour and MAX anchors by +0.2–0.3%; retained as-is (July 2026). MAX row = fully optimized level-100 builds — Void-grade T10 gear, 3 Void gems + 3 Void runes + 3 Void enchants per piece, Local/Team souls at Void soul grade (×1.45), creature quality ×1.20 — the balancing anchor for endgame.

LevelNaked mirror g6PvE trashWild retaliationStriker→WallStriker→StrikerChar→WallStriker→Char
18.86.410.312.05.6——
2512.08.015.317.66.5——
5012.88.316.719.26.731.47.2
7513.28.517.419.96.821.813.5
10013.48.617.820.36.922.313.6
MAX16.01.5———15.1—

Maxed detail: Char Attack 3,316 (Archon, 2 Team-Attack souls) · Char Defense 4,875 (Paladin, 4 Local-Def souls + Tower Shield) · Char HP 1,395 (double Relic, Vitality runes) · Creature Atk/Def 2,268, HP 1,323 (g10, Void QM, 2 tags). An HP-stacked creature wall (all-Vitality tag runes, trading away Aegis) reaches 1,879 HP / 19.3 turns vs a maxed striker — the deliberate wall premium. Ward (+Defense accessory) was retired on max-build math: swapping a maxed Relic (+401 HP) for a maxed Ward (+647 Defense) dropped a wall from 14.4 to 10.7 turns at the pre-shield anchor — the Attack/50 floor is Defense-immune and the small HP pool makes flat HP marginally stronger; Defense investment on choice slots cannot compete. The + Attack/50 damage floor is what holds maxed mirrors inside the band — without it these fights ran 58–74 turns. Progression rows are a spam-only, synergy-free floor; real rotations (Heavy/Nuke cycling, Synergy clauses, slight over-leveling) run ~40–60% faster, landing PvE trash at 3–5 and boss/wall fights at 8–12.

11 — Enhancement tier ladders

Gems, runes, and scrolls each have 10 named level tiers matching the 10 level brackets, plus a grade (Worn–Void). Full item name = grade + tier + type: "Legendary Radiant Sapphire," "Rare Elder Rune of Attack," "Void Fated Scroll." An enhancement's tier must be ≤ the gear's tier to socket.

TierLevelGemRuneScroll
11RoughFadedTattered
210CutEtchedCoarse
320PolishedCarvedScribe's
430FacetedBoundVellum
540BrilliantWardedIlluminated
650PristineChargedSealed
760FlawlessAwakenedOccult
870PerfectResonantForbidden
980RadiantAncientProphetic
1090+SublimeElderFated

12 — Materials: Dust, Essence, Ink

One flat commodity per family — no material tiers. Freely tradeable at any amount.

OperationFormulaExample
Dismantle yieldtier × grade#T10 Rare gem → 40 Dust
Craft (Worn output, chosen type & tier)6 × tierT10 Sublime gem = 60 Dust
Scroll modifier rerollnone — applying another scroll over the socket is the reroll; no Ink is charged—
Removal of socketed gem/runereturns the gem/rune to the bag intact, frees the socket—

13 — (removed)

Refinement does not exist (D ruling 2026-08-10; purged 2026-08-25). Scrap has two sinks: gear crafting (25 × tier) and gear grading (section 14).

14 — Grading up: success & cost (gear and enhancements share one ladder)

No pity. Gear pays Scrap; enhancements pay their family material (Dust / Essence / Ink). Failure consumes currency only. T10 column below; every tier is on Upgrading (codex/grading.csv).

Into gradeSuccessGear cost (Scrap) @T10Gear expected cumulativeEnhancement cost (material) @T10Enh. expected cumulative
Common100%2222
Uncommon90%4658
Rare70%10211022
Epic50%30812062
Legendary35%6025240176
Abyssal20%14095280576
Divine8%1803,2021602,576
Primordial3%22010,53532013,243
Void0.5%22054,535640141,243

One gear piece Worn→Void at T10: expected ~54,535 Scrap (~16.6 h at floor 119). One Void enhancement at T10: expected ~141,243 material (~377.5 h). The realistic endgame enhancement target is Divine (~2,576 material, ~6.9 h). Hours at 109 battles/h; model: python tools/statmodel.py grids, generated by tools/codex_tables.py.

15 — Drop tables & income

Gear drops — 10% per battle, at-floor tier

FloorsWornCommonUncommonRareEpicLegendaryAbyssal
1–3072%24%4%————
31–6055%30%12%2.7%0.3%——
61–9040%32%20%7%0.95%0.05%—
91–10030%32%24%11%2.7%0.28%0.02%

Divine, Primordial, and Void gear never drop — they exist only through the Ichor gamble. Enhancement drops: per creature defeated, rarity-scaled (codex/drop_rates.csv), 10% per battle in expectation, even split across gems/runes/scrolls, grade weights one band behind gear.

Crafting & equip requirements

RuleValue
Craft gear (Worn, chosen slot + base type)25 × tier Scrap
Craft enhancement (Worn, chosen type)6 × tier family material
Character gear equip requirementTier N needs character level ≥ (N−1)×10
Tag equip requirementTier N needs creature level ≥ (N−1)×10
Nothing is uselessAll gear → Scrap (+ Ichor at Rare+); all enhancements → Dust / Essence / Ink; every material feeds the next tier

Endgame income (floor 99, 109 battles/h)

CurrencyRateMain sources
Scrap~526/hDismantling gear drops (dismantle.csv Gear rows; a Tag also returns Essence)
Ichor~2,249/hKill Ichor (round(2 × (1 + level/100) × rarity mult)), egg and Rare+ gear dismantles
Dust / Essence / Ink~143 / 160 / 143 per hEnhancement dismantles (dismantle.csv Gem / Rune / Scroll rows)

acquisitionPerBattle (src/trader.js) × BATTLES_PER_HOUR (tools/sim_econ.mjs); bosses, first wins and shop drops not counted. Generated by tools/codex_tables.py.

16 — Progression timeline (single active character, no pity)

Not generated (C17 sweep, 2026-10-23). This timeline is a July 2026 estimate on the retired XP curve and the old income table; the current figures are the generated levelling tables on the Overview (xp-reference, xp-zones), the grading cost above and the endgame income in section 15. Kept as a dated record.

MilestoneBattles / costCasual 3 h/dDedicated 12 h/d24/7
Level 67 — Stage 3 & final advancements~885 battles10 days2.5 days1.2 days
Level 100~20,300 battles~7.5 months~2 months~1 month
Bracket 9/10 gear state (UC everywhere, Rare keys, +3)falls out of levelingdeterministic
Epic key pieces, Rare enhancements~11 Ichor + ~45 material eachweeks after hitting the wall floors
One item to Void grade~8,800 Ichor + ~43,700 Scrap expectedyears~1 year expected, p90 2+~4 months expected
Full 12-slot Void-grade gear + Void enhancements—multi-year market-aggregate goal; effectively unreachable solo
Every success gate is a geometric distribution — the p10/p90 spread on a single gate is ~22×. There is deliberately no pity, no failstacks, no soft ceiling: unlucky players buy from the market, lucky players sell windfalls, and that variance is the price-discovery engine for grade-5+ trade.

Balance backlog — assessed, not taken

Things measured and deliberately parked. Each one records what was found, what it would cost and why it is not being done yet, so the next person does not re-derive it.

Dated record — as assessed, recorded 2026-08-02 (the date on its newest row). The numbers below are what was measured then; they are not live and are not bound to the CSVs or the engine.

ItemFinding
Creature axis grades do not rise with stage
parked 2026-08-02, D: "put this in the balancing backlog, not doing it right now"
Not a missing implementation — an authored asymmetry. Reported by a player as "stats stay the same between stages". Verified three ways. DATA: creatures.csv carries one grade set per LINE, not per stage — Stormfather is 10/4/3/9 at stages 1, 2 and 3, and 99 of 100 lines are identical at every stage (mean Grade_Attack 5.66 / 5.69 / 5.69). CODE: monFromSlot() captures stage and never uses it for a stat; the [0, 0.6, 0.8, 1] stage ladder exists only for souls. CODEX: creature Atk/Def is (Core(level) + ΣTagStats) × AxisMult(grade) × QM with no stage term, while CLASSES get a per-stage row (Prophet 2/5/5 → 2/7/7 → 3/8/9), and the balance notes state that a creature being a stage ahead shows up in move power. Code and codex agree.

If it were taken: giving creatures class parity (+3 attack grades S1→S3) runs through AxisMult = (3g + 5) / 20 as a same-level buff of +64% (grade 3→6), +45% (5→8), +35% (7→10) and +0% for anything already at 10 — so it also compresses the top of the ladder. That is a 300-row creatures.csv change with a DATA_PIN advance in the same commit, and large enough to want tools/balance_*.py run before and after.

D ruling 2026-08-02: “Coralhydra is how all creatures should be.” A full proposed spread now exists at codex/proposed/creature_stage_grades.csv — a proposal only; creatures.csv is untouched.
Proposed stage spread
codex/proposed/creature_stage_grades.csv
The rule, calibrated from CORALHYDRA rather than invented. Its authored S1 sits at axis(6)/axis(9) = 0.719 of S3 on Attack and axis(5)/axis(8) = 0.690 on Defense — so S1 is 0.70 × the S3 multiplier, and S2 is the midpoint, 0.85 ×, each snapped to the nearest grade on the same AxisMult = (3g + 5) / 20 curve. Fed back through the rule, CORALHYDRA's S1 comes out 6 / 5 exactly, which is what makes this a derivation and not a guess.

Current grades are kept as S3 for every line, per D. Attack and Defense are the only axes that move: Utility is flat in CORALHYDRA, and Speed must stay flat because the GDD defines it as ungeared, unlevelled and unaffected by quality — a per-stage Speed would silently reorder turns on advancement.

Why not a flat grade delta. CORALHYDRA's S1 is literally S3−3, but the grade distribution is bottom-heavy (23 lines at Attack 3, 27 at Defense 3), so a flat −3 would collapse 63 of 100 lines to the grade 1 floor and erase the role signal that a low axis grade carries. Scaling the multiplier instead clamps only 2 of 100.

Result: mean S1→S3 Attack gain ×1.42 (min ×1.00 on the two floored lines, max ×1.55), landing beside the +45% class ladder rather than on top of it. 199 of 300 rows change; all 100 S3 rows are untouched by construction.

One thing to rule on: CORALHYDRA's authored S2 is flat with S3 (9/8), so its second advancement currently pays nothing. The rule gives it 7/7, making the ladder monotonic and every advancement felt. Taking the rule changes CORALHYDRA at S2 only; keeping the authored value means the last advancement is a move-power upgrade with no stat gain.

Changelog

2026-11-03 — the weapon-tier line no longer says craft (D 2026-11-03 codex review; dfmc-client lane codexreview-b). WIKI ONLY. Tiers drop at floor; crafting was removed from the game 2026-10-01 (record). Generated grids untouched.

2026-10-23 — hardcode-3: the last typed stat numbers are stat_model.csv rows (dfmc-client lane hardcode-3; D: “The csvs need to be the source of all truth. Hardcoded NEVER.”). Held for release 0.90. New rows: the named statuses (Status_Slagbite_Def 0.22, Status_Gravechill_Atk 0.18 / Status_Gravechill_Spd 2, Status_Cinch_Spd 3, Status_Doomrune_Dmg / Status_Warded_Dmg 0.18), the boss HP fallback for a row with no Boss_HP (Boss_HP_K 5 × floor + Boss_HP_L0 150, × Stat_Scale), the soul grade step Soul_Grade_Step 1/9 (Worn ×1.00 → Void ×2.00) and the class stage levels Class_Stage_2_Lv 33 / Class_Stage_3_Lv 66. The engine, src/power.js, the client and the worker’s class-advance door read them. No number changed. A pin that predates the row keeps the old value and names it (never a refusal); it reaches players when DATA_PIN advances and the bake runs. Gate tools/probe_hardcode3.mjs 33/72 → 72/72.

2026-10-23 — hardcode-2: the stat model and the wild HP bands are codex tables (D: “The csvs need to be the source of all truth. Hardcoded NEVER.”). New codex/stat_model.csv (Key, Value): Stat_Scale 7.5; the level core Core_K 0.6 × Stat_Scale × (L + Core_L0 25); the grade axis (Axis_A 3 × g + Axis_B 5) / Axis_D 8; max HP (HP_L_K 4 × L + HP_L0 35) × (HP_D0 5 + Def grade) / HP_Div 11 × Stat_Scale; the character Char_Core 0.25, Char_Risk 0, Char_HP ×1.5, Char_HP_Squish 0, Char_Floor 25 (+188); Cls_Soul_Top ×1.20; the damage formula’s Def_Floor 10, Dmg_Lv_K 2 / Dmg_Lv_Div 5 / Dmg_Lv_Add 2, Dmg_Div 130, Dmg_Flat_K 2, Dmg_Atk_Div 50; Heal_Frac 0.12; Tithe_Step 0.12; APVP_HP_Mult ×1.5. New codex/wild_hp_bands.csv (Floor_From, HP_Mult): ×0.6 from floor 1, ×0.7 from 50, ×1.0 from 90, ×1.2 from 110. The shared battle engine holds no number of its own: the client (boot), the worker (its bake) and the sims install both tables with setRules, and an engine without them refuses to fight. Every value is the one the code typed — a pure move, no number on this page changes (gate tools/probe_hardcode2.mjs; t4_balance, econ_bands and battle_module unchanged).

2026-10-23 — C17 part 4 (lane a8-s5-c17-tail): the balance backlog is marked a dated record. WIKI ONLY. Its table is what was measured when it was parked (2026-08-02), so it is not bound: a note above it says so and a <!-- dated:balance-backlog --> marker keeps tools/codex_sweep.py from listing its numbers as unbound. No number changed.

2026-10-23 — C17 part 3 (lane c17-gen-2): pools, grading hours, endgame income and the quality row are generated. WIKI ONLY. Section 8’s Attack / Defense pools were an unverified pre-rework table (T10 Void 229 / 183); they are now one named bare loadout summed from each piece’s own grid (Attack = Arming Sword + 2 Crude Signets, Defense = Kite Shield + 4 armour pieces), and the Archon example uses section 0’s formula (+188, ClassRating /8): 411 → 3,398. The grading prose reads the generated cumulative (54,536 → 54,535 Scrap) and prices hours at 109 battles/h on acquisitionPerBattle (Void enhancement 341.5 h → 377.5 h, Divine 6.2 h → 6.9 h). Section 15’s “~30 battles/h” income (Scrap ~150/h, Ichor ~10/h, materials ~20/h) is replaced by the trader model at floor 99 × 109 battles/h. Sections 10 and 16 carry a note: they are July 2026 records with no generator, kept as dated history.

2026-10-23 — C17 part 2 (lane c17-gen): the implicit grids and the grading table are generated from the CSVs. WIKI ONLY. The seven grade × tier grids (main hand, armour, Signet, Relic, Fang/Carapace, gems, runes) are play/app.js itemBase / runePct over items.csv Effect and grade_ladder.csv GF (all 700 matched). The grading table’s Success column reads grading.csv Gear T10 (it read soul_grading.csv, the soul ladder, which only happened to agree); the cumulative columns are Σ cost / success (Primordial and Void were 1 Scrap high: 10,535 and 54,535). The tier → level table reads items.csv Level_Req (it read the retired recipes.csv). tables marked <!-- gen:NAME --> are generated by tools/codex_tables.py from the CSVs with the engine’s own formulas (each generator cites the engine line it ports); its --check is a dfmc-client gate, so a CSV edit without --write fails the gates.

2026-10-23 — hardcode-sweep: the grade ladder and the wild Attack budget are codex tables (D: “The csvs need to be the source of all truth. Hardcoded NEVER.”). New codex/grade_ladder.csv (one row per grade: GF Worn ×1.00 → Void ×2.08, Gem_Sockets / Rune_Sockets / Scroll_Sockets, Quality_Mult QM ×0.84 → ×1.20) and codex/wild_tag_budget.csv (a wild enemy with no virtual gear: Coef 27 × T × GF of the band grade - Common to L30, Uncommon to L60, Rare above; nothing below L11). The client (GF, SLOTG, qmOf, wildTagBudget), the server power fold (src/power.js), the Auto PvP re-sim (src/apvp_sim.js) and tools/sim_t4.mjs read them; the literals are gone. Numbers unchanged (probe_hardcode_sweep 32/32; every N×T×GF item × 10 grades and the seed save’s server power identical). The constants still typed in code are listed in dfmc-client docs/hardcoded-constants-2026-10.md. Ships with the next DATA_PIN.

2026-10-23 — C4: the rune % curve widened (BACKLOG/INDEX.md § 3 Economy, card T43). Data: every rune row of codex/items.csv now reads 6%+3%×(g−1)+0.6%×T (was 12%+1.2%×(g−1)+0.6%×T); runePct parses the Effect, so no client change. Range Worn T1 → Void T10 is 6.6% → 39.0% (×5.9, was 12.6% → 28.8%, ×2.3); Void T10 is ×1.44 Legendary T10 (39.0 vs 27.0; was ×1.2, 28.8 vs 24.0). Target: the Void step costs ~128,000 Essence expected, so a Void rune has to buy a visible step over Legendary, not 4.8 points; the pivot sits at Rare (within 0.6 points of the old curve at every tier) so the mid tower, where T4 fight length was measured, keeps its numbers, and Worn/Common runes give less. Section 14 rewritten off codex/grading.csv (it still priced gear in Ichor). Gate tools/probe_c4_grids.py; write-up docs/c4-grids-2026-10.md (dfmc-client).

2026-09-30 — review drift fixes: F074, F152, F153, F154. Codex only; the page caught up with the engine. F074: section 0 printed retired values (Core 1.6, AxisMult /20, RiskPremium, HP squish, divisor 130, flat 2); it now prints the engine's coreOf 0.6 × 7.5 × (L+25), axisMult (3g+5)/8, divisor 130/7.5, flat 15 + Atk/50 (split by hits), and character Atk/Def with (1 + Σ increased%) and the class soul grade multiplier. F152: the stat-aggregation note now says the enchant value comes from scroll_bands.csv (scroll tier band, scroll grade K), not the host-based formula; the +78% figure is +87%. F153: section 5 rebuilt: Flat / Increased / More classes, scroll-band magnitudes, no Ink reroll, no minimum grade; section 12 no longer charges an Ink reroll or destroys removed gems and runes. F154: the rune grid printed the retired 1.5 + 0.45·g + 0.15·T fallback; it now prints its own heading's curve (Worn T1 12.6% … Void T10 28.8%).

2026-09-02 — Three gear labels on this page still carried a plus-number after the 08-25 purge. Gone (backlog 3.10; D: “refinement does not exist”). Codex only, nothing to release. The MAX-row definition and two rows of the progression-economy table now say Void-grade; the 2026-08-02 validation line names its builds by grade and tier only. The economy rows’ figures were not recomputed — they are pasted numbers, the consistency audit’s open item for this page. The game was checked on the rendered screen and is clean: no item, slot or detail card prints such a level; the dead field behind it is pinned to 0 and read by nothing. Gate tools/probe_refinepurge.py (dfmc-client) scans every gear page and the rendered client for grade-plus-number wording: 4/5 before, 5/5 after.

2026-09-01 — The axis multiplier range on this page said 1.375–4.0; the engine is 1.0–4.375. axisMult(g) in play/app.js returns (3g+5)/8 — grade 1 ×1.00, grade 5 ×2.50, grade 10 ×4.375. The page already stated ×4.375 correctly in the ClassRating paragraph, so it contradicted itself, and the wrong figure sat in the sentence explaining why a point of Creature Defense outvalues a point of Creature HP — the exact place a reader would use it. Documentation corrected to the shipped engine; no code, CSV or DATA_PIN touched, and no player-visible change.

2026-08-31 — Tag coefficients corrected to codex/items.csv truth: Fang and Carapace 27 → 54, Heart 55 → 110. The Fang / Carapace grid was built on the halved coefficient, so all 100 cells were exactly half the value the game pays; the grid is regenerated with the engine’s own itemBase() (round half-up plus the grade-step floor). Tags carry the largest coefficients in the game, so this was the widest number on the page. Found by the consistency audit (dfmc-client tools/audit), which now diffs every N × T × GF claim in the codex against items.csv on every run. DESCRIPTIVE ONLY: the game already paid these values — this page did not say so.

2026-08-25 — Refinement purged (D order: it does not exist and is purged from all text in the game and codex; the mechanic was ruled out 2026-08-10, refineMult() a constant 1 since). Sections 6 and 13 are stubs so the numbering stands; the “× refinement” term left the aggregation formula and every income/progression line.

2026-08-02 (b) — BALANCE SHIPPED (D order, silent update). Six numbers, moved together. (1) RiskPremium is GONE — CHAR_RISK 0.15 → 0.00. Character Attack is now (ΣItemStats + 0.25×Core) × ClassRating + 188, symmetric with Defence. D ruling: the classes already carry their identity in ClassRating, and paying it twice off the Defence grade produced a 5.8× spread in gear-to-Attack conversion. (2) CHAR_HP_SQUISH is GONE — 0.12 → 0.00. The same inversion in the HP formula had a best-in-slot Warrior holding LESS HP than a Mage (3,470 vs 4,609); the HP order is now the right way up. (3) Creature power moved off level and onto gear — coreOf k 1.00 → 0.60, and the tag implicits doubled to compensate: Fang and Carapace 27 → 54, Heart 55 → 110 (all 30 tag rows). Why: a creature’s power was level-borne and therefore fully available from turn one, while the avatar’s is gear-borne and starts at nothing — so the two could only ever cross at one point. Making the creature gear-dependent too is what produces parity across the early and mid game rather than at a single tier. Measured, avatar/creature POWER by tier (average of all six classes against the creature a player actually holds at that stage): before 0.72 / 0.74 / 0.70 / 0.85 / 0.96 / 1.06 → after 1.01 / 0.95 / 0.82 / 0.94 / 1.02 / 1.04 for T1–T6. The T3 dip is the stage gates, not the coefficients: creature lines advance at level 24 and classes at 33, so at level 30 the creature is a stage ahead. Gates stay at 33/66 by D’s ruling. Late game is NOT addressed and is deliberately left for review — the avatar still overshoots at the top, and the cause is socket surface: 8 socketable pieces against a creature’s 2 tags, a flat 4× at every grade, taking the avatar from 0% socket-borne power at Worn to 45% at Void. Every number here comes from tools/statmodel.py, validated exact against a live client on Worn T1, Rare T4 and Void T10 (tools/probe_statmodel.py).

2026-08-02 — Balance review (D). Findings recorded; no numbers changed yet. (1) Both defence-inverting terms rejected by D. RiskPremium = 1 + 0.15×(6−DefGrade) on Attack and CHAR_HP_SQUISH in character HP both pay low-Defence classes and tax high-Defence ones, on top of ClassRating, which already separates them. Together: a 7.1× spread in gear-to-Attack conversion (Warrior 1.15, Mage 7.00) and an INVERTED HP order — a best-in-slot Warrior held 3,470 HP against a Mage’s 4,609. (2) Parity is gear completeness, not a constant. The avatar is ~100% gear-derived, a creature carries an innate level curve plus tags, so measured avatar/creature Attack runs ~0.25× mid-game to 1.00× at full best-in-slot. Creature gear share measured 33% (T3) to 55% (T10). (3) The ultimates were never the fault. At parity the shipped ultimate powers already deliver 1.7–1.8× a creature’s ordinary move; solving for that budget returns 170/235/290 against a shipped 180/240/300. The weak-ultimate report was the avatar’s Attack. Mage AoE is the exception, ~1.3× hot. (4) POWER does not measure fighting strength. atk + def + hp/5 is additive; a fight multiplies survivability by damage. Six classes solved to identical POWER give a 2.2× spread in duel index and a strict 5-0…0-5 ladder by tankiness, unchanged at T1, T4 and T10. (5) Stage gates disagree. Classes advance at level 33/66, creature lines at 24/56, so for nine levels at each gate the creature is a stage ahead in move power and parity dips to 0.77× / 0.83×. Model and duel harness: tools/balance_*.py in dfmc-client, validated against the engine to the digit on every measured point.

2026-07-30 (b) — Coefficient sweep: this page's implicit coefficients were a magnitude rework behind codex/items.csv. Corrected to data truth — Main Hand 16.5, Off Hand 4.5, defensive off hands and Armour 6.6, Signet 6.0, Relic 9.0, gems 4.5, Fang/Carapace 27, Heart 55 (Heart/Carapace ratio ~2.04 unchanged); pool notes now read Attack 33 / Armour 26.4 ×T×GF. All six implicit grids regenerated with the engine's exact algorithm (round half-up + the grade-step floor), so every cell equals what itemBase returns.

2026-07-30 — The strict-increase lift this page has always specified ("each cell is at least 1 above its left and upper neighbour") is now enforced by the engine. itemBase() previously did a plain round(coef × T × GF), which collapsed adjacent grades wherever coef × T × 0.12 < 0.5 — 43 Worn-adjacent ties across 14 T1 items (e.g. Padded Jerkin 6.6: Worn 7, Common 7), reading in-game as a higher grade worth nothing and making AUTO-OPTIMIZE truthfully refuse the swap. The engine now floors each grade at (previous grade + 1) within a tier; the tier axis separates by construction (minimum coefficient 4.5 ≥ 1 raw point per tier step, verified across all 2,400 family×tier×grade cells). Consequence at low coefficients: top grades sit a point or two above the raw curve, exactly as this page's lift rule already stated.