@heroiclands/package-build 22.28.0 → 23.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +1 -1
  3. package/bin/content-commands.mjs +1 -1
  4. package/ci/content-format-reference.mjs +46 -0
  5. package/docs/api.md +125 -142
  6. package/docs/authoring/assets.md +1 -1
  7. package/docs/authoring/dates-and-calendars.md +12 -6
  8. package/docs/authoring/first-note.md +1 -1
  9. package/docs/authoring/frontmatter.md +2 -2
  10. package/docs/authoring/links-and-markup.md +145 -29
  11. package/docs/commands.md +8 -10
  12. package/docs/configuration.md +13 -11
  13. package/docs/content-format.md +3 -3
  14. package/docs/guides/book.md +59 -4
  15. package/docs/guides/icons.md +4 -5
  16. package/docs/guides/packs.md +6 -0
  17. package/docs/guides/reference-pages.md +21 -1
  18. package/docs/guides/release-and-deploy.md +17 -1
  19. package/docs/guides/site.md +17 -18
  20. package/docs/reference/format-details.md +904 -275
  21. package/docs/reference/note-types.md +282 -91
  22. package/docs/reference/theme-pages.md +58 -66
  23. package/engine/address-values.mjs +124 -4
  24. package/engine/address.mjs +44 -3
  25. package/engine/anchors.mjs +103 -3
  26. package/engine/art-slots.mjs +2 -9
  27. package/engine/base-compiler.mjs +25 -6
  28. package/engine/calendar-artifacts.mjs +4 -1
  29. package/engine/calendar-notes.mjs +166 -102
  30. package/engine/content-format-check.mjs +2 -3
  31. package/engine/content-format.mjs +44 -1
  32. package/engine/content-format.yaml +84 -16
  33. package/engine/content-images.mjs +10 -1
  34. package/engine/content-index.mjs +37 -9
  35. package/engine/content-links.mjs +24 -5
  36. package/engine/content-tables.mjs +24 -3
  37. package/engine/data-keys.mjs +347 -0
  38. package/engine/derived-sections.mjs +322 -0
  39. package/engine/diagnostics.mjs +28 -0
  40. package/engine/event-fields.mjs +187 -0
  41. package/engine/event-rows.mjs +126 -0
  42. package/engine/event-views.mjs +305 -0
  43. package/engine/exported-scene.mjs +29 -53
  44. package/engine/frontmatter-lint.mjs +103 -77
  45. package/engine/frontmatter.mjs +7 -2
  46. package/engine/generate.mjs +53 -0
  47. package/engine/generated-sections.mjs +223 -0
  48. package/engine/heading-attributes.mjs +4 -2
  49. package/engine/helpers.mjs +12 -1
  50. package/engine/holdings.mjs +12 -33
  51. package/engine/ids.mjs +17 -11
  52. package/engine/index.mjs +4 -4
  53. package/engine/infobox-render.mjs +21 -6
  54. package/engine/infobox.mjs +217 -99
  55. package/engine/journals.mjs +104 -47
  56. package/engine/literature-notes.mjs +136 -0
  57. package/engine/literature-works.mjs +161 -0
  58. package/engine/map-graphviz.mjs +4 -18
  59. package/engine/markdown-expressions.mjs +116 -11
  60. package/engine/metadata-index.mjs +34 -0
  61. package/engine/near-miss.mjs +90 -0
  62. package/engine/note-addresses.mjs +75 -19
  63. package/engine/note-dates.mjs +5 -3
  64. package/engine/note-event-terms.mjs +364 -0
  65. package/engine/note-events.mjs +823 -0
  66. package/engine/note-vocabulary.mjs +195 -92
  67. package/engine/office-holders.mjs +20 -54
  68. package/engine/packagebuild-index.mjs +16 -1
  69. package/engine/pdf-build.mjs +97 -60
  70. package/engine/pdf-index.mjs +263 -0
  71. package/engine/pdf-render.mjs +47 -5
  72. package/engine/place-relation-terms.mjs +174 -0
  73. package/engine/place-relations.mjs +72 -160
  74. package/engine/rank-ladder.mjs +14 -41
  75. package/engine/reckoning-markers.mjs +2 -0
  76. package/engine/region-events.mjs +6 -12
  77. package/engine/scenes.mjs +73 -468
  78. package/engine/site-build.mjs +74 -85
  79. package/engine/site-index.mjs +3 -1
  80. package/engine/site-maps.mjs +43 -29
  81. package/engine/site-preview.mjs +40 -31
  82. package/engine/social-ties.mjs +2 -1
  83. package/engine/sql-tables.mjs +212 -9
  84. package/engine/standing-terms.mjs +145 -6
  85. package/engine/standings.mjs +37 -49
  86. package/engine/stub-lint.mjs +6 -0
  87. package/engine/web-wikilinks.mjs +21 -1
  88. package/engine/wikilink-syntax.mjs +34 -4
  89. package/engine/wikilinks.mjs +27 -2
  90. package/hugo-theme/layouts/partials/infobox/entry.html +4 -1
  91. package/hugo-theme/layouts/partials/page-body.html +0 -2
  92. package/hugo-theme/static/css/style.css +25 -55
  93. package/package.json +1 -2
  94. package/packagebuild-metadata.jsonl +13 -13
  95. package/sohl/default-item-art.mjs +6 -6
  96. package/sohl/note-schemas.mjs +8 -73
  97. package/types/engine/address-values.d.mts +50 -3
  98. package/types/engine/address.d.mts +21 -0
  99. package/types/engine/anchors.d.mts +49 -2
  100. package/types/engine/art-slots.d.mts +1 -1
  101. package/types/engine/base-compiler.d.mts +13 -4
  102. package/types/engine/calendar-notes.d.mts +7 -0
  103. package/types/engine/content-format.d.mts +52 -0
  104. package/types/engine/content-images.d.mts +5 -1
  105. package/types/engine/content-tables.d.mts +9 -1
  106. package/types/engine/data-keys.d.mts +145 -0
  107. package/types/engine/derived-sections.d.mts +73 -0
  108. package/types/engine/diagnostics.d.mts +15 -0
  109. package/types/engine/event-fields.d.mts +99 -0
  110. package/types/engine/event-rows.d.mts +12 -0
  111. package/types/engine/event-views.d.mts +67 -0
  112. package/types/engine/exported-scene.d.mts +5 -2
  113. package/types/engine/frontmatter-lint.d.mts +3 -3
  114. package/types/engine/generated-sections.d.mts +143 -0
  115. package/types/engine/holdings.d.mts +6 -20
  116. package/types/engine/ids.d.mts +15 -12
  117. package/types/engine/index.d.mts +1 -1
  118. package/types/engine/infobox.d.mts +13 -3
  119. package/types/engine/journals.d.mts +24 -11
  120. package/types/engine/literature-notes.d.mts +29 -0
  121. package/types/engine/literature-works.d.mts +67 -0
  122. package/types/engine/map-graphviz.d.mts +2 -10
  123. package/types/engine/markdown-expressions.d.mts +12 -3
  124. package/types/engine/near-miss.d.mts +42 -0
  125. package/types/engine/note-addresses.d.mts +7 -1
  126. package/types/engine/note-event-terms.d.mts +68 -0
  127. package/types/engine/note-events.d.mts +71 -0
  128. package/types/engine/note-vocabulary.d.mts +37 -8
  129. package/types/engine/office-holders.d.mts +3 -0
  130. package/types/engine/pdf-index.d.mts +35 -0
  131. package/types/engine/pdf-render.d.mts +8 -2
  132. package/types/engine/place-relation-terms.d.mts +83 -0
  133. package/types/engine/place-relations.d.mts +11 -66
  134. package/types/engine/rank-ladder.d.mts +2 -0
  135. package/types/engine/region-events.d.mts +6 -12
  136. package/types/engine/scenes.d.mts +6 -32
  137. package/types/engine/site-build.d.mts +8 -22
  138. package/types/engine/site-maps.d.mts +15 -7
  139. package/types/engine/sql-tables.d.mts +77 -2
  140. package/types/engine/standing-terms.d.mts +37 -4
  141. package/types/engine/standings.d.mts +14 -9
  142. package/types/engine/wikilink-syntax.d.mts +20 -0
  143. package/types/engine/wikilinks.d.mts +3 -2
  144. package/docs/guides/government-migration.md +0 -52
  145. package/engine/itinerary-scenes.mjs +0 -166
  146. package/engine/lore-events.mjs +0 -197
  147. package/engine/map-notes.mjs +0 -1309
  148. package/engine/map-raster.mjs +0 -51
  149. package/hugo-theme/layouts/partials/holdings/entry.html +0 -21
  150. package/hugo-theme/layouts/partials/holdings/kind-groups.html +0 -71
  151. package/hugo-theme/layouts/partials/holdings.html +0 -61
  152. package/hugo-theme/layouts/partials/place-map.html +0 -9
  153. package/types/engine/itinerary-scenes.d.mts +0 -29
  154. package/types/engine/lore-events.d.mts +0 -14
  155. package/types/engine/map-notes.d.mts +0 -297
  156. package/types/engine/map-raster.d.mts +0 -8
