Septenary for Foundry VTT: Three-Phase Implementation Plan

>> foundryvtt

| [UPDATED: 2026.04.11]

> PART_OF_PROJECT

Septenary Foundry Modules

Septenary for Foundry VTT: Three-Phase Implementation Plan

PHASE 1: Character Sheet Foundation & Basic Rolls

Timeline: 1–2 weeks | Complexity: Low | Learning curve: Steep but rewarding

What Gets Built

  • system.json manifest (identity file for Foundry)
  • Character sheet template with three stats (Body/Mind/Power) and 2–3 skill slots per stat
  • Skill data structure in the actor data model (broad skill + specialization ranks)
  • Basic roll button (Xd6L rolls under stat)
  • Character creation sheet (basic stat/skill assignment)

What This Delivers

  • A playable character sheet you can create characters on
  • You can roll any skill against a stat with a button click
  • Full visual feedback on the roll (all dice shown, result highlighted)
  • No magic, no armor, no advanced mechanics yet

Why This Phase First

  • Foundry's actor/sheet system is well-documented
  • You validate the character data structure before building on it
  • Rolling is Foundry's core competency; this lets you test dice automation
  • Everyone can immediately make a playable character and test at the table

Files That Get Created

septenary/
β”œβ”€β”€ system.json (manifest)
β”œβ”€β”€ templates/
β”‚ β”œβ”€β”€ actor-character-sheet.html (main character sheet)
β”‚ β”œβ”€β”€ actor-npc-sheet.html (simplified NPC sheet)
β”‚ └── dialogs/
β”‚ └── skill-roll-dialog.html (modifiers before roll)
β”œβ”€β”€ styles/
β”‚ └── septenary.css (character sheet styling)
β”œβ”€β”€ module/
β”‚ β”œβ”€β”€ actor.js (actor data model: Body/Mind/Power)
β”‚ β”œβ”€β”€ sheets/
β”‚ β”‚ β”œβ”€β”€ character-sheet.js (sheet class, event handlers)
β”‚ β”‚ └── npc-sheet.js
β”‚ β”œβ”€β”€ macros/
β”‚ β”‚ └── skill-roll.js (roll logic and chat output)
β”‚ └── config.js (CONFIG.SEPTENARY for skill lists)
└── packs/
└── skills-compendium.db (skill reference)

Testing Checklist (You Do This)

  • [ ] Create a character, assign stats 2/2/2
  • [ ] Add 3 skills, mix of Body/Mind/Power
  • [ ] Roll each skill, verify Xd6L pools form correctly
  • [ ] Roll with difficulty modifier via dialog (add +1d6H, verify cancellation)
  • [ ] Create an NPC with fewer skill fields, verify sheet resizes

Decision Point Before Phase 2

At end of Phase 1, you have one question: Does the sheet data structure feel right when you're actually using it? If skills are too fiddly to add, or the stat display is confusing, you adjust it here before building the next layer. This is low-risk to change.


PHASE 2: Combat, Conditions, Armor & Advancement

Timeline: 2–3 weeks | Complexity: Medium | Requires Phase 1 working

What Gets Built (Cohesive Unit)

  1. Combat Tab in character sheet
  2. Unconscious threshold display (3 + Body)
  3. Death buffer (Mind + Power)
  4. Current hits tracker with visual health bar
  5. Armor bonus + equipment slots (Light/Medium/Heavy/Full Plate selection)
  6. Armor degradation tracking

  7. Condition System

  8. Condition icons (Active Effects UI for Tired, Unsteady, etc.)
  9. Condition persistence across sessions
  10. Tired drain automation (1 per hour, nap/rest recovery)

  11. Combat Automation

  12. Initiative roll (roll Power stat)
  13. Defense action tracking (reserved = Defense skill number stored)
  14. Hit recording macro (apply damage, handle Defense rank blocking, degrade armor)

  15. Advancement Tracker

  16. Skill point counter per-skill (locked to stat cap during Phase 1)
  17. Running total per stat (6 points = +1 to stat)
  18. Auto-raise stat when threshold crossed
  19. Audit view (show which skills fed which stat advances)

What This Delivers

  • You can run a full combat encounter in Foundry
  • Armor degrades realistically, players see it happening
  • A character naturally advances through playing
  • Status effects (Tired, Unsteady) apply and resolve automatically

Why This Phase Second (Not First)

  • You need Phase 1's actor data structure locked in
  • Combat tab is a natural extension of character sheet, uses same context
  • Armor and conditions are independent systems; advancing is separate from both
  • But all three belong together because you test them all in combat

