@optolith/database-schema 0.100.0 → 0.102.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.
@@ -121,11 +121,11 @@ export declare const combat_techniques: DB.MemberDecl<DB.IncludeIdentifier<[], D
121
121
  race: DB.MemberDecl<DB.ReferenceIdentifier, false>;
122
122
  level: DB.MemberDecl<DB.Integer, false>;
123
123
  hasOneBluntSide: DB.MemberDecl<DB.Boolean, false>;
124
+ weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
124
125
  }>, []>>, false>;
125
- translation: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
126
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
126
127
  restrictions: DB.MemberDecl<DB.String, true>;
127
128
  }>, false>;
128
- weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
129
129
  }>, []>>>, true>;
130
130
  }>, []>>>;
131
131
  }, []>>, true>;
@@ -275,16 +275,12 @@ const SpecificApplicableCombatTechnique = DB.TypeAlias(import.meta.url, {
275
275
  restrictions: DB.Optional({
276
276
  type: DB.IncludeIdentifier(ApplicableSpecificCombatTechniquesRestrictions),
277
277
  }),
278
- translation: NestedTranslationMap(DB.Optional, "SpecificApplicableCombatTechnique", DB.Object({
278
+ translations: NestedTranslationMap(DB.Optional, "SpecificApplicableCombatTechnique", DB.Object({
279
279
  restrictions: DB.Required({
280
280
  comment: "The additional restriction(s) of the combat technique.",
281
281
  type: DB.String({ minLength: 1, markdown: "inline" }),
282
282
  }),
283
283
  })),
284
- weapons: DB.Optional({
285
- comment: "The specific weapons this combat special ability is only applicable to.",
286
- type: DB.Array(WeaponIdentifier(), { minItems: 1 }),
287
- }),
288
284
  }),
289
285
  });
290
286
  const ApplicableAllCombatTechniquesRestrictions = DB.TypeAlias(import.meta.url, {
@@ -349,6 +345,10 @@ const ApplicableSpecificCombatTechniquesRestrictions = DB.TypeAlias(import.meta.
349
345
  type: DB.Integer({ minimum: 1 }),
350
346
  }),
351
347
  hasOneBluntSide: DB.Optional({ type: DB.Boolean() }),
348
+ weapons: DB.Optional({
349
+ comment: "The specific weapons this combat special ability is only applicable to.",
350
+ type: DB.Array(WeaponIdentifier(), { minItems: 1 }),
351
+ }),
352
352
  }, { minProperties: 1 }),
353
353
  });