@@ -37,10 +37,17 @@ These fields are accepted by every note type. A field's value can still be irrel
37
37
  | `data.id` | string | A fixed document identity when the derived identity is unsuitable. |
38
38
  | `data.pack` | string | The shared compendium route, with a system block overriding it. |
39
39
  | `data.packFolder` | an Address, or a map of Addresses keyed by pack | The shared compendium folder Address, with a system block overriding it. |
40
- | `data.harnworld` | map | HârnWorld source details shared by every system. |
40
+ | `data.harnworld` | `{ realm?, ritual? }` | HârnWorld source details shared by every system — `realm` and `ritual`. |
41
41
  | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
42
42
  | `data.banner` | an Address | The page's hero image — an `image` address, cut to 1792×768. Reaches no compiled document. |
43
43
 
44
+ **Inner keys** — a key a field's value does not declare is an error at its own line and column.
45
+
46
+ | Key | Shape | Required | Meaning |
47
+ | ----------------------- | --------------- | -------- | --------------------------------------------- |
48
+ | `data.harnworld.realm` | a string | no | The HârnWorld realm the subject belongs to. |
49
+ | `data.harnworld.ritual` | list of strings | no | The HârnWorld religions the subject observes. |
50
+
44
51
  ## Type-specific fields
45
52
 
46
53
  ### being
@@ -49,10 +56,9 @@ These fields are accepted by every note type. A field's value can still be irrel
49
56
 
50
57
  | Field | Shape | Meaning |
51
58
  | -------------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
52
- | `data.social` | map | The being's social profile. |
53
59
  | `data.tokenIcon` | an Address | What a token on the canvas wears — an `icon` address; unset, it follows `icon`. |
54
60
  | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
55
- | `data.archetypes` | list | Archetypal behaviours the being fits. |
61
+ | `data.archetypes` | list of strings | Archetypal behaviours the being fits. |
56
62
  | `data.occupation` | string | What the being does for a living. |
57
63
  | `data.stations` | list of Addresses | Stations the being holds. |
58
64
  | `data.lore` | list of Addresses | Lore concerning this being — the law it lives under, the customs it is subject to, the traditions it was raised in. |
@@ -74,7 +80,14 @@ These fields are accepted by every note type. A field's value can still be irrel
74
80
  | `data.appearance.hair_color` | string | Hair colour. |
75
81
  | `data.appearance.skin_color` | string | Skin colour. |
76
82
  | `data.appearance.complexion` | string or list | The skin's condition — one value, or several, because a face carries more than one at once. A single value means a list of one. |
