Runic Magic


Runic Magic preview

Original text by skander. Shout out to skander’s itch, get his version of this document to double your runes.

Lightweight interpretive magic system. Uses the Runes from the classic Ultima CRPG series. These are the building blocks of Britiannian magic: each spell is made of one or more runes, and casting them in some games requires you to type in the runes for the spell every time you cast it.

Spells are legally-distinct D&D types, as was the style at the time. The runes to cast them are thematic, with more powerful spells requiring multiple runes. For a few examples, Light is In Lor – “create light”, Fireball is Vas Flam Hur – “great flame wind”, and Resurrect is In Mani Corp – “create life death.” Poke around the Ultima VII spell list for more.

Because I could fit it, this document has instructions on how to use it as a FIST trait. For completeness…

RUNIC MAGIC

You are a practitioner of a magical art that uses runes as its fundamental unit. These 24 runes can be represented as cards on the second page of this document. Assemble them into a deck. Combine runes to form a reasonable spell. Choose one or more runes and roll 2D6 + modifiers to cast a spell, based on the runes used and any modifiers (see below).

By default, a spell takes 30-60 seconds to cast, lasts for a single use or with active concentration, and affects you or someone you touch in a noticeable way. Once used, runes lose power until you draw runes again.

  • Add + 1 to the roll for each:
    • Use more than 2 runes in the spell
    • Sacrifice 1D6 HP
    • Take much longer
  • Subtract - 1 from the roll for each:
    • Increase range
    • Affect group or area
    • Cast instantly
    • Subtle effect and casting
    • Long-lasting

When you have time for meditation and connection with the sources of your power, return all your runes to the deck, shuffle, and draw 2D6 + your number of traits runes. You can typically do this between missions, ask the referee if it’s possible at the rendezvous point or elsewhere.

  • a bag of runes
  • +1 MAX HP

Source code discussion

This was written in Typst, and I learned a few tricks while making this. In fact, I made this because I got inspired to try out these tricks.

Font choice

Elstob, for that medievalist feeling. It supports runic glyphs via stylistic alternatives, which you can access with CSS.

Content organization

Runes are stored as an array of dictionaries:

let runes = (
  (glyph: "ᚫ", name: "An", meaning: "Negate"),
  (glyph: "ᛒ", name: "Bet", meaning: "Small"),
  (glyph: "ᚳ", name: "Corp", meaning: "Death"),
  ...
)

This lets you separate content and its presentation (very web 2.0). I took advantage of this to create two different grids, one for reference (on the first page), one for printing (on the second page).

Building the grid

With the runes array, we use the array.map method to transform the dictionaries into content, in this case grid’s. Because map return an array, we need to spread it to pass the content into a containing grid.