354
354
  const ApplicableCombatTechniquesNegativeCombatTechniquesRestriction = DB.GenTypeAlias(import.meta.url, {
@@ -1,5 +1,5 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- export declare const CommonnessRatedAdvantageDisadvantage: DB.TypeAlias<"CommonnessRatedAdvantageDisadvantage", DB.Object<{
2
+ export declare const SingleCommonnessRatedAdvantageDisadvantage: DB.TypeAlias<"SingleCommonnessRatedAdvantageDisadvantage", DB.Object<{
3
3
  id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
4
4
  level: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"CommonnessRatedAdvantageDisadvantageLevel", {
5
5
  Constant: DB.EnumCase<DB.Integer>;
@@ -31,9 +31,87 @@ export declare const CommonnessRatedAdvantageDisadvantage: DB.TypeAlias<"Commonn
31
31
  ArcaneDancerTradition: DB.EnumCase<DB.ReferenceIdentifier>;
32
32
  Element: DB.EnumCase<DB.ReferenceIdentifier>;
33
33
  }, []>>>, false>;
34
- translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageTranslation", {
34
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SingleCommonnessRatedAdvantageDisadvantageTranslation", {
35
35
  options: DB.MemberDecl<DB.String, false>;
36
36
  note: DB.MemberDecl<DB.String, false>;
37
37
  full: DB.MemberDecl<DB.String, false>;
38
38
  }>, false>;
39
39
  }>, [Identifier: DB.Param<"Identifier", DB.Type>]>;
40
+ export declare const CommonnessRatedAdvantageDisadvantage: DB.Enum<"CommonnessRatedAdvantageDisadvantage", {
41
+ Single: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"SingleCommonnessRatedAdvantageDisadvantage", DB.Object<{
42
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
43
+ level: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"CommonnessRatedAdvantageDisadvantageLevel", {
44
+ Constant: DB.EnumCase<DB.Integer>;
45
+ Range: DB.EnumCase<DB.Object<{
46
+ min: DB.MemberDecl<DB.Integer, true>;
47
+ max: DB.MemberDecl<DB.Integer, true>;
48
+ }>>;
49
+ }, []>>, false>;
50
+ options: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"CommonnessSelectOptionIdentifier", {
51
+ SkillGroup: DB.EnumCase<DB.ReferenceIdentifier>;
52
+ General: DB.EnumCase<DB.ReferenceIdentifier>;
53
+ Race: DB.EnumCase<DB.ReferenceIdentifier>;
54
+ Skill: DB.EnumCase<DB.ReferenceIdentifier>;
55
+ SkillApplication: DB.EnumCase<DB.ReferenceIdentifier>;
56
+ CloseCombatTechnique: DB.EnumCase<DB.ReferenceIdentifier>;
57
+ RangedCombatTechnique: DB.EnumCase<DB.ReferenceIdentifier>;
58
+ Property: DB.EnumCase<DB.ReferenceIdentifier>;
59
+ Aspect: DB.EnumCase<DB.ReferenceIdentifier>;
60
+ Disease: DB.EnumCase<DB.ReferenceIdentifier>;
61
+ Poison: DB.EnumCase<DB.ReferenceIdentifier>;
62
+ Language: DB.EnumCase<DB.ReferenceIdentifier>;
63
+ AnimalShape: DB.EnumCase<DB.ReferenceIdentifier>;
64
+ LiturgicalChant: DB.EnumCase<DB.ReferenceIdentifier>;
65
+ Ceremony: DB.EnumCase<DB.ReferenceIdentifier>;
66
+ Spell: DB.EnumCase<DB.ReferenceIdentifier>;
67
+ Ritual: DB.EnumCase<DB.ReferenceIdentifier>;
68
+ TradeSecret: DB.EnumCase<DB.ReferenceIdentifier>;
69
+ ArcaneBardTradition: DB.EnumCase<DB.ReferenceIdentifier>;
70
+ ArcaneDancerTradition: DB.EnumCase<DB.ReferenceIdentifier>;
71
+ Element: DB.EnumCase<DB.ReferenceIdentifier>;
72
+ }, []>>>, false>;
73
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SingleCommonnessRatedAdvantageDisadvantageTranslation", {
74
+ options: DB.MemberDecl<DB.String, false>;
75
+ note: DB.MemberDecl<DB.String, false>;
76
+ full: DB.MemberDecl<DB.String, false>;
77
+ }>, false>;
78
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>;
79
+ Group: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"CommonnessRatedAdvantageDisadvantageGroup", DB.Object<{
80
+ list: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"SingleCommonnessRatedAdvantageDisadvantageInGroup", DB.Object<{
81
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
82
+ level: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"CommonnessRatedAdvantageDisadvantageLevel", {
83
+ Constant: DB.EnumCase<DB.Integer>;
84
+ Range: DB.EnumCase<DB.Object<{
85
+ min: DB.MemberDecl<DB.Integer, true>;
86
+ max: DB.MemberDecl<DB.Integer, true>;
87
+ }>>;
88
+ }, []>>, false>;
89
+ options: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"CommonnessSelectOptionIdentifier", {
90
+ SkillGroup: DB.EnumCase<DB.ReferenceIdentifier>;
91
+ General: DB.EnumCase<DB.ReferenceIdentifier>;
92
+ Race: DB.EnumCase<DB.ReferenceIdentifier>;
93
+ Skill: DB.EnumCase<DB.ReferenceIdentifier>;
94
+ SkillApplication: DB.EnumCase<DB.ReferenceIdentifier>;
95
+ CloseCombatTechnique: DB.EnumCase<DB.ReferenceIdentifier>;
96
+ RangedCombatTechnique: DB.EnumCase<DB.ReferenceIdentifier>;
97
+ Property: DB.EnumCase<DB.ReferenceIdentifier>;
98
+ Aspect: DB.EnumCase<DB.ReferenceIdentifier>;
99
+ Disease: DB.EnumCase<DB.ReferenceIdentifier>;
100
+ Poison: DB.EnumCase<DB.ReferenceIdentifier>;
101
+ Language: DB.EnumCase<DB.ReferenceIdentifier>;
102
+ AnimalShape: DB.EnumCase<DB.ReferenceIdentifier>;
103
+ LiturgicalChant: DB.EnumCase<DB.ReferenceIdentifier>;
104
+ Ceremony: DB.EnumCase<DB.ReferenceIdentifier>;
105
+ Spell: DB.EnumCase<DB.ReferenceIdentifier>;
106
+ Ritual: DB.EnumCase<DB.ReferenceIdentifier>;
107
+ TradeSecret: DB.EnumCase<DB.ReferenceIdentifier>;
108
+ ArcaneBardTradition: DB.EnumCase<DB.ReferenceIdentifier>;
109
+ ArcaneDancerTradition: DB.EnumCase<DB.ReferenceIdentifier>;
110
+ Element: DB.EnumCase<DB.ReferenceIdentifier>;
111
+ }, []>>>, false>;
112
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, true>;
113
+ translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageGroupTranslation", {
114
+ text: DB.MemberDecl<DB.String, true>;
115
+ }>, true>;
116
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>;
117
+ }, [Identifier: DB.Param<"Identifier", DB.Type>]>;
@@ -1,8 +1,8 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  import { CommonnessSelectOptionIdentifier } from "./_IdentifierGroup.js";
3
3
  import { NestedTranslationMap } from "./Locale.js";
4
- export const CommonnessRatedAdvantageDisadvantage = DB.GenTypeAlias(import.meta.url, {
5
- name: "CommonnessRatedAdvantageDisadvantage",
4
+ export const SingleCommonnessRatedAdvantageDisadvantage = DB.GenTypeAlias(import.meta.url, {
5
+ name: "SingleCommonnessRatedAdvantageDisadvantage",
6
6
  comment: "Reference to a commonness-rated advantage or disadvantage. Commonness-rating terms used in the source books are strongly recommended, common, uncommon, suggested and unsuitable.",
7
7
  parameters: [DB.Param("Identifier")],
8
8
  type: Identifier => DB.Object({
@@ -18,7 +18,7 @@ export const CommonnessRatedAdvantageDisadvantage = DB.GenTypeAlias(import.meta.
18
18
  comment: "The options the commonness rating applies to.",
19
19
  type: DB.Array(DB.IncludeIdentifier(CommonnessSelectOptionIdentifier), { minItems: 1 }),
20
20
  }),
21
- translations: NestedTranslationMap(DB.Optional, "CommonnessRatedAdvantageDisadvantage", DB.Object({
21
+ translations: NestedTranslationMap(DB.Optional, "SingleCommonnessRatedAdvantageDisadvantage", DB.Object({
22
22
  options: DB.Optional({
23
23
  comment: "The options the commonness rating applies to. This can be specified if plain options cannot exactly describe the options as written in the publication.",
24
24
  type: DB.String({ minLength: 1 }),
@@ -47,3 +47,58 @@ const CommonnessRatedAdvantageDisadvantageLevel = DB.Enum(import.meta.url, {
47
47
  }),
48
48
  }),
49
49
  });
50
+ const SingleCommonnessRatedAdvantageDisadvantageInGroup = DB.GenTypeAlias(import.meta.url, {
51
+ name: "SingleCommonnessRatedAdvantageDisadvantageInGroup",
52
+ comment: "Reference to a commonness-rated advantage or disadvantage. Commonness-rating terms used in the source books are strongly recommended, common, uncommon, suggested and unsuitable.",
53
+ parameters: [DB.Param("Identifier")],
54
+ type: Identifier => DB.Object({
55
+ id: DB.Required({
56
+ comment: "The advantage’s or disadvantage’s identifier.",
57
+ type: DB.TypeArgument(Identifier),
58
+ }),
59
+ level: DB.Optional({
60
+ comment: "The level of a commonness-rated advantage or disadvantage.",
61
+ type: DB.IncludeIdentifier(CommonnessRatedAdvantageDisadvantageLevel),
62
+ }),
63
+ options: DB.Optional({
64
+ comment: "The options the commonness rating applies to.",
65
+ type: DB.Array(DB.IncludeIdentifier(CommonnessSelectOptionIdentifier), { minItems: 1 }),
66
+ }),
67
+ }),
68
+ });
69
+ const CommonnessRatedAdvantageDisadvantageGroup = DB.GenTypeAlias(import.meta.url, {
70
+ name: "CommonnessRatedAdvantageDisadvantageGroup",
71
+ comment: "Reference to a commonness-rated advantage or disadvantage. Commonness-rating terms used in the source books are strongly recommended, common, uncommon, suggested and unsuitable.",
72
+ parameters: [DB.Param("Identifier")],
73
+ type: Identifier => DB.Object({
74
+ list: DB.Required({
75
+ type: DB.Array(DB.GenIncludeIdentifier(SingleCommonnessRatedAdvantageDisadvantageInGroup, [
76
+ DB.TypeArgument(Identifier),
77
+ ]), {
78
+ minItems: 2,
79
+ }),
80
+ }),
81
+ translations: NestedTranslationMap(DB.Required, "CommonnessRatedAdvantageDisadvantageGroup", DB.Object({
82
+ text: DB.Required({
83
+ comment: "The text replacing all entries in the group.",
84
+ type: DB.String({ minLength: 1, markdown: "inline" }),
85
+ }),
86
+ })),
87
+ }),
88
+ });
89
+ export const CommonnessRatedAdvantageDisadvantage = DB.GenEnum(import.meta.url, {
90
+ name: "CommonnessRatedAdvantageDisadvantage",
91
+ parameters: [DB.Param("Identifier")],
92
+ values: Identifier => ({
93
+ Single: DB.EnumCase({
94
+ type: DB.GenIncludeIdentifier(SingleCommonnessRatedAdvantageDisadvantage, [
95
+ DB.TypeArgument(Identifier),
96
+ ]),
97
+ }),
98
+ Group: DB.EnumCase({
99
+ type: DB.GenIncludeIdentifier(CommonnessRatedAdvantageDisadvantageGroup, [
100
+ DB.TypeArgument(Identifier),
101
+ ]),
102
+ }),
103
+ }),
104
+ });
@@ -31,18 +31,30 @@ export declare const ItemComponent: DB.Entity<"ItemComponent", {
31
31
  Factor: DB.EnumCase<DB.Float>;
32
32
  DerivedFromOption: DB.EnumCase<null>;
33
33
  }, []>>, true>;
34
+ weight: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Weight", DB.Float, []>>, false>;
34
35
  applicableItems: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ApplicableItems", {
35
36
  MeleeWeapon: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ApplicableMeleeWeapons", DB.Object<{
36
37
  weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
37
- combatTechniques: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
38
+ combatTechniques: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"ApplicableMeleeCombatTechnique", DB.Object<{
39
+ combatTechnique: DB.MemberDecl<DB.ReferenceIdentifier, true>;
40
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ApplicableMeleeCombatTechniqueTranslation", {
41
+ text: DB.MemberDecl<DB.String, true>;
42
+ }>, false>;
43
+ }>, []>>>, false>;
38
44
  category: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ApplicableMeleeWeaponCategory", {
39
45
  HasMetalSurface: DB.EnumCase<null>;
40
46
  HasMetalBladeOrTip: DB.EnumCase<null>;
47
+ HasWrappableHandle: DB.EnumCase<null>;
41
48
  }, []>>, false>;
42
49
  }>, []>>>;
43
50
  RangedWeapon: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ApplicableRangedWeapons", DB.Object<{
44
51
  weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
45
- combatTechniques: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
52
+ combatTechniques: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"ApplicableRangedCombatTechnique", DB.Object<{
53
+ combatTechnique: DB.MemberDecl<DB.ReferenceIdentifier, true>;
54
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ApplicableRangedCombatTechniqueTranslation", {
55
+ text: DB.MemberDecl<DB.String, true>;
56
+ }>, false>;
57
+ }>, []>>>, false>;
46
58
  minimumReloadTime: DB.MemberDecl<DB.Integer, false>;
47
59
  usesBullets: DB.MemberDecl<DB.Boolean, false>;
48
60
  }>, []>>>;
@@ -4,7 +4,7 @@ import { CloseCombatTechnique, RangedCombatTechnique } from "../../CombatTechniq
4
4
  import { NestedTranslationMap } from "../../Locale.js";
5
5
  import { Errata } from "../../source/_Erratum.js";
6
6
  import { src } from "../../source/_PublicationRef.js";
7
- import { FixedCost } from "./_Item.js";
7
+ import { FixedCost, Weight } from "./_Item.js";
8
8
  export const ItemComponent = DB.Entity(import.meta.url, {
9
9
  name: "ItemComponent",
10
10
  namePlural: "ItemComponents",
@@ -16,6 +16,10 @@ export const ItemComponent = DB.Entity(import.meta.url, {
16
16
  comment: ItemComponentCost.comment,
17
17
  type: DB.IncludeIdentifier(ItemComponentCost),
18
18
  }),
19
+ weight: DB.Optional({
20
+ comment: "The weight in kg.",
21
+ type: DB.IncludeIdentifier(Weight),
22
+ }),
19
23
  applicableItems: DB.Required({
20
24
  comment: "The items the component can be applied to.",
21
25
  type: DB.IncludeIdentifier(ApplicableItems),
@@ -116,12 +120,7 @@ const ItemComponentCostByCombatTechnique = DB.TypeAlias(import.meta.url, {
116
120
  comment: "The cost in silverthalers for the close combat technique.",
117
121
  type: DB.Float({ minimum: { value: 0, isExclusive: true } }),
118
122
  }),
119
- translations: NestedTranslationMap(DB.Optional, "ItemComponentCostByCloseCombatTechnique", DB.Object({
120
- label: DB.Required({
121
- comment: "The label for cost, if different from the name of the combat technique.",
122
- type: DB.String({ minLength: 1 }),
123
- }),
124
- })),
123
+ translations: NestedTranslationMap(DB.Optional, "ItemComponentCostByCloseCombatTechnique", DB.IncludeIdentifier(ItemComponentCostByCombatTechniqueTranslation)),
125
124
  }),
126
125
  }),
127
126
  }),
@@ -136,17 +135,21 @@ const ItemComponentCostByCombatTechnique = DB.TypeAlias(import.meta.url, {
136
135
  comment: "The cost in silverthalers for the ranged combat technique.",
137
136
  type: DB.Float({ minimum: { value: 0, isExclusive: true } }),
138
137
  }),
139
- translations: NestedTranslationMap(DB.Optional, "ItemComponentCostByRangedCombatTechnique", DB.Object({
140
- label: DB.Required({
141
- comment: "The label for cost, if different from the name of the combat technique.",
142
- type: DB.String({ minLength: 1 }),
143
- }),
144
- })),
138
+ translations: NestedTranslationMap(DB.Optional, "ItemComponentCostByRangedCombatTechnique", DB.IncludeIdentifier(ItemComponentCostByCombatTechniqueTranslation)),
145
139
  }),
146
140
  }),
147
141
  }),