77
- | `data.appearance.extra_features` | list | Anything else a stranger would notice. |
83
+ | `data.appearance.extra_features` | list of strings | Anything else a stranger would notice. |
84
+
85
+ **Inner keys** — a key a field's value does not declare is an error at its own line and column.
86
+
87
+ | Key | Shape | Required | Meaning |
88
+ | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | -------- | --------------------------------------------------------------------- |
89
+ | `data.affiliations.<Address>.rank` | the level on that body's own ladder, as a whole number — an ordinary member is `1`, and `0` is the rung for someone cast out | yes | The level on the body's own `governance.ranks` ladder. |
90
+ | `data.affiliations.<Address>.office` | a post from that body's `governance.offices` | no | A post the body names in its `governance.offices`, where one is held. |
78
91
 
79
92
  **System mappings**
80
93
 
@@ -104,22 +117,76 @@ These fields are accepted by every note type. A field's value can still be irrel
104
117
 
105
118
  **Subtypes:** `guild`, `order`, `polity`, `faithtradition`, `arcanetradition`, `spirittradition`, `lineage`, `venture`, `criminal`, `governmental`, `fellowship`.
106
119
 
107
- | Field | Shape | Meaning |
108
- | ------------------------- | ---------------------- | ----------------------------------------------------------------------------------------------- |
109
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
110
- | `data.demonym` | string | What one member is called — a Vylarian. |
111
- | `data.epithet` | string | The by-name it is known by — a god's, an order's, a company's. |
112
- | `data.symbol` | string | Its emblem in words: a feather atop a golden scale, a chisel carving a star. |
113
- | `data.governance.model` | string | How the affiliation is governed, where it is. |
114
- | `data.governance.summary` | string | A sentence on how the governance actually works. |
115
- | `data.governance.ranks` | list | The ladder of ranks the body confers — level, title, description. |
116
- | `data.governance.offices` | as authored | Named offices, each with a description and optional dated holders. |
117
- | `data.seat` | an Address | Where the affiliation's authority sits. |
118
- | `data.population` | number | How many people it counts. |
119
- | `data.economy` | list of Addresses | What its economic life runs on — currencies, banking bodies, goods. |
120
- | `data.lore` | list of Addresses | Lore concerning it — the peoples it draws on, the god a faith venerates, its law, its calendar. |
121
- | `data.parents` | list of Addresses | Affiliations it is subordinate to. |
122
- | `data.relations` | a map keyed by Address | Standing with other affiliations — aligned, unaligned, rival, nemesis. |
120
+ | Field | Shape | Meaning |
121
+ | ------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
122
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
123
+ | `data.events` | list of event entries | What happened to or at this subject — each entry one dated, attributed event: a founding, a war, a fall, or an occasion that recurs. |
124
+ | `data.demonym` | string | What one member is called — a Vylarian. |
125
+ | `data.epithet` | string | The by-name it is known by — a god's, an order's, a company's. |
126
+ | `data.symbol` | string | Its emblem in words: a feather atop a golden scale, a chisel carving a star. |
127
+ | `data.governance.model` | string | How the affiliation is governed, where it is. |
128
+ | `data.governance.summary` | string | A sentence on how the governance actually works. |
129
+ | `data.governance.ranks` | list of `{ level, title, description, lore? }` | The ladder of ranks the body confers — level, title, description. |
130
+ | `data.governance.offices` | a map of named offices | Named offices, each with a description and optional dated holders. |
131
+ | `data.seat` | an Address | Where the affiliation's authority sits. |
132
+ | `data.population` | number | How many people it counts. |
133
+ | `data.economy` | list of Addresses | What its economic life runs on — currencies, banking bodies, goods. |
134
+ | `data.lore` | list of Addresses | Lore concerning it — the peoples it draws on, the god a faith venerates, its law, its calendar. |
135
+ | `data.parents` | list of Addresses | Affiliations it is subordinate to. |
136
+ | `data.relations` | a map keyed by Address | Standing with other affiliations — aligned, unaligned, rival, nemesis. |
137
+
138
+ **Inner keys** — a key a field's value does not declare is an error at its own line and column.
139
+
140
+ | Key | Shape | Required | Meaning |
141
+ | ---------------------------------------------------- | ------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------- |
142
+ | `data.events[].id` | an address segment | no | The event's name within its note — lowercase letters and digits. |
143
+ | `data.events[].kind` | one `eventKind` value | no | What sort of thing happened. |
144
+ | `data.events[].depth` | one `depth` value | no | How far the event's history reaches. |
145
+ | `data.events[].when` | a date, or `"0.<day>"` | yes | When it happened, or the anchor and first instance of an event that recurs. |
146
+ | `data.events[].until` | a date | no | When a continuous event ended, or where a recurring series stopped. |
147
+ | `data.events[].recurs` | `{ every }` or `{ on }` | no | How further occurrences are found; absent for an event that happened once. |
148
+ | `data.events[].recurs.every` | a whole number of years, 1 or more | no | A period counted on the canonical axis from `when`. |
149
+ | `data.events[].recurs.on` | a list of dates, strictly increasing, each later than `when` | no | Recorded occurrences beyond the first, in place of a period. |
150
+ | `data.events[].summary` | a string | yes | What happened, stated plainly. |
151
+ | `data.events[].standing` | one `standing` value | no | What the world's evidence supports. |
152
+ | `data.events[].names` | `{ name, by, gloss? }[]` | no | The event's names in the world, each with who uses it. |
153
+ | `data.events[].names[].name` | a string | yes | One name the event goes by in the world. |
154
+ | `data.events[].names[].by` | an Address naming an `affiliation`, `lore`, `place`, `being` or `skill` note | yes | Who uses that name — a people, a polity, a faith, a place, a tongue. |
155
+ | `data.events[].names[].gloss` | a string | no | What the name means, or how it is used. |
156
+ | `data.events[].where` | `{ locus?, reach? }` | no | Where it happened, and where it was felt. |
157
+ | `data.events[].where.locus` | a list of Addresses, each defaulting to `place` | no | Where the event physically happened; each resolves to a place. |
158
+ | `data.events[].where.reach` | `{ place, how, knowledge, attributedTo? }[]` | no | Where the event was felt, and whether each place knows why. |
159
+ | `data.events[].where.reach[].place` | an Address, defaulting to `place` | yes | A place where the event was felt. |
160
+ | `data.events[].where.reach[].how` | a string | yes | One clause: a consequence someone in that place could notice. |
161
+ | `data.events[].where.reach[].knowledge` | one `knowledge` value | yes | Whether that place connects what it felt to this event. |
162
+ | `data.events[].where.reach[].attributedTo` | an Address, defaulting to `lore`, naming an event or a `lore` note | no | Only beside `knowledge: misattributed` — the cause that place names instead. |
163
+ | `data.events[].who` | `{ ref, role }[]` | no | Who took part, and as what. |
164
+ | `data.events[].who[].ref` | an Address naming a `being`, `affiliation` or `lore` note | yes | A participant — a being, a people, an affiliation. |
165
+ | `data.events[].who[].role` | one `role` value | yes | What the participant was to the event. |
166
+ | `data.events[].follows` | `{ event, how, note? }[]` | no | The earlier events this one follows from. |
167
+ | `data.events[].follows[].event` | an Address, defaulting to `lore`, anchored to an `event` where its note holds several | yes | The earlier event; it resolves to exactly one event. |
168
+ | `data.events[].follows[].how` | one `followsHow` value | yes | How this event follows from it. |
169
+ | `data.events[].follows[].note` | a string | no | One clause saying what connects the two. |
170
+ | `data.events[].accounts` | `{ by, says, agrees, withholds? }[]` | no | What each people, polity, faith or place says about it. |
171
+ | `data.events[].accounts[].by` | an Address naming an `affiliation`, `lore`, `place` or `being` note | yes | Who holds the account. |
172
+ | `data.events[].accounts[].says` | a string | yes | What they say happened, in their terms. |
173
+ | `data.events[].accounts[].agrees` | one `agrees` value | yes | How far their account agrees with `summary`. |
174
+ | `data.events[].accounts[].withholds` | a string | no | What they decline to say. |
175
+ | `data.events[].unresolved` | a list of strings | no | What the world itself has not settled. |
176
+ | `data.events[].sources` | a list of Addresses | no | The notes that state or support the event; each resolves. |
177
+ | `data.events[].stated` | `{ calendar, text }` | no | The date as one tradition writes it in its own reckoning. |
178
+ | `data.events[].stated.calendar` | an Address, or a lore shortcode | yes | The calendar that tradition reckons in — a `lore` note with `subType: calendar`. |
179
+ | `data.events[].stated.text` | a string | yes | The date as that tradition writes it. |
180
+ | `data.governance.ranks[].level` | a whole number — the rung's position on this body's own ladder | yes | The rung's position on the ladder; a member's `rank` names it. |
181
+ | `data.governance.ranks[].title` | what the standing is called | yes | What the standing is called. |
182
+ | `data.governance.ranks[].description` | what the standing is | yes | What the standing is. |
183
+ | `data.governance.ranks[].lore` | a lore Address | no | Lore saying more about the standing than a description holds. |
184
+ | `data.governance.offices.<name>.description` | a string | yes | What the office is. |
185
+ | `data.governance.offices.<name>.holders` | a list of `{ being, start?, end?, contested? }` | yes | Who has held it, each with the dates of the term. |
186
+ | `data.governance.offices.<name>.holders[].being` | a being Address | yes | Who held the office. |
187
+ | `data.governance.offices.<name>.holders[].start` | a date | no | When the term began; unstated, it began before anything recorded. |
188
+ | `data.governance.offices.<name>.holders[].end` | a date | no | When the term ended; unstated, the being holds the office now. |
189
+ | `data.governance.offices.<name>.holders[].contested` | `true` or `false` | no | The term may overlap another holder's. |
123
190
 
