Culture Files
File Location
Section titled “File Location”data/<namespace>/culture/<name>.jsonThe file ID is the culture ID. For example, data/examplepack/culture/fisherfolk.json is the culture examplepack:fisherfolk.
Minimal Example
Section titled “Minimal Example”A complete culture in one file. The naming block lists its given names and family names in place:
{ "schema": "townstead:culture/v1", "name": "Fisherfolk", "naming": { "given": { "male": ["Bram", "Corin", "Oskel"], "female": ["Marit", "Neva", "Sölvi"] }, "family": { "type": "inherited", "names": ["Netley", "Saltmarsh", "Tidewell"] } }}Full Example
Section titled “Full Example”{ "schema": "townstead:culture/v1", "name": { "translate": "culture.examplepack.fisherfolk" }, "demonym": { "singular": { "translate": "culture.examplepack.fisherfolk.demonym.singular" }, "plural": { "translate": "culture.examplepack.fisherfolk.demonym.plural" }, "adjective": { "translate": "culture.examplepack.fisherfolk.demonym.adjective" } }, "naming": { "given": "examplepack:fisherfolk", "family": { "type": "inherited", "list": "examplepack:fisherfolk", "descent": "either" } }, "settlement_names": "examplepack:fisherfolk", "faction_names": "examplepack:fisherfolk", "clothing": { "types": [{ "select": { "material": "wool" }, "rate": 3 }], "livery": "examplepack:fisherfolk/oilskin" }}Fields
Section titled “Fields”| Field | Required | Description |
|---|---|---|
schema | No | When present, it must be townstead:culture/v1. |
name | No | The name that players see. Plain text or a text component such as {"translate": "<key>"}. The default is the file path. |
demonym | No | What the culture’s people are called. See Demonym. |
naming | No | A naming tradition written in place. See Personal Names. |
naming_tradition | No | The ID of a naming tradition file. Townstead ignores it when the file also has naming. |
settlement_names | No | The ID of a settlement-name list. |
faction_names | No | The ID of a faction-name list. |
clothing | No | Clothing preferences and the default livery. See Clothing. |
parent | No | A culture ID. The culture is then a subculture of that culture. |
spirit | No | For a subculture: Community Spirit axes that draw people to it. See Subcultures. |
forms | No | For a subculture: the founding profiles that its towns use. See Subcultures. |
legacy_ids | No | Old IDs of this culture. Villagers and villages that recorded an old ID use this culture. |
A culture with no naming tradition does not change names. Its people are named by their region.
Demonym
Section titled “Demonym”"demonym": { "singular": "Fisherman", "plural": "Fisherfolk", "adjective": "Fisher"}| Field | Required | Description |
|---|---|---|
singular | Yes | One person, such as “Highlander”. |
plural | No | Many people. The default is singular. |
adjective | No | The adjective. Lines that ask for the adjective use singular when it is missing. |
Conversation lines show demonyms with placeholders such as {self_demonym}. See Text & Placeholders.
Translations
Section titled “Translations”Text fields accept plain text or a text component. Use {"translate": "<key>"} to translate the name or the demonym, and put the keys in a lang file in the data pack:
data/<namespace>/lang/<locale>.json{ "culture.examplepack.fisherfolk": "Fisherfolk", "culture.examplepack.fisherfolk.demonym.singular": "Fisherman"}A demonym in plain text is the same in every language. To make a demonym agree with gender or case in other languages, see Translations.
Loading and Errors
Section titled “Loading and Errors”Townstead reads culture files when data packs load, and again after /reload. A file with the same namespace and path as a file in a lower pack replaces that file.
A file with an error does not load, and the other files still load. The game log shows each problem and a summary:
Could not load culture examplepack:fisherfolkCulture examplepack:merchants has parent examplepack:fisherfolk which is not loaded; it stands aloneLoaded 9 culture(s)Problems that stop a file from loading:
- a
schemathat is nottownstead:culture/v1; - a
parentthat is the file’s own ID; - a negative weight in
spiritorforms; - a form with no
profile; - a
legacy_idsentry that is the file’s own ID, or that is repeated.
Problems that only report a warning:
- a
namingblock with no usable given names. The culture loads with no naming tradition. - an unknown spirit axis in
spirit. Townstead ignores that axis. - a
parentthat is not loaded, or a chain of parents that loops. The culture loads as a top culture.