148
142
  }, { minProperties: 1 }),
149
143
  });
144
+ const ItemComponentCostByCombatTechniqueTranslation = DB.TypeAlias(import.meta.url, {
145
+ name: "ItemComponentCostByCombatTechniqueTranslation",
146
+ type: () => DB.Object({
147
+ label: DB.Required({
148
+ comment: "The label for cost, if different from the name of the combat technique.",
149
+ type: DB.String({ minLength: 1 }),
150
+ }),
151
+ }),
152
+ });
150
153
  const ApplicableItems = DB.Enum(import.meta.url, {
151
154
  name: "ApplicableItems",
152
155
  comment: "The items the component can be applied to.",
@@ -169,7 +172,7 @@ const ApplicableMeleeWeapons = DB.TypeAlias(import.meta.url, {
169
172
  }),
170
173
  combatTechniques: DB.Optional({
171
174
  comment: "Weapons of combat techniques this component can be applied to.",
172
- type: DB.Array(CloseCombatTechniqueIdentifier(), {
175
+ type: DB.Array(DB.IncludeIdentifier(ApplicableMeleeCombatTechnique), {
173
176
  minItems: 1,
174
177
  uniqueItems: true,
175
178
  }),
@@ -180,11 +183,27 @@ const ApplicableMeleeWeapons = DB.TypeAlias(import.meta.url, {
180
183
  }),
181
184
  }, { minProperties: 1 }),
182
185
  });
186
+ const ApplicableMeleeCombatTechnique = DB.TypeAlias(import.meta.url, {
187
+ name: "ApplicableMeleeCombatTechnique",
188
+ type: () => DB.Object({
189
+ combatTechnique: DB.Required({
190
+ comment: "The combat technique this component can be applied to.",
191
+ type: CloseCombatTechniqueIdentifier(),
192
+ }),
193
+ translations: NestedTranslationMap(DB.Optional, "ApplicableMeleeCombatTechnique", DB.Object({
194
+ text: DB.Required({
195
+ comment: "The name that should be displayed if the name of combat technique should not be used.",
196
+ type: DB.String({ minLength: 1 }),
197
+ }),
198
+ })),
199
+ }),
200
+ });
183
201
  const ApplicableMeleeWeaponCategory = DB.Enum(import.meta.url, {
184
202
  name: "ApplicableMeleeWeaponCategory",
185
203
  values: () => ({
186
204
  HasMetalSurface: DB.EnumCase({ type: null }),
187
205
  HasMetalBladeOrTip: DB.EnumCase({ type: null }),
206
+ HasWrappableHandle: DB.EnumCase({ type: null }),
188
207
  }),
189
208
  });
190
209
  const ApplicableRangedWeapons = DB.TypeAlias(import.meta.url, {
@@ -199,7 +218,7 @@ const ApplicableRangedWeapons = DB.TypeAlias(import.meta.url, {
199
218
  }),
200
219
  combatTechniques: DB.Optional({
201
220
  comment: "Weapons of combat techniques this component can be applied to.",
202
- type: DB.Array(RangedCombatTechniqueIdentifier(), {
221
+ type: DB.Array(DB.IncludeIdentifier(ApplicableRangedCombatTechnique), {
203
222
  minItems: 1,
204
223
  uniqueItems: true,
205
224
  }),
@@ -214,6 +233,21 @@ const ApplicableRangedWeapons = DB.TypeAlias(import.meta.url, {
214
233
  }),
215
234
  }, { minProperties: 1 }),
216
235
  });
236
+ const ApplicableRangedCombatTechnique = DB.TypeAlias(import.meta.url, {
237
+ name: "ApplicableRangedCombatTechnique",
238
+ type: () => DB.Object({
239
+ combatTechnique: DB.Required({
240
+ comment: "The combat technique this component can be applied to.",
241
+ type: RangedCombatTechniqueIdentifier(),
242
+ }),
243
+ translations: NestedTranslationMap(DB.Optional, "ApplicableRangedCombatTechnique", DB.Object({
244
+ text: DB.Required({
245
+ comment: "The name that should be displayed if the name of combat technique should not be used.",
246
+ type: DB.String({ minLength: 1 }),
247
+ }),
248
+ })),
249
+ }),
250
+ });
217
251
  const ApplicableAmmunition = DB.TypeAlias(import.meta.url, {
218
252
  name: "ApplicableAmmunition",
219
253
  type: () => DB.Object({
@@ -762,6 +762,25 @@ export declare const ProfessionPrerequisiteGroup: DB.Enum<"ProfessionPrerequisit
762
762
  }>, []>>>;
763
763
  }, []>>, false>;
764
764
  }>, []>>>;
765
+ Rule: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"RulePrerequisite", DB.Object<{
766
+ id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ExtensionRuleIdentifier", {
767
+ FocusRule: DB.EnumCase<DB.ReferenceIdentifier>;
768
+ OptionalRule: DB.EnumCase<DB.ReferenceIdentifier>;
769
+ }, []>>, true>;
770
+ active: DB.MemberDecl<DB.Boolean, true>;
771
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
772
+ Hide: DB.EnumCase<null>;
773
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
774
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
775
+ Standalone: DB.EnumCase<null>;
776
+ Connected: DB.EnumCase<null>;
777
+ }, []>>, false>;
778
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
779
+ replacement: DB.MemberDecl<DB.String, true>;
780
+ }>, true>;
781
+ }>, []>>>;
782
+ }, []>>, false>;
783
+ }>, []>>>;
765
784
  Activatable: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ActivatablePrerequisite", DB.Object<{
