Builder's Manual · Chapter 5

The Computing Layer

SPAECIMH deliberately keeps the game math in the system, not in your head or in your prose. A small set of fields on the Character file are computed: the sheet solves them from other fields every time it renders. As a builder, what matters is that you understand the formulas — because the whole difficultly/combat machinery of the system bends around them, and because a wrong input upstream quietly corrupts every number downstream.

The five formulas that move the world

Every one is base × 5 × ORIGIN, where ORIGIN is the tier number. The system's rule — "always calculate from the base value; never re-add the tier where it is already in the formula" — is the difference between a Mortal with 60 Mana and 300. Keep it straight.

Derived fieldFormula
Mana (MA)IN × 5 × ORIGIN
Health (HP)EN × 5 × ORIGIN
CarryST × 5 × ORIGIN (kg)
Money4d6 × 500 × ORIGIN — rolled, not typed

A fourth computed field, attribute points spent, sums the six base attributes — a running check that the character respects its TAP. And originName maps the numeric tier to its label (Mortal I – Fragile … God III – Demiurge) so the sheet never shows a bare number where a name is wanted.

Why derived fields are read-only

Computed fields have no stored value. When a Character file is read, the sheet reports the derived numbers; when it is written, the sheet rejects them. This is a feature, not a quirk. It means a field can never drift out of sync with its inputs — you cannot hand-edit Health to a bigger number without the base Endurance actually changing. If a character's numbers feel wrong, fix the inputs: the base attribute, the ORIGIN. Never try to fix the output.

Editing a formula

The formulas are not magic; they are declared on the Character file type, and they can be changed. When you change one, hold to the pattern:

  1. Change the expression in the schema, not values in files.
  2. Keep it a pure function of the sheet's own fields. The formulas read the base attributes and ORIGIN from the same file. A formula that reaches outside its own character for inputs is fragile and must load its reference explicitly.
  3. Default to ?? so a missing value reads as something sane rather than poisoning the result. ($self.attributes?.endurance ?? 0) is safe; a bare $self.attributes.endurance on a sheet with no attributes set blows the whole derived block to silent nothing.

Checking your work

The fastest way to validate a build is arithmetic against the handbook: a Tier 2 character with Endurance 14 must read Health 14 × 5 × 2 = 140. If a file reads any other number, the base input or the ORIGIN is wrong — hunt the input, not the output. The moment a character's derived row disagrees with the handbook by hand-calc, the file is broken even if it renders.

The one caveat about computed combat checks

The 4d6 check formula — SUM + Modifier ≤ Attribute — is not stored on any file; it is a master-adjudicated rule. What the sheet stores is the compare-target (the attribute). When you build entries that feed combat — weapons, armor, monsters — make sure their numbers line up with the check and damage rules in the Player's Handbook. The machine compares; you build things worth comparing.

Manual updated Oct 7, 2026.