Files That Get Created/Modified

septenary/
β”œβ”€β”€ templates/
β”‚ β”œβ”€β”€ actor-character-sheet.html (ADD combat & advancement tabs)
β”‚ └── dialogs/
β”‚ β”œβ”€β”€ damage-dialog.html (NEW: hit assignment)
β”‚ β”œβ”€β”€ advancement-audit.html (NEW: show stat progression)
β”‚ └── condition-config.html (NEW: manage Tired state)
β”œβ”€β”€ styles/
β”‚ β”œβ”€β”€ septenary.css (ADD combat styling)
β”‚ └── combat.css (NEW: hits, armor visuals)
β”œβ”€β”€ module/
β”‚ β”œβ”€β”€ actor.js (MODIFY: add combat fields)
β”‚ β”œβ”€β”€ sheets/
β”‚ β”‚ └── character-sheet.js (ADD: combat & advancement tabs)
β”‚ β”œβ”€β”€ macros/
β”‚ β”‚ β”œβ”€β”€ damage.js (NEW: hit assignment with Defense rank blocking)
β”‚ β”‚ β”œβ”€β”€ initiative.js (NEW: Power roll)
β”‚ β”‚ └── advancement.js (NEW: skill point tracking, stat raises)
β”‚ β”œβ”€β”€ active-effects.js (NEW: Tired and Unsteady)
β”‚ └── config.js (MODIFY: add conditions, armor types)
└── packs/
β”œβ”€β”€ conditions.db (NEW)
└── armor-equipment.db (NEW)

Testing Checklist

  • [ ] Two characters in a combat scene
  • [ ] Roll initiative (verify Power rolls appear in order)
  • [ ] First character takes 3 hits without Defense action β†’ armor degrades
  • [ ] Second character reserves action, takes 5 hits β†’ Defense rank blocks first 2
  • [ ] Apply Tired condition manually, see stat drain start
  • [ ] Award 2 skill points to character, watch stat advance at 6-point threshold
  • [ ] Close Foundry, reload world, verify Tired and armor states persist

Critical Decision Before Phase 3

Does combat feel right at the table? Specifically: Is the hit/damage flow clear? Are players confused about Defense blocking? Is advancement tracking visible enough? These are gameplay questions, not code questions. You'll know the answers after one real session.


PHASE 3: Magic (Rites, Spells, Prayers), Spellcasting & Advanced Features

Timeline: 3–4 weeks | Complexity: High | Requires Phase 1 & 2 fully working

What Gets Built (Largest Unit)

  1. Spell/Rite/Prayer Data Structure
  2. Item type for each (not global; each has its own template)
  3. Fields: Level (1–6), House, capacity cost, effect text
  4. Spell card compendium with full write-ups from spec

  5. Magic Character Sheet Tab

  6. Three capacity pools (Arcane / Divine / Wyrding), track separately
  7. List all known Houses with ranks
  8. Quick-cast buttons for each House
  9. Recovery indicator (Arcane/Wyrding show "hours of study needed"; Divine shows "full on sleep")

  10. Casting Flow

  11. Click spell/rite/prayer in sheet
  12. Dialog: confirm capacity cost, select difficulty, add modifiers
  13. Roll House skill (Xd6L) against casting stat
  14. On success: deduct capacity, log in chat, mark slot as "cast this turn"
  15. On failure: still deduct capacity (important!)

  16. Cantrip System

  17. Separate item type (no capacity cost)
  18. Track uses per cycle (rank = uses)
  19. Reset on sleep

  20. Advanced Features (if time/energy allows)

  21. Spell templates (area effect visualization in Foundry)
  22. Linked macros (Searing Arc auto-rolls damage as hit pool)
  23. Upcast scaling (click to increase level, recalculate capacity)
  24. NPC spell slot presets (quick load "Evocation 3" β†’ spell list populates)

What This Delivers

  • Full magic system playable in Foundry
  • Capacity management is automatic (no manual math)
  • Spell cards are beautifully formatted, easy to reference
  • NPCs can cast the same way PCs do

Why This Phase Last

  • Magic is orthogonal to Phase 1 & 2 (doesn't block them; they don't block it)
  • Magic requires House/spell item data that only makes sense after you know character structure is solid
  • If Phase 1 or 2 changes mid-table, magic reimplement is expensive; do it last
  • You've had 4–5 weeks of live play without magic; you know what to emphasize