124
191
  **System mappings**
125
192
 
@@ -168,13 +235,15 @@ These fields are accepted by every note type. A field's value can still be irrel
168
235
 
169
236
  **Subtypes:** None.
170
237
 
171
- | Field | Shape | Meaning |
172
- | ----------------------- | ------ | ---------------------------------------------------------- |
173
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
174
- | `data.weight` | number | What the thing weighs. |
175
- | `data.value` | number | What the thing is worth. |
176
- | `data.quality` | number | How well it is made. |
177
- | `data.durability` | number | How much wear it takes before it fails. |
238
+ | Field | Shape | Meaning |
239
+ | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
240
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
241
+ | `data.weight` | number | What the thing weighs. |
242
+ | `data.value` | number | What the thing is worth. |
243
+ | `data.quality` | number | How well it is made. |
244
+ | `data.durability` | number | How much wear it takes before it fails. |
245
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
246
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
178
247
 
179
248
  **System mappings**
180
249
 
@@ -207,16 +276,18 @@ These fields are accepted by every note type. A field's value can still be irrel
207
276
 
208
277
  **Subtypes:** `mundane`, `exotic`, `elixir`.
209
278
 
210
- | Field | Shape | Meaning |
211
- | ----------------------- | ------ | ---------------------------------------------------------- |
212
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
213
- | `data.weight` | number | What the thing weighs. |
214
- | `data.value` | number | What the thing is worth. |
215
- | `data.quality` | number | How well it is made. |
216
- | `data.durability` | number | How much wear it takes before it fails. |
217
- | `data.quantity` | number | How many of the thing there are; one when unstated. |
218
- | `data.potency` | string | Potency — `na`, `mild`, `strong` or `great`. |
219
- | `data.strength` | number | Strength; the higher, the stronger. |
279
+ | Field | Shape | Meaning |
280
+ | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
281
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
282
+ | `data.weight` | number | What the thing weighs. |
283
+ | `data.value` | number | What the thing is worth. |
284
+ | `data.quality` | number | How well it is made. |
285
+ | `data.durability` | number | How much wear it takes before it fails. |
286
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
287
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
288
+ | `data.quantity` | number | How many of the thing there are; one when unstated. |
289
+ | `data.potency` | string | Potency — `na`, `mild`, `strong` or `great`. |
290
+ | `data.strength` | number | Strength; the higher, the stronger. |
220
291
 
