@optolith/database-schema 0.78.0 → 0.79.1

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 (142) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/gen/types.d.ts +163 -2
  3. package/lib/types/Advantage.d.ts +29 -0
  4. package/lib/types/Advantage.js +2 -1
  5. package/lib/types/Disadvantage.d.ts +29 -0
  6. package/lib/types/Disadvantage.js +2 -1
  7. package/lib/types/_ActivatableSelectOptions.d.ts +930 -1
  8. package/lib/types/_ActivatableSelectOptions.js +138 -117
  9. package/lib/types/equipment/item/Armor.d.ts +12 -1
  10. package/lib/types/equipment/item/Armor.js +14 -5
  11. package/lib/types/equipment/item/BandageOrRemedy.d.ts +12 -1
  12. package/lib/types/equipment/item/CeremonialItem.d.ts +12 -1
  13. package/lib/types/equipment/item/Clothes.d.ts +12 -1
  14. package/lib/types/equipment/item/Container.d.ts +12 -1
  15. package/lib/types/equipment/item/EquipmentCategory.d.ts +15 -0
  16. package/lib/types/equipment/item/EquipmentCategory.js +5 -0
  17. package/lib/types/equipment/item/EquipmentOfBlessedOnes.d.ts +12 -1
  18. package/lib/types/equipment/item/IlluminationLightSource.d.ts +21 -1
  19. package/lib/types/equipment/item/IlluminationLightSource.js +1 -1
  20. package/lib/types/equipment/item/IlluminationRefillOrSupply.d.ts +12 -1
  21. package/lib/types/equipment/item/Item.d.ts +21 -1
  22. package/lib/types/equipment/item/Item.js +19 -9
  23. package/lib/types/equipment/item/Liebesspielzeug.d.ts +12 -1
  24. package/lib/types/equipment/item/LuxuryGood.d.ts +12 -1
  25. package/lib/types/equipment/item/MagicalArtifact.d.ts +12 -1
  26. package/lib/types/equipment/item/MusicalInstrument.d.ts +12 -1
  27. package/lib/types/equipment/item/OrienteeringAid.d.ts +12 -1
  28. package/lib/types/equipment/item/RopeOrChain.d.ts +12 -1
  29. package/lib/types/equipment/item/Stationery.d.ts +12 -1
  30. package/lib/types/equipment/item/ThievesTool.d.ts +12 -1
  31. package/lib/types/equipment/item/TravelGearOrTool.d.ts +12 -1
  32. package/lib/types/equipment/item/WeaponAccessory.d.ts +12 -1
  33. package/lib/types/equipment/item/_Item.d.ts +24 -2
  34. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.d.ts +29 -0
  35. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.js +2 -1
  36. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.d.ts +29 -0
  37. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.js +2 -1
  38. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.d.ts +29 -0
  39. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.js +2 -1
  40. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.d.ts +29 -0
  41. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.js +2 -1
  42. package/lib/types/specialAbility/AncestorGlyph.d.ts +29 -0
  43. package/lib/types/specialAbility/AncestorGlyph.js +2 -1
  44. package/lib/types/specialAbility/BlessedTradition.d.ts +29 -0
  45. package/lib/types/specialAbility/BlessedTradition.js +2 -1
  46. package/lib/types/specialAbility/BrawlingSpecialAbility.d.ts +29 -0
  47. package/lib/types/specialAbility/BrawlingSpecialAbility.js +2 -1
  48. package/lib/types/specialAbility/CeremonialItemSpecialAbility.d.ts +29 -0
  49. package/lib/types/specialAbility/CeremonialItemSpecialAbility.js +2 -1
  50. package/lib/types/specialAbility/CombatSpecialAbility.d.ts +29 -0
  51. package/lib/types/specialAbility/CombatSpecialAbility.js +2 -1
  52. package/lib/types/specialAbility/CombatStyleSpecialAbility.d.ts +29 -0
  53. package/lib/types/specialAbility/CombatStyleSpecialAbility.js +3 -2
  54. package/lib/types/specialAbility/CommandSpecialAbility.d.ts +29 -0
  55. package/lib/types/specialAbility/CommandSpecialAbility.js +2 -1
  56. package/lib/types/specialAbility/FamiliarSpecialAbility.d.ts +29 -0
  57. package/lib/types/specialAbility/FamiliarSpecialAbility.js +2 -1
  58. package/lib/types/specialAbility/FatePointSexSpecialAbility.d.ts +29 -0
  59. package/lib/types/specialAbility/FatePointSexSpecialAbility.js +2 -1
  60. package/lib/types/specialAbility/FatePointSpecialAbility.d.ts +29 -0
  61. package/lib/types/specialAbility/FatePointSpecialAbility.js +2 -1
  62. package/lib/types/specialAbility/GeneralSpecialAbility.d.ts +29 -0
  63. package/lib/types/specialAbility/GeneralSpecialAbility.js +2 -1
  64. package/lib/types/specialAbility/KarmaSpecialAbility.d.ts +29 -0
  65. package/lib/types/specialAbility/KarmaSpecialAbility.js +2 -1
  66. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.d.ts +29 -0
  67. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.js +2 -1
  68. package/lib/types/specialAbility/LycantropicGift.d.ts +29 -0
  69. package/lib/types/specialAbility/LycantropicGift.js +2 -1
  70. package/lib/types/specialAbility/MagicStyleSpecialAbility.d.ts +29 -0
  71. package/lib/types/specialAbility/MagicStyleSpecialAbility.js +2 -1
  72. package/lib/types/specialAbility/MagicalSpecialAbility.d.ts +29 -0
  73. package/lib/types/specialAbility/MagicalSpecialAbility.js +2 -1
  74. package/lib/types/specialAbility/MagicalTradition.d.ts +29 -0
  75. package/lib/types/specialAbility/MagicalTradition.js +2 -1
  76. package/lib/types/specialAbility/PactGift.d.ts +29 -0
  77. package/lib/types/specialAbility/PactGift.js +2 -1
  78. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.d.ts +29 -0
  79. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.js +2 -1
  80. package/lib/types/specialAbility/Sermon.d.ts +29 -0
  81. package/lib/types/specialAbility/Sermon.js +2 -1
  82. package/lib/types/specialAbility/SexSpecialAbility.d.ts +29 -0
  83. package/lib/types/specialAbility/SexSpecialAbility.js +2 -1
  84. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.d.ts +29 -0
  85. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.js +2 -1
  86. package/lib/types/specialAbility/SkillStyleSpecialAbility.d.ts +29 -0
  87. package/lib/types/specialAbility/SkillStyleSpecialAbility.js +2 -1
  88. package/lib/types/specialAbility/VampiricGift.d.ts +29 -0
  89. package/lib/types/specialAbility/VampiricGift.js +2 -1
  90. package/lib/types/specialAbility/Vision.d.ts +29 -0
  91. package/lib/types/specialAbility/Vision.js +2 -1
  92. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.d.ts +1 -1493
  93. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.js +2 -34
  94. package/lib/types/traditionArtifacts/AttireEnchantment.d.ts +1 -1493
  95. package/lib/types/traditionArtifacts/AttireEnchantment.js +2 -34
  96. package/lib/types/traditionArtifacts/Beutelzauber.d.ts +1 -1493
  97. package/lib/types/traditionArtifacts/Beutelzauber.js +2 -34
  98. package/lib/types/traditionArtifacts/BowlEnchantment.d.ts +1 -1493
  99. package/lib/types/traditionArtifacts/BowlEnchantment.js +2 -34
  100. package/lib/types/traditionArtifacts/CauldronEnchantment.d.ts +1 -1493
  101. package/lib/types/traditionArtifacts/CauldronEnchantment.js +5 -36
  102. package/lib/types/traditionArtifacts/ChronicleEnchantment.d.ts +1 -1493
  103. package/lib/types/traditionArtifacts/ChronicleEnchantment.js +2 -34
  104. package/lib/types/traditionArtifacts/DaggerRitual.d.ts +1 -1499
  105. package/lib/types/traditionArtifacts/DaggerRitual.js +5 -34
  106. package/lib/types/traditionArtifacts/FoolsHatEnchantment.d.ts +1 -1493
  107. package/lib/types/traditionArtifacts/FoolsHatEnchantment.js +2 -34
  108. package/lib/types/traditionArtifacts/Haubenzauber.d.ts +1 -1493
  109. package/lib/types/traditionArtifacts/Haubenzauber.js +2 -34
  110. package/lib/types/traditionArtifacts/Hauerkettenzauber.d.ts +1 -464
  111. package/lib/types/traditionArtifacts/Hauerkettenzauber.js +2 -31
  112. package/lib/types/traditionArtifacts/InstrumentEnchantment.d.ts +1 -1493
  113. package/lib/types/traditionArtifacts/InstrumentEnchantment.js +2 -34
  114. package/lib/types/traditionArtifacts/Keulenzauber.d.ts +1 -464
  115. package/lib/types/traditionArtifacts/Keulenzauber.js +2 -31
  116. package/lib/types/traditionArtifacts/Krallenkettenzauber.d.ts +1 -1493
  117. package/lib/types/traditionArtifacts/Krallenkettenzauber.js +2 -34
  118. package/lib/types/traditionArtifacts/Kristallkugelzauber.d.ts +1 -1493
  119. package/lib/types/traditionArtifacts/Kristallkugelzauber.js +2 -34
  120. package/lib/types/traditionArtifacts/OrbEnchantment.d.ts +1 -1493
  121. package/lib/types/traditionArtifacts/OrbEnchantment.js +2 -34
  122. package/lib/types/traditionArtifacts/RingEnchantment.d.ts +1 -1493
  123. package/lib/types/traditionArtifacts/RingEnchantment.js +2 -34
  124. package/lib/types/traditionArtifacts/Schweinetrommelzauber.d.ts +1 -464
  125. package/lib/types/traditionArtifacts/Schweinetrommelzauber.js +2 -31
  126. package/lib/types/traditionArtifacts/SickleRitual.d.ts +1 -1493
  127. package/lib/types/traditionArtifacts/SickleRitual.js +2 -34
  128. package/lib/types/traditionArtifacts/SpellSwordEnchantment.d.ts +1 -1493
  129. package/lib/types/traditionArtifacts/SpellSwordEnchantment.js +2 -34
  130. package/lib/types/traditionArtifacts/StaffEnchantment.d.ts +1 -1493
  131. package/lib/types/traditionArtifacts/StaffEnchantment.js +2 -34
  132. package/lib/types/traditionArtifacts/ToyEnchantment.d.ts +1 -1493
  133. package/lib/types/traditionArtifacts/ToyEnchantment.js +2 -34
  134. package/lib/types/traditionArtifacts/Trinkhornzauber.d.ts +1 -1493
  135. package/lib/types/traditionArtifacts/Trinkhornzauber.js +2 -34
  136. package/lib/types/traditionArtifacts/WandEnchantment.d.ts +1 -1455
  137. package/lib/types/traditionArtifacts/WandEnchantment.js +3 -33
  138. package/lib/types/traditionArtifacts/WeaponEnchantment.d.ts +1 -1493
  139. package/lib/types/traditionArtifacts/WeaponEnchantment.js +2 -34
  140. package/lib/types/traditionArtifacts/_shared.d.ts +10 -0
  141. package/lib/types/traditionArtifacts/_shared.js +40 -3
  142. package/package.json +1 -1