766
785
  id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ActivatableIdentifier", {
767
786
  ArcaneOrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
@@ -89,6 +89,7 @@ export const ProfessionPrerequisiteGroup = DB.Enum(import.meta.url, {
89
89
  Sex: DB.EnumCase({ type: DB.IncludeIdentifier(SexPrerequisite) }),
90
90
  Race: DB.EnumCase({ type: DB.IncludeIdentifier(RacePrerequisite) }),
91
91
  Culture: DB.EnumCase({ type: DB.IncludeIdentifier(CulturePrerequisite) }),
92
+ Rule: DB.EnumCase({ type: DB.IncludeIdentifier(RulePrerequisite) }),
92
93
  Activatable: DB.EnumCase({ type: DB.IncludeIdentifier(ActivatablePrerequisite) }),
93
94
  Rated: DB.EnumCase({ type: DB.IncludeIdentifier(RatedPrerequisite) }),
94
95
  RatedMinimumNumber: DB.EnumCase({
@@ -1268,11 +1268,11 @@ export declare const AdvancedCombatSpecialAbility: DB.Entity<"AdvancedCombatSpec
1268
1268
  race: DB.MemberDecl<DB.ReferenceIdentifier, false>;
1269
1269
  level: DB.MemberDecl<DB.Integer, false>;
1270
1270
  hasOneBluntSide: DB.MemberDecl<DB.Boolean, false>;
1271
+ weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1271
1272
  }>, []>>, false>;
1272
- translation: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1273
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1273
1274
  restrictions: DB.MemberDecl<DB.String, true>;
1274
1275
  }>, false>;
1275
- weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1276
1276
  }>, []>>>, true>;
1277
1277
  }>, []>>>;
