Skip to content

Character Sheet Integration

The Character Sheet Designer is a separate feature of Ishvana that lives under Visual Studio. It’s an agent-driven layout builder — you describe what you want (“a D&D 5e wizard sheet with a spell list and a portrait slot”) and the designer generates a printable CSS Grid layout with the right components. But the reason it lives in the same app as the Magic System module is that the two are directly connected. A character sheet generated by the designer can be linked to a lore entry’s stat block, and once linked, the sheet pre-fills from the stat block, and any stat values the user edits on the sheet write back to the stat block. The two systems are two views of the same underlying data.

When you create a new character sheet in the Designer, you can optionally launch it from a lore entry in the Legendry. “Design a sheet for this character” is a context option on character entries. When you launch from an entry, the Designer pre-fills the sheet’s character context — name, aliases, tags, summary — and reads the entry’s stat block if one exists.

The link is stored on the sheet as an entry_id pointing back at the lore entry. On subsequent loads of the sheet, Ishvana looks up the entry, reads the current stat block, and pre-populates any fields on the sheet that map to stats in the ruleset. If a character’s Strength changes in the stat block — maybe because of a new magic item — the next time you open their sheet, the Strength field reflects the new value automatically.

Pre-fill works field by field. Every component in a character sheet layout has a component ID and a field name — a Strength input might have the key stats_section.Strength. When the sheet loads, the Designer walks the ruleset’s stat definitions looking for matching names, and pre-fills any that match. Names that don’t match (custom fields, freeform notes, image slots) stay empty for manual entry.

Write-back is the reverse. When the user edits a stat value on the sheet and saves, the Designer reads the modified value, looks up the stat key in the ruleset, and writes the new value to the linked entry’s stat block base values. The stat block then re-evaluates its formulas, and the updated effective values propagate everywhere else the stat block is used — including the Legendry detail panel, any other sheets linked to the same entry, and any RulesLawyer checks that reference the character.

This means you can use the character sheet as a playable interface — at the table during a TTRPG session, when your players level up, when they find a new magic item — and everything they change flows back into the project’s canonical Legendry entries.

If you’re writing a TTRPG campaign book, the character sheet integration is the feature that makes Ishvana competitive with dedicated TTRPG design tools. You can:

  1. Import a preset ruleset or build your own in the Magic System module.
  2. Create the NPCs for your campaign setting as Legendry entries.
  3. Build stat blocks for each NPC using the ruleset.
  4. Design a character sheet layout that matches your system.
  5. Generate per-NPC sheets linked to their Legendry entries.
  6. Print the sheets and hand them out at the table, or use them as reference during play.

Any time an NPC evolves during play — picks up a magic item, loses a limb, advances a level — the change goes into the stat block once and the sheet, the Legendry entry, and any prose that references them stays in sync.

Traditional TTRPG writing tools require you to maintain the NPC’s stats in multiple places: the setting book PDF, a character sheet template, a stat block for the GM reference. Ishvana collapses those into one. The setting book pulls its stat block references from the same data the character sheet reads from.

The typical design flow for a linked character sheet:

  1. Describe the sheet. Open the Character Sheet Designer from a lore entry or from the Visual Studio tab. Describe what you want — “D&D 5e fighter sheet with ability scores, skills, inventory, and a portrait,” or “Welcome to Tikor character sheet for a Dihoma warrior.”
  2. Preview the layout. The Designer generates a CSS Grid layout with components (stat blocks, labeled lists, tables, a portrait slot, a large textarea for notes). You see the layout in read-only preview mode.
  3. Refine. Request changes in natural language. “Make the stat blocks horizontal.” “Add a section for spells.” “Move the portrait to the top right.” Each refinement sends your feedback and the current layout to the LLM and replaces the layout with the refined version.
  4. Save as template. Once you’re happy with the layout, save it as a template. Templates can be reused for future characters. You can also skip this step and use the layout once.
  5. Use it. Move to the Use phase, where all the inputs become editable. The sheet pre-fills from the linked entry’s stat block (if any). Fill in any custom fields — name, appearance, backstory, inventory.
  6. Save the sheet. The sheet persists as a JSON file in your project data. You can reopen, edit, or delete it later.

The sheet is authoritative for some fields, the stat block is authoritative for others

Section titled “The sheet is authoritative for some fields, the stat block is authoritative for others”

This distinction matters more than it sounds like it does.

Fields that live on the sheet: Character name, appearance, backstory text, inventory lists, custom notes, portrait image. These are fields that don’t map to ruleset stats — they’re character-specific and the sheet is the only place they exist.

Fields that live on the stat block: All the stats, formulas, abilities, and modifiers from the ruleset. These are the fields that the sheet pre-fills from and writes back to. The stat block is the source of truth for numeric mechanical data.

When you save a sheet, Ishvana splits the data accordingly. Name and notes and portraits get written to the sheet file. Strength and Dexterity and abilities get written back to the stat block. A future load of the sheet reads both sources and rebuilds the current state.

The practical consequence: if you delete a sheet, the character’s name and backstory and portrait on that sheet are gone, but their stat block is still intact on the Legendry entry. If you delete the Legendry entry, the sheet becomes orphaned — it still exists as a file but its pre-fill data is broken.