@@ -18,6 +18,10 @@ Note that this is only a full definition of options for simple logic that can be
18
18
  comment: `An entry category with optional further configuration. All available entries from the specified categories will be included as separate select options. You can also specify a set of groups that should only be included. Groups not mentioned will be excluded then.`,
19
19
  type: DB.IncludeIdentifier(SelectOptionCategory),
20
20
  }),
21
+ rules: DB.Optional({
22
+ comment: `Rules for how options can be selected and relate to each other. Defaults to a single predefined option if the entry has select options defined, otherwise undefined.`,
23
+ type: DB.IncludeIdentifier(SelectOptionRules),
24
+ }),
21
25
  }, { minProperties: 1 }),
22
26
  });
23
27
  export const select_options = DB.Optional({
@@ -101,123 +105,140 @@ export const explicit_select_options = DB.Required({
101
105
  Note that this is only a full definition of options for simple logic that can be made explicit using the more detailed configuration for both derived categories and explicit options. There are quite a few entries whose option logic cannot be fully represented here, so that it needs to be implemented manually.`,
102
106
  type: DB.ChildEntities(GeneralSelectOption),
103
107
  });
104
- // "Options": {
105
- // "$comment": "Unfinished generalized options handling.",
106
- // "type": "array",
107
- // "minItems": 1,
108
- // "items": {
109
- // "oneOf": [
110
- // {
111
- // "type": "object",
112
- // "properties": {
113
- // "type": { "const": "List" },
114
- // "value": {
115
- // "type": "object",
116
- // "properties": {
117
- // "list": {
118
- // "oneOf": [
119
- // {
120
- // "type": "object",
121
- // "properties": {
122
- // "type": { "const": "Generate" },
123
- // "value": { "$ref": "#/definitions/SelectOptionCategories" }
124
- // },
125
- // "required": ["type", "value"],
126
- // "additionalProperties": false
127
- // },
128
- // {
129
- // "type": "object",
130
- // "properties": {
131
- // "type": { "const": "Explicit" },
132
- // "value": { "$ref": "#/definitions/SelectOptions" }
133
- // },
134
- // "required": ["type", "value"],
135
- // "additionalProperties": false
136
- // }
137
- // ]
138
- // },
139
- // "multiple": {
140
- // "description": "Sometimes, multiple options from a single list have to or can be chosen. Its possible to define a number of options that have to be selected or a range of numbers of options that can be selected.",
141
- // "oneOf": [
142
- // {
143
- // "type": "object",
144
- // "properties": {
145
- // "type": { "const": "Fixed" },
146
- // "value": {
147
- // "description": "The number of options that have to be selected.",
148
- // "type": "integer",
149
- // "minimum": 2
150
- // }
151
- // },
152
- // "required": ["type", "value"],
153
- // "additionalProperties": false
154
- // },
155
- // {
156
- // "type": "object",
157
- // "properties": {
158
- // "type": { "const": "Range" },
159
- // "value": {
160
- // "type": "object",
161
- // "properties": {
162
- // "min": {
163
- // "description": "The minimum number of options that need to be selected. If left empty it defaults to 1.",
164
- // "type": "integer",
165
- // "minimum": 2
166
- // },
167
- // "max": {
168
- // "description": "The maximum number of options that need to be selected.",
169
- // "type": "integer",
170
- // "minimum": 2
171
- // }
172
- // },
173
- // "required": ["max"],
174
- // "additionalProperties": false
175
- // }
176
- // },
177
- // "required": ["type", "value"],
178
- // "additionalProperties": false
179
- // }
180
- // ]
181
- // }
182
- // },
183
- // "required": ["list"],
184
- // "additionalProperties": false
185
- // }
186
- // },
187
- // "required": ["type", "value"],
188
- // "additionalProperties": false
189
- // },
190
- // {
191
- // "type": "object",
192
- // "properties": {
193
- // "type": { "const": "TextInput" },
194
- // "value": {
195
- // "type": "object",
196
- // "properties": {
197
- // "label": {
198
- // "type": "object",
199
- // "description": "All translations for the entry, identified by IETF language tag (BCP47).",
200
- // "patternProperties": {
201
- // "^[a-z]{2}-[A-Z]{2}$": {
202
- // "description": "The text input label.",
203
- // "type": "string",
204
- // "minLength": 1
205
- // }
206
- // },
207
- // "minProperties": 1,
208
- // "additionalProperties": false
209
- // }
210
- // },
211
- // "required": ["label"],
212
- // "additionalProperties": false
213
- // }
214
- // },
215
- // "required": ["type", "value"],
216
- // "additionalProperties": false
217
- // }
218
- // ]
219
- // }
220
- // },
108
+ const ChildEntityForSelectOption = DB.Enum(import.meta.url, {
109
+ name: "ChildEntityForSelectOption",
110
+ comment: `The possible child entities for select options.`,
111
+ values: () => ({
112
+ SkillApplication: DB.EnumCase({ type: null }),
113
+ }),
114
+ });
115
+ const ChildSelectOptionRuleValue = DB.TypeAlias(import.meta.url, {
116
+ name: "ChildSelectOptionRuleValue",
117
+ type: () => DB.Object({
118
+ parentIndex: DB.Required({
119
+ comment: "The index of the parent select option in the list of selected options.",
120
+ type: DB.Integer({ minimum: 0 }),
121
+ }),
122
+ entity: DB.Required({
123
+ comment: "The entity you can choose from.",
124
+ type: DB.IncludeIdentifier(ChildEntityForSelectOption),
125
+ }),
126
+ }),
127
+ });
128
+ const PredefinedOrTextInputSelectOptionRuleValue = DB.TypeAlias(import.meta.url, {
129
+ name: "PredefinedOrTextInputSelectOptionRuleValue",
130
+ type: () => DB.Object({
131
+ translations: NestedTranslationMap(DB.Required, "PredefinedOrTextInputSelectOptionRuleValue", DB.Object({
132
+ inputLabel: DB.Required({
133
+ comment: "The label for the text input field.",
134
+ type: DB.String({ minLength: 1 }),
135
+ }),
136
+ optionLabel: DB.Required({
137
+ comment: "The label for the extra option in the list of select options that unlocks the text input field.",
138
+ type: DB.String({ minLength: 1 }),
139
+ }),
140
+ })),
141
+ }),
142
+ });
143
+ const TextInputSelectOptionRuleValue = DB.TypeAlias(import.meta.url, {
144
+ name: "TextInputSelectOptionRuleValue",
145
+ type: () => DB.Object({
146
+ translations: NestedTranslationMap(DB.Required, "TextInputSelectOptionRuleValue", DB.Object({
147
+ inputLabel: DB.Required({
148
+ comment: "The label for the text input field.",
149
+ type: DB.String({ minLength: 1 }),
150
+ }),
151
+ })),
152
+ }),
153
+ });
154
+ const SelectOptionRuleValue = DB.Enum(import.meta.url, {
155
+ name: "SelectOptionRuleValue",
156
+ comment: `The possible values for select option rules.`,
157
+ values: () => ({
158
+ Predefined: DB.EnumCase({
159
+ comment: "An entry that has been defined explicitly or derived from a category.",
160
+ type: null,
161
+ }),
162
+ PredefinedOrTextInput: DB.EnumCase({
163
+ comment: "An entry that has been defined explicitly or derived from a category, or a text input if the user sees none of the predefined options fit.",
164
+ type: DB.IncludeIdentifier(PredefinedOrTextInputSelectOptionRuleValue),
165
+ }),
166
+ Child: DB.EnumCase({
167
+ comment: "A child instance of a selected entry, e.g. a skill application for a skill.",
168
+ type: DB.IncludeIdentifier(ChildSelectOptionRuleValue),
169
+ }),
170
+ TextInput: DB.EnumCase({
171
+ comment: "A text input field that can be filled in by the user.",
172
+ type: DB.IncludeIdentifier(TextInputSelectOptionRuleValue),
173
+ }),
174
+ }),
175
+ });
176
+ const SelectOptionRuleMultiple = DB.Enum(import.meta.url, {
177
+ name: "SelectOptionRuleMultiple",
178
+ values: () => ({
179
+ Constant: DB.EnumCase({
180
+ comment: "A fixed number of options that have to be selected.",
181
+ type: DB.Integer({ minimum: 2 }),
182
+ }),
183
+ Range: DB.EnumCase({
184
+ comment: "A range of numbers of options that can be selected.",
185
+ type: DB.Object({
186
+ min: DB.Optional({
187
+ comment: "The minimum number of options that need to be selected. If left empty it defaults to 1.",
188
+ type: DB.Integer({ minimum: 2 }),
189
+ }),
190
+ max: DB.Required({
191
+ comment: "The maximum number of options that need to be selected.",
192
+ type: DB.Integer({ minimum: 2 }),
193
+ }),
194
+ }),
195
+ }),
196
+ }),
197
+ });
198
+ const SelectOptionRule = DB.TypeAlias(import.meta.url, {
199
+ name: "SelectOptionRule",
200
+ comment: `A rule for how options can be selected and relate to each other.`,
201
+ type: () => DB.Object({
202
+ value: DB.Required({
203
+ comment: "The value of the rule.",
204
+ type: DB.IncludeIdentifier(SelectOptionRuleValue),
205
+ }),
206
+ multiple: DB.Optional({
207
+ comment: "Sometimes, multiple options from a single list have to or can be chosen.",
208
+ type: DB.IncludeIdentifier(SelectOptionRuleMultiple),
209
+ }),
210
+ }),
211
+ });
212
+ export const SelectOptionRules = DB.TypeAlias(import.meta.url, {
213
+ name: "SelectOptionRules",
214
+ comment: `Rules for how options can be selected and relate to each other. Defaults to a single predefined option if the entry has select options defined, otherwise undefined.`,
215
+ type: () => DB.Array(DB.IncludeIdentifier(SelectOptionRule), { minItems: 1 }),
216
+ });
217
+ export const verifySelectOptionRules = (_entity, deps) => {
218
+ const errorMessages = [];
219
+ const rules = deps.instanceContent.select_options?.rules;
220
+ if (rules) {
221
+ const normalizedRules = rules.flatMap(rule => rule.multiple
222
+ ? Array.from({
223
+ length: rule.multiple.kind === "Constant"
224
+ ? rule.multiple.Constant
225
+ : rule.multiple.Range.max,
226
+ }, () => rule)
227
+ : [rule]);
228
+ for (const [ruleIndex, rule] of rules.entries()) {
229
+ if (rule.multiple?.kind === "Range" && ruleIndex !== rules.length - 1) {
230
+ errorMessages.push("A select option rule with a range of multiple options can only be the last rule in the list.");
231
+ }
232
+ if (rule.value.kind === "Child") {
233
+ const parentRule = normalizedRules[rule.value.Child.parentIndex];
234
+ if (!parentRule || parentRule.value.kind !== "Predefined") {
235
+ errorMessages.push("A child select option rule must reference a predefined select option rule as its parent.");
236
+ }
237
+ }
238
+ }
239
+ }
240
+ return errorMessages;
241
+ };
221
242
  /**
222
243
  * Stub for once option rules are formalized in the database schema.
223
244
  */
@@ -224,7 +224,18 @@ export declare const SecondaryArmor: DB.TypeAlias<"SecondaryArmor", DB.Object<{
224
224
  protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
225
225
  encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
226
226
  has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
227
- variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
227
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
228
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
229
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
230
+ }>, []>>>;
231
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
232
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
233
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
234
+ }>, []>>>;
235
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
236
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
237
+ }>, []>>>;
238
+ }, []>>, true>;
228
239
  hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
229
240
  Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
230
241
  combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{
@@ -112,7 +112,9 @@ const StandardArmorType = DB.TypeAlias(import.meta.url, {
112
112
  }),
113
113
  });
114
114
  const validateArmorTypeReference = (deps) => [
115
- deps.getInstanceById("Armor", deps.instanceContent.variantOf)?.armorType.kind !== "Standard"
115
+ deps.getInstanceById("Armor", deps.instanceContent.variantOf)?.armorType.kind !== "Standard" &&
116
+ deps.getInstanceById("Item", deps.instanceContent.variantOf)?.armorUse?.armorType.kind !==
117
+ "Standard"
116
118
  ? "The armor is a variant of a standard armor, but the referenced armor is not a standard armor."
117
119
  : undefined,
118
120
  ].filter(isNotNullish);
@@ -157,9 +159,9 @@ export const SecondaryArmor = DB.TypeAlias(import.meta.url, {
157
159
  comment: "Does the armor have additional penalties (MOV -1, INI -1)?",
158
160
  type: DB.IncludeIdentifier(HasAdditionalPenalties),
159
161
  }),
160
- variantOf: DB.Required({
161
- comment: "The standard armor this armor is a variant of.",
162
- type: ArmorIdentifier(),
162
+ armorType: DB.Required({
163
+ comment: "The armor type.",
164
+ type: DB.IncludeIdentifier(ArmorType),
163
165
  }),
164
166
  hit_zone: DB.Optional({
165
167
  comment: "Specify if armor is only available for a specific hit zone.",
@@ -180,7 +182,14 @@ export const SecondaryArmor = DB.TypeAlias(import.meta.url, {
180
182
  }),
181
183
  }, { minProperties: 1 })),
182
184
  }),
183
- customConstraints: validateArmorTypeReference,
185
+ customConstraints: ({ instanceContent, ...deps }) => instanceContent.armorType.kind !== "Standard"
186
+ ? validateArmorTypeReference({
187
+ ...deps,
188
+ instanceContent: instanceContent.armorType.kind === "Variant"
189
+ ? instanceContent.armorType.Variant
190
+ : instanceContent.armorType.StandardVariant,
191
+ })
192
+ : [],
184
193
  });
185
194
  const ArmorComplexity = DB.Enum(import.meta.url, {
186
195
  name: "ArmorComplexity",
@@ -148,7 +148,18 @@ export declare const BandageOrRemedy: DB.Entity<"BandageOrRemedy", {
148
148
  protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
149
149
  encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
150
150
  has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
151
- variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
151
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
152
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
153
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
154
+ }>, []>>>;
155
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
156
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
157
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
158
+ }>, []>>>;
159
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
160
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
161
+ }>, []>>>;
162
+ }, []>>, true>;
152
163
  hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
153
164
  Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
154
165
  combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{
@@ -149,7 +149,18 @@ export declare const CeremonialItem: DB.Entity<"CeremonialItem", {
149
149
  protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
150
150
  encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
151
151
  has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
152
- variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
152
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
153
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
154
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
155
+ }>, []>>>;
156
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
157
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
158
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
159
+ }>, []>>>;
160
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
161
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
162
+ }>, []>>>;
163
+ }, []>>, true>;
153
164
  hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
154
165
  Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
155
166
  combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{
@@ -148,7 +148,18 @@ export declare const Clothes: DB.Entity<"Clothes", {
148
148
  protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
149
149
  encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
150
150
  has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
151
- variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
151
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
152
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
153
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
154
+ }>, []>>>;
155
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
156
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
157
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
158
+ }>, []>>>;
159
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
160
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
161
+ }>, []>>>;
162
+ }, []>>, true>;
152
163
  hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
153
164
  Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
154
165
  combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{
@@ -148,7 +148,18 @@ export declare const Container: DB.Entity<"Container", {
148
148
  protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
149
149
  encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
150
150
  has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
151
- variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
151
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
152
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
153
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
154
+ }>, []>>>;
155
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
156
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
157
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
158
+ }>, []>>>;
159
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
160
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
161
+ }>, []>>>;
162
+ }, []>>, true>;
152
163
  hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
153
164
  Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
154
165
  combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{
@@ -33,6 +33,11 @@ declare const EquipmentCategoryType: DB.Enum<"EquipmentCategoryType", {
33
33
  Optional: DB.EnumCase<null>;
34
34
  Prohibited: DB.EnumCase<null>;
35
35
  }, []>>, true>;
36
+ burningTime: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ValueRule", {
37
+ Required: DB.EnumCase<null>;
38
+ Optional: DB.EnumCase<null>;
39
+ Prohibited: DB.EnumCase<null>;
40
+ }, []>>, true>;
36
41
  }>, []>>>;
37
42
  Special: DB.EnumCase<DB.IncludeIdentifier<[], DB.Enum<"SpecialEquipmentCategoryEntity", {
38
43
  AnimalCare: DB.EnumCase<null>;
@@ -69,6 +74,11 @@ declare const DefaultEquipmentCategoryTypeRules: DB.TypeAlias<"DefaultEquipmentC
69
74
  Optional: DB.EnumCase<null>;
70
75
  Prohibited: DB.EnumCase<null>;
71
76
  }, []>>, true>;
77
+ burningTime: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ValueRule", {
78
+ Required: DB.EnumCase<null>;
79
+ Optional: DB.EnumCase<null>;
80
+ Prohibited: DB.EnumCase<null>;
81
+ }, []>>, true>;
72
82
  }>, []>;
73
83
  export declare const EquipmentCategory: DB.Entity<"EquipmentCategory", {
74
84
  position: DB.MemberDecl<DB.Integer, true>;
@@ -98,6 +108,11 @@ export declare const EquipmentCategory: DB.Entity<"EquipmentCategory", {
98
108
  Optional: DB.EnumCase<null>;
99
109
  Prohibited: DB.EnumCase<null>;
100
110
  }, []>>, true>;
111
+ burningTime: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ValueRule", {
112
+ Required: DB.EnumCase<null>;
113
+ Optional: DB.EnumCase<null>;
114
+ Prohibited: DB.EnumCase<null>;
115
+ }, []>>, true>;
101
116
  }>, []>>>;
102
117
  Special: DB.EnumCase<DB.IncludeIdentifier<[], DB.Enum<"SpecialEquipmentCategoryEntity", {
103
118
  AnimalCare: DB.EnumCase<null>;
@@ -68,6 +68,10 @@ const DefaultEquipmentCategoryTypeRules = DB.TypeAlias(import.meta.url, {
68
68
  comment: "Presence of complexity to certain groups for items in this category.",
69
69
  type: DB.IncludeIdentifier(ValueRule),
70
70
  }),
71
+ burningTime: DB.Required({
72
+ comment: "Presence of burning time to certain groups for items in this category.",
73
+ type: DB.IncludeIdentifier(ValueRule),
74
+ }),
71
75
  }),
72
76
  });
73
77
  const SpecialEquipmentCategoryEntity = DB.Enum(import.meta.url, {
@@ -128,4 +132,5 @@ export const mergeAllValueRules = (categories) => ({
128
132
  structurePoints: { kind: mergeValueRules(categories.map(category => category.structurePoints)) },
129
133
  weight: { kind: mergeValueRules(categories.map(category => category.weight)) },
130
134
  complexity: { kind: mergeValueRules(categories.map(category => category.complexity)) },
135
+ burningTime: { kind: mergeValueRules(categories.map(category => category.burningTime)) },
131
136
  });
@@ -121,7 +121,18 @@ export declare const EquipmentOfBlessedOnes: DB.Entity<"EquipmentOfBlessedOnes",
121
121
  protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
122
122
  encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
123
123
  has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
124
- variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
124
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
125
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
126
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
127
+ }>, []>>>;
128
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
129
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
130
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
131
+ }>, []>>>;
132
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
133
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
134
+ }>, []>>>;
135
+ }, []>>, true>;
125
136
  hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
126
137
  Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
127
138
  combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{
@@ -157,7 +157,18 @@ export declare const IlluminationLightSource: DB.Entity<"IlluminationLightSource
157
157
  protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
158
158
  encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
159
159
  has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
160
- variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
160
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
161
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
162
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
163
+ }>, []>>>;
164
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
165
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
166
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
167
+ }>, []>>>;
168
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
169
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
170
+ }>, []>>>;
171
+ }, []>>, true>;
161
172
  hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
162
173
  Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
163
174
  combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{
@@ -249,3 +260,12 @@ export declare const IlluminationLightSource: DB.Entity<"IlluminationLightSource
249
260
  }>, []>>>, []>>, false>;
250
261
  }>, true>;
251
262
  }, undefined>;
263
+ export declare const BurningTime: DB.Enum<"BurningTime", {
264
+ Unlimited: DB.EnumCase<null>;
265
+ Limited: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"LimitedBurningTime", DB.Object<{
266
+ value: DB.MemberDecl<DB.Float, true>;
267
+ unit: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"LimitedBurningTimeUnit", {
268
+ Hours: DB.EnumCase<null>;
269
+ }, []>>, true>;
270
+ }>, []>>>;
271
+ }, []>;
@@ -50,7 +50,7 @@ export const IlluminationLightSource = DB.Entity(import.meta.url, {
50
50
  return [];
51
51
  },
52
52
  });
53
- const BurningTime = DB.Enum(import.meta.url, {
53
+ export const BurningTime = DB.Enum(import.meta.url, {
54
54
  name: "BurningTime",
55
55
  values: () => ({
56
56
  Unlimited: DB.EnumCase({ type: null }),
@@ -148,7 +148,18 @@ export declare const IlluminationRefillOrSupply: DB.Entity<"IlluminationRefillOr
148
148
  protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
149
149
  encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
150
150
  has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
151
- variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
151
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
152
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
153
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
154
+ }>, []>>>;
155
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
156
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
157
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
158
+ }>, []>>>;
159
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
160
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
161
+ }>, []>>>;
162
+ }, []>>, true>;
152
163
  hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
153
164
  Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
154
165
  combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{
@@ -71,6 +71,15 @@ export declare const Item: DB.Entity<"Item", {
71
71
  structurePoints: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"StructurePoints", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"StructurePointsComponent", DB.Object<{
72
72
  points: DB.MemberDecl<DB.Integer, true>;
73
73
  }>, []>>>, []>>, true>;
74
+ burningTime: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"BurningTime", {
75
+ Unlimited: DB.EnumCase<null>;
76
+ Limited: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"LimitedBurningTime", DB.Object<{
77
+ value: DB.MemberDecl<DB.Float, true>;
78
+ unit: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"LimitedBurningTimeUnit", {
79
+ Hours: DB.EnumCase<null>;
80
+ }, []>>, true>;
81
+ }>, []>>>;
82
+ }, []>>, false>;
74
83
  meleeUses: DB.MemberDecl<DB.NestedEntityMap<string, {
75
84
  damage: DB.MemberDecl<DB.TypeArgument<DB.Param<"Damage", DB.Type>>, true>;
76
85
  damage_threshold: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"PrimaryAttributeDamageThreshold", {
@@ -120,7 +129,18 @@ export declare const Item: DB.Entity<"Item", {
120
129
  protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
121
130
  encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
122
131
  has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
123
- variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
132
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
133
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
134
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
135
+ }>, []>>>;
136
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
137
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
138
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
139
+ }>, []>>>;
140
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
141
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
142
+ }>, []>>>;
143
+ }, []>>, true>;
124
144
  hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
125
145
  Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
126
146
  combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{