CALDMERE
Endgame Character Builder
Level 50 (cap)
XP to reach: 8,270,533
Training Pts 0/60
Skill Pts 0/49
Sigil Pool 0/100

Race

10 playable races. Numbers are racial attribute leanings added to the base of 20/stat (RaceCatalog.cs:14-23, CharacterBuild.cs:17).

Class

Gates the class sigils. Eligibility per race from ClassCatalog.cs:39-52.

Sigils pool 0/100

The canon 18 (Troy-locked; _design\SIGILS\SIGIL_*.md). Drawn from a 100-pt pool minus race cost (CharacterBuild.cs:16). live=in code, proposal=doc-only (flagged, not invented).

Training Points → Attributes spent 0/60

1 TP/level + 2 bonus every 10th level, level + 2·floor(level/10) (TrainingPointMath.cs:26-30 TotalForLevel) — 60 at the level-50 cap, scales with the level slider above. Each TP = +2 to one attribute (TrainingPointMath.cs:21).

Optional: base reallocation (±5, zero-sum) — CharacterBuild.cs:20

Shift each attribute up to ±5 from its racial base; the shifts must net to zero.

Skill Trees spent 0/49

3 authored trees (Resources\SkillTrees\Trees\*.json). 1 SP per level from L2 (pointsPerLevel=1, PlayerSkillPoints.cs:43, no overrides configured), summed by SkillTreeMath.cs:111-118 TotalEarnedByLevel — 49 at the level-50 cap, scales with the level slider above. Gates enforced: prereq, row-gate, max-rank (SkillTreeMath.cs:56-93). Nodes UNLOCK skills — they do not change attributes.

Weapon / Weave / Craft Lines

Use-based rank 1-10 (SkillLineMath.cs). Target a rank to see the grind cost. Ranks unlock the line's signature at 10 — no attribute effect. Greyed lines are unmapped (skillType=-1, pending canon).

Endgame Stats — live

Level-50 result of your choices. Hover any ƒ for its exact source formula.

STR & SPIRIT have no derived-stat formula in code (PlayerAttributes.cs:37-46 defines only CON→HP, INT→Mana, DEX→Stamina). Their totals are shown; downstream weapon/heal scaling is not yet coded — not invented here.
Sigil reconciliation & source notes (read me)

Troy's canon: 18 sigils (the 18 SIGIL_*.md design docs). The chargen catalog (SigilCatalog.cs) carries 21. The 48 entries in SigilDatabase.cs are a different axis (Shadowbane disciplines → passive sigils, ids SIGIL_<NAME>) and are not conflated here. This builder uses the canon 18.

21 chargen vs 18 canon — the diff

BucketCountNames
In BOTH chargen code + canon doc (live, verbatim)13 Held Line, White Iron, Quiet Way, Open Barrow, Mending Hand, Grave-Ward, The Drawing, Warded Seam, Iron Thew, Quick Hand, Deep Root, Kindled Mind, Long Watch
Canon doc ONLY — missing from chargen code proposal5 Iron Grave, Long Road, Palisade, Reachfolk (Human race tile), Third Raising
Chargen code ONLY — no canon doc (the "extra")8 3 race sigils: Dwarf, Elf, Half Giant  ·  5 utility: Crossed Blades, Forge-Mark, Wayfarer, Keen Eye, Still Water

13 + 5 = 18 canon ✓  |  13 + 8 = 21 chargen ✓. Cites: canon list = _design\SIGILS\SIGIL_*.md (18 files); chargen list = SigilCatalog.cs:22-81. The 3 chargen race sigils are the non-Human equivalents of the canon Reachfolk tile (race-swapped slot 18).

Two sigil systems (do not conflate)

SystemWhereModelUsed here?
Chargen sigils (the 18)SigilCatalog.cs + SIGIL_*.md 100-pt pool; direct ±STR/CON/DEX/INT/SPI int deltasYes — this is where the 18's stat data lives
Runtime equip / 48 disciplinesSigilEquipHelper.cs + SigilDatabase.cs 3 slots (4 @ lvl 70); SigilData.passiveBonuses flat/pct, race/class/conflict gates Not for the 18 — documented below

GAP: SigilEquipHelper.cs:39-40,76 unlocks the 4th slot at level 70, but the level cap is 50 (LevelingEx.cs:34). At endgame you get 3 slots, and the 4th is unreachable under the current cap.

Sigil stat-data coverage (of 18)

Has core-attribute delta in a primary sourceCountWhich
live ints in SigilCatalog.cs8 White Iron −3 DEX · Quiet Way −4 CON · Grave-Ward −3 STR · Warded Seam −4 STR/−4 DEX · Iron Thew +10 STR/−5 DEX · Quick Hand +10 DEX/−5 STR · Deep Root +10 CON/−5 INT · Kindled Mind +10 INT/−5 CON · Long Watch +10 SPI/−5 STR (9 rows — Warded Seam carries two)
proposal deltas in the .md doc2 Third Raising +5 CON/+5 SPI · Iron Grave −3 SPI
No core-attribute delta (skill-line / % / situational only)8 Held Line, Open Barrow, Mending Hand, The Drawing (live, 0 deltas) · Long Road, Palisade, Reachfolk (proposal, 0 deltas)

Non-attribute effects (%, resistances, skill-line grants, actives) are shown as text on each sigil but are not fed into the attribute math — no code turns them into attribute points, so inventing that would be a lie. The runtime path (SigilStatsBridge.cs → PlayerAttributes.ServerAddBase) forwards only the primary STR/CON/… deltas, which is exactly what this tool sums.

Race stat-data coverage

Full coverage: all 10 races carry real AttrMods (RaceCatalog.cs:14-23) — no invention needed. Base is 20/stat with ±5 zero-sum realloc (CharacterBuild.cs:17,20).

The chargen ↔ runtime seam (honest gap)

Two attribute baselines exist and are not yet wired together: chargen builds at base 20/stat (CharacterBuild.cs:17); the runtime PlayerAttributes.cs seeds base 10/stat and notes at :96 that "a race/class table would override these defaults — documented follow-up." So the chargen→runtime attribute handoff is unwired. This planner models the intended endgame (chargen base + racial mods + sigils + TP) and applies the runtime derived-pool formulas to the final totals. The derived formulas key off the total attribute (PlayerAttributes.cs:77-89), so they hold regardless of which base model produced it.

Caldmere Character Builder — self-contained preview. No deploy, no external calls. Unity repo read-only.
All values traced to primary sources in E:\UnityProjects\ (see the head comment for the full file:line map).