- world/MANIFEST.md: manifest.toml and directory layout - world/races/RACES.md: race schema (stats, body, natural, resistances, etc.) - world/classes/CLASSES.md: class schema (base_stats, growth, hidden, guild) - world/guilds/GUILDS.md: guild schema and [growth] - world/spells/SPELLS.md: spell schema and types - world/town/REGION.md: region.toml - world/town/rooms/ROOMS.md: room schema and exits - world/town/npcs/NPCS.md: NPC schema, race/class resolution - world/town/objects/OBJECTS.md: object schema and [stats] Made-with: Cursor
4.6 KiB
Race TOML Reference
Each file in world/races/ defines one race. The filename (without .toml) becomes the race ID with prefix race: (e.g. human.toml → race:human).
Top-level fields
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
name |
string | Yes | — | Display name of the race. |
description |
string | Yes | — | Short description shown in chargen and elsewhere. |
metarace |
string | No | — | Category (e.g. "animal", "draconic"). Used for flavour and filtering; NPCs without a fixed race are chosen from races that are not hidden (metarace does not exclude them from random NPC pool). |
hidden |
boolean | No | false |
If true, the race does not appear in character creation. Use for NPC-only races (e.g. Beast). |
default_class |
string | No | — | Class ID (e.g. "class:peasant") used as the default class for NPCs of this race when the NPC has no fixed class. Omit for “random compatible class” (e.g. Dragon). |
[stats] — Stat modifiers
All values are integers applied as modifiers (e.g. +1, -2). Defaults are 0 if omitted.
| Field | Description |
|---|---|
strength |
STR modifier. |
dexterity |
DEX modifier. |
constitution |
CON modifier. |
intelligence |
INT modifier. |
wisdom |
WIS modifier. |
perception |
PER modifier. |
charisma |
CHA modifier. |
[body]
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
size |
string | No | "medium" |
One of: "tiny", "small", "medium", "large", "huge". Flavour and potential future rules. |
weight |
integer | No | 0 |
Weight in arbitrary units. |
slots |
array of strings | No | humanoid default | Equipment slot names this race can use. If empty, default humanoid slots are used: head, neck, torso, legs, feet, main_hand, off_hand, finger, finger. |
[natural] — Natural armor and attacks
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
armor |
integer | No | 0 |
Natural armor bonus added to defense. |
[natural.attacks.<name>]
Each key under natural.attacks defines one natural attack (e.g. bite, claw, fire_breath).
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
damage |
integer | No | 0 |
Base damage. |
type |
string | No | "physical" |
Damage type (e.g. "physical", "fire", "magical"). |
cooldown_ticks |
integer | No | — | If set, minimum ticks between uses of this attack. |
[resistances]
Map of damage type → multiplier (float).
0.0= immune1.0= normal1.5= vulnerable (e.g. 50% more damage)< 1.0= resistant (e.g.0.5= half damage)
Example: fire = 0.0, cold = 1.5, physical = 0.7
traits and disadvantages
Top-level arrays of strings (free-form). Shown in chargen and used for flavour.
traits— e.g.["darkvision", "lucky"]disadvantages— e.g.["light_sensitivity"]
[regen] — Regeneration multipliers
Multipliers applied to passive HP/mana/endurance regen. Float; default 1.0.
| Field | Description |
|---|---|
hp |
HP regen multiplier. |
mana |
Mana regen multiplier. |
endurance |
Endurance regen multiplier. |
[guild_compatibility]
Used when picking a random class for NPCs (and potentially future guild rules). Guild IDs in each list are string identifiers (e.g. "guild:warriors_guild").
| Field | Description |
|---|---|
good |
Guilds this race is well suited to. |
average |
Guilds with no special modifier. |
poor |
Guilds this race is poorly suited to. |
restricted |
Guilds this race cannot join. |
All default to empty arrays.
[misc]
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
lifespan |
integer | No | — | Flavour lifespan. |
diet |
string | No | — | Flavour diet (e.g. "omnivore", "carnivore"). |
xp_rate |
float | No | 1.0 |
Multiplier for XP gain (e.g. 0.7 = slower leveling). |
natural_terrain |
array of strings | No | [] |
Flavour terrain list. |
vision |
array of strings | No | [] |
Vision types (e.g. ["normal", "darkvision", "infravision"]). |
Minimal example
name = "Human"
description = "Versatile and adaptable."
default_class = "class:peasant"
[stats]
charisma = 1
Full example (excerpt)
See dragon.toml for a race using body slots, natural attacks, resistances, regen, and guild compatibility.