Files That Get Created/Modified

septenary/
β”œβ”€β”€ templates/
β”‚ β”œβ”€β”€ actor-character-sheet.html (ADD magic tab)
β”‚ β”œβ”€β”€ item-spell.html (NEW: spell card template)
β”‚ β”œβ”€β”€ item-rite.html (NEW: rite card template)
β”‚ β”œβ”€β”€ item-prayer.html (NEW: prayer card template)
β”‚ β”œβ”€β”€ item-cantrip.html (NEW: cantrip card template)
β”‚ └── dialogs/
β”‚ β”œβ”€β”€ cast-spell-dialog.html (NEW: capacity, difficulty, roll modifiers)
β”‚ └── upcast-dialog.html (NEW: select level, recalc cost)
β”œβ”€β”€ styles/
β”‚ └── magic.css (NEW: spell card formatting per spec)
β”œβ”€β”€ module/
β”‚ β”œβ”€β”€ item.js (NEW: spell/rite/prayer/cantrip item types)
β”‚ β”œβ”€β”€ sheets/
β”‚ β”‚ β”œβ”€β”€ character-sheet.js (MODIFY: add magic tab)
β”‚ β”‚ β”œβ”€β”€ spell-sheet.js (NEW: edit spell properties)
β”‚ β”‚ β”œβ”€β”€ rite-sheet.js (NEW)
β”‚ β”‚ └── cantrip-sheet.js (NEW)
β”‚ β”œβ”€β”€ macros/
β”‚ β”‚ β”œβ”€β”€ cast-spell.js (NEW: casting flow)
β”‚ β”‚ β”œβ”€β”€ cast-rite.js (NEW)
β”‚ β”‚ β”œβ”€β”€ cast-prayer.js (NEW)
β”‚ β”‚ └── cast-cantrip.js (NEW: no capacity, track uses)
β”‚ β”œβ”€β”€ magic.js (NEW: capacity calculations, recovery display)
β”‚ └── config.js (MODIFY: House lists, spell levels)
└── packs/
β”œβ”€β”€ arcane-spells.db (NEW: all Arcane House spells)
β”œβ”€β”€ divine-prayers.db (NEW: all Divine House prayers)
β”œβ”€β”€ wyrding-rites.db (NEW: all Wyrding House rites)
└── cantrips.db (NEW: all cantrip skills)

Testing Checklist

  • [ ] Create an Arcanist, add Evocation rank 3
  • [ ] Add "Directed Strike" spell to inventory, set level 1
  • [ ] Cast it: dialog appears, capacity deducts, roll happens
  • [ ] Cast it again (test capacity deduction twice)
  • [ ] Rest (sleep); capacity should reset
  • [ ] Create a Wyrder, add Tending rank 2
  • [ ] Cast a Tending rite; verify capacity comes from Body+Mind+Houses
  • [ ] Add Cantling Drawn Air cantrip, cast 3 times, verify uses = rank
  • [ ] Sleep, verify cantrip uses reset

Final Gate Before Launch

All three phases complete and tested live. You've run combat encounters, cast spells, seen characters advance. The system handles what it's supposed to. Edge cases and polish can come in maintenance releases.


Decision & Feedback Loops Between Phases

After Phase 1 You Decide
Sheet feels clunky to use? Adjust skill UI before Phase 2 (add/remove skill slots, reorganize tabs)
Stat cap is hard to understand? Change Phase 2 advancement display to make it clearer
Rolling math doesn't feel right? Tweak cancellation logic (currently 1:1; could be 2:1 or other if you want)
After Phase 2 You Decide
Combat is slow because armor tracking is tedious? Phase 3: automate armor in macros so it's silent in background
Advancement feels too fast/slow? Adjust the thresholds (currently 6 points = +1 stat; could be 4 or 8)
Tired condition is too harsh? Change drain rate before Phase 3 makes it interact with magic
Players want to house-rule something? Phase 3 can build in variants (e.g., optional armor bypass rules)

What "Working & What Wasn't" Means

After each phase, you run 2–3 real sessions (not just testing). You get answers to:

  1. Can players understand the sheet at a glance? (Phase 1)
  2. Do they feel the weight of armor and advancement? (Phase 2)
  3. Does magic feel distinct and rewarding by tradition? (Phase 3)

Then you make evidence-based changes before the next phase. Not speculationβ€”actual table feedback.

< RETURN_TO_HOME