1278
1278
  }, []>>, true>;
@@ -1158,11 +1158,11 @@ export declare const BrawlingSpecialAbility: DB.Entity<"BrawlingSpecialAbility",
1158
1158
  race: DB.MemberDecl<DB.ReferenceIdentifier, false>;
1159
1159
  level: DB.MemberDecl<DB.Integer, false>;
1160
1160
  hasOneBluntSide: DB.MemberDecl<DB.Boolean, false>;
1161
+ weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1161
1162
  }>, []>>, false>;
1162
- translation: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1163
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1163
1164
  restrictions: DB.MemberDecl<DB.String, true>;
1164
1165
  }>, false>;
1165
- weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1166
1166
  }>, []>>>, true>;
1167
1167
  }>, []>>>;
1168
1168
  }, []>>, true>;
@@ -1264,11 +1264,11 @@ export declare const CombatSpecialAbility: DB.Entity<"CombatSpecialAbility", {
1264
1264
  race: DB.MemberDecl<DB.ReferenceIdentifier, false>;
1265
1265
  level: DB.MemberDecl<DB.Integer, false>;
1266
1266
  hasOneBluntSide: DB.MemberDecl<DB.Boolean, false>;
1267
+ weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1267
1268
  }>, []>>, false>;
1268
- translation: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1269
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1269
1270
  restrictions: DB.MemberDecl<DB.String, true>;
