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
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.
{
"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" }
]
}
{
"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" }
}
]
}
| 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 |
| 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]) |
range arrayMixed range and weight tables are planned for a future update. Currently use range-based tables only.
Event focus tables use the same unified schema with tableType: "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" }
}
]
}
Both table types use complete JSON structure for import/export.
{tableId}.json{tableId}.json{ApplicationDocumentsDirectory}/
├── meaning_tables/
│ └── {language}/
│ └── *.json
└── event_focus_tables/
└── {language}/
└── *.json
pairedWith → tableRollOnrollOn → entryRollOnNeed 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.