221
292
  **System mappings**
222
293
 
@@ -232,14 +303,16 @@ These fields are accepted by every note type. A field's value can still be irrel
232
303
 
233
304
  **Subtypes:** None.
234
305
 
235
- | Field | Shape | Meaning |
236
- | ----------------------- | ------ | ---------------------------------------------------------- |
237
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
238
- | `data.weight` | number | What the thing weighs. |
239
- | `data.value` | number | What the thing is worth. |
240
- | `data.quality` | number | How well it is made. |
241
- | `data.durability` | number | How much wear it takes before it fails. |
242
- | `data.capacity` | number | How much it holds. |
306
+ | Field | Shape | Meaning |
307
+ | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
308
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
309
+ | `data.weight` | number | What the thing weighs. |
310
+ | `data.value` | number | What the thing is worth. |
311
+ | `data.quality` | number | How well it is made. |
312
+ | `data.durability` | number | How much wear it takes before it fails. |
313
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
314
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
315
+ | `data.capacity` | number | How much it holds. |
243
316
 
244
317
  **System mappings**
245
318
 
@@ -257,14 +330,16 @@ These fields are accepted by every note type. A field's value can still be irrel
257
330
 
258
331
  **Subtypes:** None.
259
332
 
260
- | Field | Shape | Meaning |
261
- | ----------------------- | ------ | ---------------------------------------------------------- |
262
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
263
- | `data.weight` | number | What the thing weighs. |
264
- | `data.value` | number | What the thing is worth. |
265
- | `data.quality` | number | How well it is made. |
266
- | `data.durability` | number | How much wear it takes before it fails. |
267
- | `data.quantity` | number | How many of the thing there are; one when unstated. |
333
+ | Field | Shape | Meaning |
334
+ | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
335
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
336
+ | `data.weight` | number | What the thing weighs. |
337
+ | `data.value` | number | What the thing is worth. |
338
+ | `data.quality` | number | How well it is made. |
339
+ | `data.durability` | number | How much wear it takes before it fails. |
340
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
341
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
342
+ | `data.quantity` | number | How many of the thing there are; one when unstated. |
268
343
 
269
344
  **System mappings**
270
345
 
@@ -327,14 +402,16 @@ These fields are accepted by every note type. A field's value can still be irrel
327
402
 
328
403
  **Subtypes:** `none`, `arrow`, `bolt`, `bullet`, `dart`, `other`.
329
404
 
330
- | Field | Shape | Meaning |
331
- | ----------------------- | ------ | ---------------------------------------------------------- |
332
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
333
- | `data.weight` | number | What the thing weighs. |
334
- | `data.value` | number | What the thing is worth. |
335
- | `data.quality` | number | How well it is made. |
336
- | `data.durability` | number | How much wear it takes before it fails. |
337
- | `data.quantity` | number | How many of the thing there are; one when unstated. |
405
+ | Field | Shape | Meaning |
406
+ | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
407
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
408
+ | `data.weight` | number | What the thing weighs. |
409
+ | `data.value` | number | What the thing is worth. |
410
+ | `data.quality` | number | How well it is made. |
411
+ | `data.durability` | number | How much wear it takes before it fails. |
412
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
413
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
414
+ | `data.quantity` | number | How many of the thing there are; one when unstated. |
338
415
 
339
416
  **System mappings**
340
417
 
@@ -396,13 +473,15 @@ These fields are accepted by every note type. A field's value can still be irrel
396
473
 
397
474
  **Subtypes:** None.
398
475
 
399
- | Field | Shape | Meaning |
400
- | ----------------------- | ------ | ---------------------------------------------------------- |
401
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
402
- | `data.weight` | number | What the thing weighs. |
403
- | `data.value` | number | What the thing is worth. |
404
- | `data.quality` | number | How well it is made. |
405
- | `data.durability` | number | How much wear it takes before it fails. |
476
+ | Field | Shape | Meaning |
477
+ | ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------ |
478
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
479
+ | `data.weight` | number | What the thing weighs. |
480
+ | `data.value` | number | What the thing is worth. |
481
+ | `data.quality` | number | How well it is made. |
482
+ | `data.durability` | number | How much wear it takes before it fails. |
483
+ | `data.made` | an Address of one event | The event in which the thing was made — `lore-forging`, or one event of a note as `place-ironfells#raising`. |
484
+ | `data.lost` | an Address of one event | The event in which the thing was lost — `lore-flood`, or one event of a note as `place-ironfells#sack`. |
406
485
 
407
486
  **System mappings**
408
487
 
@@ -417,7 +496,7 @@ These fields are accepted by every note type. A field's value can still be irrel
417
496
 
418
497
  ### lore
419
498
 
420
- **Subtypes:** `cosmology`, `deity`, `theology`, `arcana`, `spirit`, `economy`, `law`, `calendar`, `history`, `material`, `folk`, `culture`, `custom`, `bestiary`, `gathering`.
499
+ **Subtypes:** `cosmology`, `deity`, `theology`, `arcana`, `spirit`, `economy`, `law`, `calendar`, `history`, `material`, `folk`, `culture`, `custom`, `bestiary`, `gathering`, `literature`.
421
500
 