1270
1271
  }>, false>;
1271
- weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1272
1272
  }>, []>>>, true>;
1273
1273
  }>, []>>>;
1274
1274
  }, []>>, true>;
@@ -1345,11 +1345,11 @@ export declare const CombatStyleSpecialAbility: DB.Entity<"CombatStyleSpecialAbi
1345
1345
  race: DB.MemberDecl<DB.ReferenceIdentifier, false>;
1346
1346
  level: DB.MemberDecl<DB.Integer, false>;
1347
1347
  hasOneBluntSide: DB.MemberDecl<DB.Boolean, false>;
1348
+ weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1348
1349
  }>, []>>, false>;
1349
- translation: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1350
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1350
1351
  restrictions: DB.MemberDecl<DB.String, true>;
1351
1352
  }>, false>;
1352
- weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1353
1353
  }>, []>>>, true>;
1354
1354
  }>, []>>>;
1355
1355
  }, []>>, true>;
@@ -1158,11 +1158,11 @@ export declare const CommandSpecialAbility: DB.Entity<"CommandSpecialAbility", {
1158
1158
  race: DB.MemberDecl<DB.ReferenceIdentifier, false>;
1159
1159
  level: DB.MemberDecl<DB.Integer, false>;
1160
1160
  hasOneBluntSide: DB.MemberDecl<DB.Boolean, false>;
1161
+ weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1161
1162
  }>, []>>, false>;
1162
- translation: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1163
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SpecificApplicableCombatTechniqueTranslation", {
1163
1164
  restrictions: DB.MemberDecl<DB.String, true>;
1164
1165
  }>, false>;
1165
- weapons: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
1166
1166
  }>, []>>>, true>;
1167
1167
  }>, []>>>;
1168
1168
  }, []>>, true>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optolith/database-schema",
3
- "version": "0.100.0",
3
+ "version": "0.102.0",
4
4
  "description": "Definitions and utilities for the flat-file database of Optolith, a character creation tool for the Pen and Paper RPG “The Dark Eye 5”, and its external integrations into other software.",
5
5
  "keywords": [
6
6
  "tde",
@@ -39,7 +39,7 @@
39
39
  "license": "MPL-2.0",
40
40
  "dependencies": {
41
41
  "@elyukai/utils": "^0.3.6",
42
- "tsondb": "^0.21.5"
42
+ "tsondb": "^0.21.10"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@elyukai/oxc-config": "^0.1.0",