Skip to content

03SoftwareC# · .NET 8 · WPF · SQLite

CampaignForge

An offline desktop toolkit for tabletop RPG game masters: dice math, linked lore and encounter tracking with no network in sight.

No public build or repository linked for this project yet.

Offline by design

4d6kh3+2keep highest 3 of 4d6= 12EVAL · UNDO-STACKEDSQLITE · WAL · FTS5capture pending
fig. 03 · dice-expression evaluation, parse sketch (representation)

Dice math as a real parser

Expressions like 4d6kh3+2 are tokenized into an expression tree and evaluated recursively, which keeps nested modifiers honest instead of hard-coding special cases.

Results land in the encounter tracker, where every action can be undone without corrupting state.

A database that behaves at the table

SQLite in WAL mode lets lookups happen while writes settle; FTS5 powers the random-table engine so finding “that one rumor table” is a search, not a scroll.

Everything runs offline by design: no accounts, no sync, no surprises mid-session. Dapper keeps data access explicit and thin.

What makes it technically interesting

  • Recursive dice-expression parser: nested modifiers and keep/drop arithmetic evaluated as a proper expression tree
  • Bidirectional entity linking: NPCs, locations and items point at each other from both ends
  • Encounter tracker with an undo stack deep enough to trust mid-session
  • Random table engine backed by SQLite FTS5 full-text search; WAL journal mode for safe concurrent reads
  • Dapper for thin, explicit data access; fully offline architecture
GitHub Get in touch