Star
Schema Documentation

Table JSON Schemas

Technical documentation for the Unified Table JSON Schema (v3) for meaning tables and event focus tables used by Mythic GME v1.5.

Authoritative schema: docs/schemas/unified-table-v3-schema.jsonc

Unified Table Schema (Meaning Table)

Mythic GME v1.5 uses a single, unified schema for all tables. Meaning tables set tableType: "meaning-table". Advanced features (translations, tags, linking) are optional.

Basic Example (Meaning Table)

{
  "id": "action_meaning",
  "schemaVersion": 3,
  "tableType": "meaning-table",
  "categoryId": "core-tables",
  "defaultLanguage": "en",
  "displayName": "Action Meaning",
  "description": "Core action list",
  "rangeStart": 1,
  "rangeEnd": 100,
  "entries": [
    { "range": [1, 1], "result": "Abandon" },
    { "range": [2, 2], "result": "Activate" },
    { "range": [3, 3], "result": "Advance" }
  ]
}

Advanced Example (Meaning Table)

{
  "id": "treasure_table",
  "schemaVersion": 3,
  "tableType": "meaning-table",
  "categoryId": "loot-tables",
  "defaultLanguage": "en",
  "displayName": "Treasure Table",
  "displayNameTranslations": { "pt": "Tabela de Tesouros", "es": "Tabla de Tesoros" },
  "description": "Random treasure generation with range-based probabilities",
  "descriptionTranslations": { "en": "Random treasure generation with range-based probabilities" },
  "source": "Custom Campaign",
  "tableRollOn": ["treasure_quality", "treasure_condition"],
  "isPremium": false,
  "isBuiltIn": true,
  "rangeStart": 1,
  "rangeEnd": 100,
  "tags": ["treasure", "loot", "rewards"],
  "entries": [
    {
      "range": [1, 10],
      "result": "Gold coins",
      "resultTranslations": { "pt": "Moedas de ouro" },
      "tags": ["currency", "common"],
      "data": { "baseValue": 1, "stackable": true }
    },
    {
      "range": [11, 12],
      "result": "Magic sword",
      "entryRollOn": ["item_quality", "weapon_enchantments"],
      "tags": ["weapon", "magic", "rare"],
      "data": { "baseValue": 500, "itemType": "weapon" }
    }
  ]
}

Table Fields (Unified v3)

Field Type Required Description
id string Unique identifier (snake_case)
schemaVersion integer Must be 3
tableType string One of meaning-table, event-focus
categoryId string Kebab-case category identifier
rangeStart integer Start of table range (usually 1)
rangeEnd integer End of table range (e.g., 100)
displayName string User-facing table name
defaultLanguage string Fallback language (default: en)
description string Table purpose/usage
entries object[] List of entry objects

Entry Fields (Unified v3)

Field Type Required Description
range [start, end] Inclusive range for the entry
result string Entry text
resultTranslations object Localized result text by language code
weight number Entry weight (coming soon - not yet supported)
entryRollOn string[] IDs to roll after this entry
tags string[] Entry-level tags
data object Arbitrary metadata
disabled boolean Marks entry disabled (often with range [0,0])

Rolling Mechanics

Range-Based (Default)

  • Used when formula is a dice type (d100, d20, etc.)
  • Each entry must have a range array
  • Ranges must cover 1 to max die value completely
  • No gaps or overlaps allowed

Weight-Based (Coming Soon)

  • Weight-based rolling is planned for a future update
  • Currently only range-based tables are supported

Mixed Mode (Coming Soon)

Mixed range and weight tables are planned for a future update. Currently use range-based tables only.

Validation Rules

  1. ID Uniqueness: Table IDs must be unique system-wide
  2. Range Coverage: For range-based tables, must cover 1 to max with no gaps
  3. Required Fields: All required metadata and entry fields must be present
  4. Reference Validity: Referenced table IDs should exist (warning if not)
  5. Language Codes: Must be valid BCP-47 format (e.g., "en", "pt-BR")

Unified Table Schema (Event Focus)

Event focus tables use the same unified schema with tableType: "event-focus".

Example (Event Focus)

{
  "id": "standard_event_focus",
  "schemaVersion": 3,
  "tableType": "event-focus",
  "categoryId": "event-focus",
  "defaultLanguage": "en",
  "displayName": "Standard Event Focus",
  "description": "Core Mythic GME event focus table",
  "rangeStart": 1,
  "rangeEnd": 100,
  "entries": [
    {
      "range": [1, 10],
      "result": "Remote Event",
      "resultTranslations": { "pt": "Evento Remoto" },
      "entryRollOn": ["Characters"]
    },
    {
      "range": [91, 95],
      "result": "NPC Positive",
      "resultTranslations": { "pt": "PNJ Positivo" }
    }
  ]
}

Import/Export

File Format

Both table types use complete JSON structure for import/export.

File Naming

  • Meaning tables: {tableId}.json
  • Event focus tables: {tableId}.json

Storage Location

{ApplicationDocumentsDirectory}/
├── meaning_tables/
│   └── {language}/
│       └── *.json
└── event_focus_tables/
    └── {language}/
        └── *.json

CSV Support (Meaning Tables Only)

  • Export: Only exports entry text (loses all advanced features)
  • Import: Creates simple entries with auto-generated ranges
  • Recommendation: Use JSON for full fidelity

Migration Notes

From v1 to v2

  • Automatic on first load
  • Preserves all existing data
  • Adds required v2 fields with defaults

From v2 to v3

  • Field renaming for consistency: pairedWithtableRollOn
  • Event Focus: rollOnentryRollOn
  • Schema version updated to 3
  • No data loss, only field name changes

From Lite/Pro to Unified

  • No migration needed (new in v1.5)
  • Single schema supports all features
  • UI provides progressive disclosure

Need Help? If you run into any issues following this guide, please contact me and I'll be happy to help you with schema implementation and table development.