10 playable races. Numbers are racial attribute leanings added to the base of 20/stat
(RaceCatalog.cs:14-23, CharacterBuild.cs:17).
Gates the class sigils. Eligibility per race from ClassCatalog.cs:39-52.
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).
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).
CharacterBuild.cs:20Shift each attribute up to ±5 from its racial base; the shifts must net to zero.
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.
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).
Level-50 result of your choices. Hover any ƒ for its exact source formula.
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.
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.
| Bucket | Count | Names |
|---|---|---|
| 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 proposal | 5 | 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).
| System | Where | Model | Used here? |
|---|---|---|---|
| Chargen sigils (the 18) | SigilCatalog.cs + SIGIL_*.md |
100-pt pool; direct ±STR/CON/DEX/INT/SPI int deltas | Yes — this is where the 18's stat data lives |
| Runtime equip / 48 disciplines | SigilEquipHelper.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.
| Has core-attribute delta in a primary source | Count | Which |
|---|---|---|
live ints in SigilCatalog.cs | 8 | 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 doc | 2 | 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.
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).
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.
E:\UnityProjects\ (see the head comment for the full file:line map).