422
501
  Lore records in-world knowledge. A `culture` describes a people; a `custom` describes how they practice a rite, observance, or usage. A `material` describes a physical constituent and its qualities, which may vary by region. See the [lore subtype definitions](format-details.md#type-lore) for the complete vocabulary.
423
502
 
@@ -430,32 +509,92 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
430
509
  | `data.namedDays` | list of `{ name, abbreviation?, day }` | Names assigned to particular days of the year. |
431
510
  | `data.eras` | list of `{ shortcode, name, marker?, abbreviation?, proclaimedBy?, start, label? }` | The year-counts kept in this calendar. A marker names one era and uses these months. |
432
511
  | `data.formats` | map of named Calendaria format strings | Named patterns for reading and writing this calendar's dates. |
433
- | `data.events` | list of `{ when, until?, recurs? }` | This note's dated occurrences — a founding once, an anniversary that recurs, or a list of recorded happenings. |
512
+ | `data.culture` | an Address | The people whose work this is, as a culture lore note. |
513
+ | `data.form` | string | The kind of work in its people's own terms — an epic, a saga, a praise-song, an elegy. Free text. |
514
+ | `data.subjects` | list of Addresses | The beings, places, gods and other notes the work concerns, and each event it concerns, named as `place-ironfells#sack`. |
515
+ | `data.language` | an Address | The tongue the work is composed in, as a language skill note. |
516
+ | `data.events` | list of event entries | What happened to or at this subject — each entry one dated, attributed event: a founding, a war, a fall, or an occasion that recurs. |
517
+
518
+ **Inner keys** — a key a field's value does not declare is an error at its own line and column.
519
+
520
+ | Key | Shape | Required | Meaning |
521
+ | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------- |
522
+ | `data.months[].name` | a string | yes | What it is called. |
523
+ | `data.months[].abbreviation` | a string | no | Its short form, for a compact date. |
524
+ | `data.months[].days` | a whole number of days | yes | How many days the month holds. |
525
+ | `data.weekdays[].name` | a string | yes | What it is called. |
526
+ | `data.weekdays[].abbreviation` | a string | no | Its short form, for a compact date. |
527
+ | `data.seasons[].name` | a string | yes | What it is called. |
528
+ | `data.seasons[].abbreviation` | a string | no | Its short form, for a compact date. |
529
+ | `data.seasons[].start` | a one-based day of the year, as a whole number | yes | The day of the year the season begins. |
530
+ | `data.namedDays[].name` | a string | yes | What it is called. |
531
+ | `data.namedDays[].abbreviation` | a string | no | Its short form, for a compact date. |
532
+ | `data.namedDays[].day` | a one-based day of the year, as a whole number | yes | The day of the year it names. |
533
+ | `data.eras[].shortcode` | the era's own shortcode, unique within the calendar — an era is addressed `<calendar shortcode>.<era shortcode>` | yes | The era's own segment of `<calendar>.<era>`. |
534
+ | `data.eras[].name` | a string | yes | What it is called. |
535
+ | `data.eras[].marker` | uppercase letters and digits, beginning with a letter | no | The marker an authored date names the era by, unique across the corpus. |
536
+ | `data.eras[].abbreviation` | a string | no | Its short form, for a compact date. |
537
+ | `data.eras[].proclaimedBy` | an Address | no | The body that began the reckoning. |
538
+ | `data.eras[].start` | `null`, or the calendar year the era begins, as a whole number | yes | The calendar year the era begins; `null` for the era before year 1. |
539
+ | `data.eras[].label` | a string, or an `{ after, before }` map | no | How a date in the era reads, around one `{date}` slot. |
540
+ | `data.eras[].label.after` | a string with one `{date}` slot | no | How a date in the era reads. |
541
+ | `data.eras[].label.before` | a string with one `{date}` slot | no | How a date before the era's start reads. |
542
+ | `data.events[].id` | an address segment | no | The event's name within its note — lowercase letters and digits. |
543
+ | `data.events[].kind` | one `eventKind` value | no | What sort of thing happened. |
544
+ | `data.events[].depth` | one `depth` value | no | How far the event's history reaches. |
545
+ | `data.events[].when` | a date, or `"0.<day>"` | yes | When it happened, or the anchor and first instance of an event that recurs. |
546
+ | `data.events[].until` | a date | no | When a continuous event ended, or where a recurring series stopped. |
547
+ | `data.events[].recurs` | `{ every }` or `{ on }` | no | How further occurrences are found; absent for an event that happened once. |
548
+ | `data.events[].recurs.every` | a whole number of years, 1 or more | no | A period counted on the canonical axis from `when`. |
549
+ | `data.events[].recurs.on` | a list of dates, strictly increasing, each later than `when` | no | Recorded occurrences beyond the first, in place of a period. |
550
+ | `data.events[].summary` | a string | yes | What happened, stated plainly. |
551
+ | `data.events[].standing` | one `standing` value | no | What the world's evidence supports. |
552
+ | `data.events[].names` | `{ name, by, gloss? }[]` | no | The event's names in the world, each with who uses it. |
553
+ | `data.events[].names[].name` | a string | yes | One name the event goes by in the world. |
554
+ | `data.events[].names[].by` | an Address naming an `affiliation`, `lore`, `place`, `being` or `skill` note | yes | Who uses that name — a people, a polity, a faith, a place, a tongue. |
555
+ | `data.events[].names[].gloss` | a string | no | What the name means, or how it is used. |
556
+ | `data.events[].where` | `{ locus?, reach? }` | no | Where it happened, and where it was felt. |
557
+ | `data.events[].where.locus` | a list of Addresses, each defaulting to `place` | no | Where the event physically happened; each resolves to a place. |
558
+ | `data.events[].where.reach` | `{ place, how, knowledge, attributedTo? }[]` | no | Where the event was felt, and whether each place knows why. |
559
+ | `data.events[].where.reach[].place` | an Address, defaulting to `place` | yes | A place where the event was felt. |
560
+ | `data.events[].where.reach[].how` | a string | yes | One clause: a consequence someone in that place could notice. |
561
+ | `data.events[].where.reach[].knowledge` | one `knowledge` value | yes | Whether that place connects what it felt to this event. |
562
+ | `data.events[].where.reach[].attributedTo` | an Address, defaulting to `lore`, naming an event or a `lore` note | no | Only beside `knowledge: misattributed` — the cause that place names instead. |
563
+ | `data.events[].who` | `{ ref, role }[]` | no | Who took part, and as what. |
564
+ | `data.events[].who[].ref` | an Address naming a `being`, `affiliation` or `lore` note | yes | A participant — a being, a people, an affiliation. |
565
+ | `data.events[].who[].role` | one `role` value | yes | What the participant was to the event. |
566
+ | `data.events[].follows` | `{ event, how, note? }[]` | no | The earlier events this one follows from. |
567
+ | `data.events[].follows[].event` | an Address, defaulting to `lore`, anchored to an `event` where its note holds several | yes | The earlier event; it resolves to exactly one event. |
568
+ | `data.events[].follows[].how` | one `followsHow` value | yes | How this event follows from it. |
569
+ | `data.events[].follows[].note` | a string | no | One clause saying what connects the two. |
570
+ | `data.events[].accounts` | `{ by, says, agrees, withholds? }[]` | no | What each people, polity, faith or place says about it. |
571
+ | `data.events[].accounts[].by` | an Address naming an `affiliation`, `lore`, `place` or `being` note | yes | Who holds the account. |
572
+ | `data.events[].accounts[].says` | a string | yes | What they say happened, in their terms. |
573
+ | `data.events[].accounts[].agrees` | one `agrees` value | yes | How far their account agrees with `summary`. |
574
+ | `data.events[].accounts[].withholds` | a string | no | What they decline to say. |
575
+ | `data.events[].unresolved` | a list of strings | no | What the world itself has not settled. |
576
+ | `data.events[].sources` | a list of Addresses | no | The notes that state or support the event; each resolves. |
577
+ | `data.events[].stated` | `{ calendar, text }` | no | The date as one tradition writes it in its own reckoning. |
578
+ | `data.events[].stated.calendar` | an Address, or a lore shortcode | yes | The calendar that tradition reckons in — a `lore` note with `subType: calendar`. |
579
+ | `data.events[].stated.text` | a string | yes | The date as that tradition writes it. |
434
580
 
435
581
  ### map
436
582
 
437
583
  **Subtypes:** `battlemap`, `localmap`, `regionalmap`, `totm`.
438
584
 
439
- | Field | Shape | Meaning |
440
- | ---------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------- |
441
- | `data.scene` | as authored | A Foundry Scene export with all its authored fields. |
442
- | `data.fixup` | list | Asset address replacements in an exported Scene. |
443
- | `data.bgImage` | an Address | The map's background art — an `image` address. |
444
- | `data.scale` | as authored | Regional map distance per grid unit: {distance, unit}. |
445
- | `data.dimensions` | list | `[width, height]` in whole pixels — the art's own size. |
446
- | `data.pxPerGrid` | number | Whole pixels per grid square; must match the art. |
447
- | `data.navName` | string | Short name for the navigation bar. |
448
- | `data.levelName` | string | Name of the embedded level. |
449
- | `data.backgroundColor` | string | Colour shown where the art does not reach. |
450
- | `data.overlay` | string | Path to the foreground art. |
451
- | `data.walls` | as authored | Wall segments. |
452
- | `data.doors` | as authored | Doors. |
453
- | `data.lights` | as authored | Light sources. |
454
- | `data.tiles` | as authored | Tiles. |
455
- | `data.sounds` | as authored | Ambient sounds. |
456
- | `data.regions` | as authored | Regions and their behaviours. |
457
- | `data.notes` | as authored | Map pins, each a grid location and an anchor in this note's own body. |
458
- | `data.place` | an Address | The place this map depicts. Named here and not on the place, because a place has several maps and a map depicts one place. |
585
+ | Field | Shape | Meaning |
586
+ | ------------ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
587
+ | `data.scene` | an object — a Foundry Scene document as exported | The Foundry Scene as exported, passed through unchanged apart from `data.fixup` and its pins marked `#anchor`. Nothing inside it is checked; the book prints its levels' background images. |
588
+ | `data.fixup` | list of `{ path, type, value }` | Asset address replacements in an exported Scene. |
589
+ | `data.place` | an Address | The place this map depicts. Named here and not on the place, because a place has several maps and a map depicts one place. |
590
+
591
+ **Inner keys** — a key a field's value does not declare is an error at its own line and column.
592
+
593
+ | Key | Shape | Required | Meaning |
594
+ | -------------------- | --------------------------------- | -------- | ------------------------------------------------------- |
595
+ | `data.fixup[].path` | a property path into `data.scene` | yes | The exported field to replace, from `data.scene`. |
596
+ | `data.fixup[].type` | `address` | yes | What `value` is: `address`. |
597
+ | `data.fixup[].value` | an asset Address | yes | The asset Address whose path replaces the exported one. |
459
598
 
460
599
  ### place
461
600
 
@@ -463,6 +602,7 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
463
602
 
464
603
  | Field | Shape | Meaning |
465
604
  | -------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
605
+ | `data.events` | list of event entries | What happened to or at this subject — each entry one dated, attributed event: a founding, a war, a fall, or an occasion that recurs. |
466
606
  | `data.calendar` | an Address | Calendar used to display this place's dates. |
467
607
  | `data.demonym` | string | What a person from this place is called — a Vylarian. |
468
608
  | `data.purpose` | string | The reason this settlement, site, or structure exists, selected from its placeCharacter tags. |
@@ -489,6 +629,57 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
489
629
  | `data.moon.newOn` | a day-precision date | A day the body was new, written in the reference calendar. |
490
630
  | `data.moon.eclipses` | string | How often the body eclipses or is eclipsed — `never`, `rare`, `occasional` or `frequent`. |
491
631
 
632
+ **Inner keys** — a key a field's value does not declare is an error at its own line and column.
633
+
634
+ | Key | Shape | Required | Meaning |
635
+ | ------------------------------------------ | ------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------- |
636
+ | `data.events[].id` | an address segment | no | The event's name within its note — lowercase letters and digits. |
637
+ | `data.events[].kind` | one `eventKind` value | no | What sort of thing happened. |
638
+ | `data.events[].depth` | one `depth` value | no | How far the event's history reaches. |
639
+ | `data.events[].when` | a date, or `"0.<day>"` | yes | When it happened, or the anchor and first instance of an event that recurs. |
640
+ | `data.events[].until` | a date | no | When a continuous event ended, or where a recurring series stopped. |
641
+ | `data.events[].recurs` | `{ every }` or `{ on }` | no | How further occurrences are found; absent for an event that happened once. |
642
+ | `data.events[].recurs.every` | a whole number of years, 1 or more | no | A period counted on the canonical axis from `when`. |
643
+ | `data.events[].recurs.on` | a list of dates, strictly increasing, each later than `when` | no | Recorded occurrences beyond the first, in place of a period. |
644
+ | `data.events[].summary` | a string | yes | What happened, stated plainly. |
645
+ | `data.events[].standing` | one `standing` value | no | What the world's evidence supports. |
646
+ | `data.events[].names` | `{ name, by, gloss? }[]` | no | The event's names in the world, each with who uses it. |
647
+ | `data.events[].names[].name` | a string | yes | One name the event goes by in the world. |
648
+ | `data.events[].names[].by` | an Address naming an `affiliation`, `lore`, `place`, `being` or `skill` note | yes | Who uses that name — a people, a polity, a faith, a place, a tongue. |
649
+ | `data.events[].names[].gloss` | a string | no | What the name means, or how it is used. |
650
+ | `data.events[].where` | `{ locus?, reach? }` | no | Where it happened, and where it was felt. |
651
+ | `data.events[].where.locus` | a list of Addresses, each defaulting to `place` | no | Where the event physically happened; each resolves to a place. |
652
+ | `data.events[].where.reach` | `{ place, how, knowledge, attributedTo? }[]` | no | Where the event was felt, and whether each place knows why. |
653
+ | `data.events[].where.reach[].place` | an Address, defaulting to `place` | yes | A place where the event was felt. |
654
+ | `data.events[].where.reach[].how` | a string | yes | One clause: a consequence someone in that place could notice. |
655
+ | `data.events[].where.reach[].knowledge` | one `knowledge` value | yes | Whether that place connects what it felt to this event. |
656
+ | `data.events[].where.reach[].attributedTo` | an Address, defaulting to `lore`, naming an event or a `lore` note | no | Only beside `knowledge: misattributed` — the cause that place names instead. |
657
+ | `data.events[].who` | `{ ref, role }[]` | no | Who took part, and as what. |
658
+ | `data.events[].who[].ref` | an Address naming a `being`, `affiliation` or `lore` note | yes | A participant — a being, a people, an affiliation. |
659
+ | `data.events[].who[].role` | one `role` value | yes | What the participant was to the event. |
660
+ | `data.events[].follows` | `{ event, how, note? }[]` | no | The earlier events this one follows from. |
661
+ | `data.events[].follows[].event` | an Address, defaulting to `lore`, anchored to an `event` where its note holds several | yes | The earlier event; it resolves to exactly one event. |
662
+ | `data.events[].follows[].how` | one `followsHow` value | yes | How this event follows from it. |
663
+ | `data.events[].follows[].note` | a string | no | One clause saying what connects the two. |
664
+ | `data.events[].accounts` | `{ by, says, agrees, withholds? }[]` | no | What each people, polity, faith or place says about it. |
665
+ | `data.events[].accounts[].by` | an Address naming an `affiliation`, `lore`, `place` or `being` note | yes | Who holds the account. |
666
+ | `data.events[].accounts[].says` | a string | yes | What they say happened, in their terms. |
667
+ | `data.events[].accounts[].agrees` | one `agrees` value | yes | How far their account agrees with `summary`. |
668
+ | `data.events[].accounts[].withholds` | a string | no | What they decline to say. |
669
+ | `data.events[].unresolved` | a list of strings | no | What the world itself has not settled. |
670
+ | `data.events[].sources` | a list of Addresses | no | The notes that state or support the event; each resolves. |
671
+ | `data.events[].stated` | `{ calendar, text }` | no | The date as one tradition writes it in its own reckoning. |
672
+ | `data.events[].stated.calendar` | an Address, or a lore shortcode | yes | The calendar that tradition reckons in — a `lore` note with `subType: calendar`. |
673
+ | `data.events[].stated.text` | a string | yes | The date as that tradition writes it. |
674
+ | `data.borders[].to` | the other place — its shortcode, or its Address | yes | The other place, by Address; the type defaults to `place`. |
675
+ | `data.borders[].bearing` | one of N, NE, E, SE, S, SW, W, NW | yes | Where the other place lies from here. |
676
+ | `data.routes[].to` | the other place — its shortcode, or its Address | yes | The other place, by Address; the type defaults to `place`. |
677
+ | `data.routes[].bearing` | one of N, NE, E, SE, S, SW, W, NW | yes | Where the other place lies from here. |
678
+ | `data.routes[].mode` | one of land, boat, ship | yes | How the journey is travelled. |
679
+ | `data.routes[].days` | one of 1, 2, 3, 5, 10, 20, 30, 45, 60, 90, 180, 360 | yes | About how many days the journey takes, under normal conditions. |
680
+ | `data.routes[].terrain` | a list of terrains in travel order | no | The terrains crossed, in travel order, each crossable by the mode. |
681
+ | `data.routes[].leagues` | a distance in leagues | no | The distance, in leagues. |
682
+
492
683
  ### scenario
493
684
 
494
685
  **Subtypes:** `campaign`, `adventure`, `encounter`.
@@ -502,7 +693,7 @@ Lore records in-world knowledge. A `culture` describes a people; a `custom` desc
502
693
  | `data.follows` | list of Addresses | Scenarios that should be played before this one. |
503
694
  | `data.status` | string | `draft`, `playtested` or `published`. |
504
695
  | `data.party.size` | string | `solo`, `small`, `standard`, `large` or `host`. |
505
- | `data.party.archetypes` | list | Archetypes the scenario is written for. |
696
+ | `data.party.archetypes` | list of strings | Archetypes the scenario is written for. |
506
697
 
507
698
  ### doc
508
699