@optolith/database-schema 0.42.4 → 0.43.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [0.43.0](https://github.com/Optolith/database-schema/compare/v0.42.4...v0.43.0) (2026-05-29)
6
+
7
+
8
+ ### ⚠ BREAKING CHANGES
9
+
10
+ * auto/strong dis/advantages in race variantFeature/race advantage variant
11
+ * add translation for name of spellcasters
12
+ * add translations for favored skills
13
+
14
+ ### Features
15
+
16
+ * add translation for name of spellcasters ([21780be](https://github.com/Optolith/database-schema/commit/21780be505cf21d08bb2ef7691e613047cb0447f))
17
+ * add translations for favored skills ([57b1916](https://github.com/Optolith/database-schema/commit/57b1916f21edbd1acb57c8e0aa3b06f9be6da724))
18
+ * auto/strong dis/advantages in race variantFeature/race advantage variant ([7afc6b0](https://github.com/Optolith/database-schema/commit/7afc6b032614b1fae26f54e648eceee3aa49559c)), closes [elyukai/optolith-data#1291](https://github.com/elyukai/optolith-data/issues/1291) [#139](https://github.com/Optolith/database-schema/issues/139) [#138](https://github.com/Optolith/database-schema/issues/138)
19
+ * printed values for lesson packages ([c268659](https://github.com/Optolith/database-schema/commit/c2686593cb874e4f18ba86ea51d6c7d59f0cce85))
20
+
5
21
  ## [0.42.4](https://github.com/Optolith/database-schema/compare/v0.42.3...v0.42.4) (2026-04-10)
6
22
 
7
23
 
package/gen/types.d.ts CHANGED
@@ -856,6 +856,7 @@ export type TypeAliasMap = {
856
856
  SpecificSkillSpecializationOptions: SpecificSkillSpecializationOptions
857
857
  SpecificTargetCategory: SpecificTargetCategory
858
858
  SpellworkAdjustment: SpellworkAdjustment
859
+ SpellworkAdjustmentWithBase: SpellworkAdjustmentWithBase
859
860
  SpellworkChange: SpellworkChange
860
861
  SpellworkPrerequisites: SpellworkPrerequisites
861
862
  StatePrerequisite: StatePrerequisite
@@ -2337,7 +2338,14 @@ export interface Locale {
2337
2338
  "corresponding liturgical style special ability": string
2338
2339
  "corresponding magic style special ability": string
2339
2340
  "corresponding skill style special ability": string
2341
+ "Favored Skills": string
2342
+ "The primary attribute of this Tradition is {$attr}.": string & { __params: { "attr": StringableTranslationParameter } }
2343
+ "This primary attribute of this Tradition is {$attr}; however, {$casters} use only half of this stat (rounded up) to calculate their base AE pool or purchase AE.": string & { __params: { "attr": StringableTranslationParameter; "casters": StringableTranslationParameter } }
2344
+ "Tradition ({$name}) has no associated primary attribute, meaning {$casters} receive no bonus to the AE pool and cannot purchase additional AE.": string & { __params: { "name": StringableTranslationParameter; "casters": StringableTranslationParameter } }
2345
+ ".input {$count :number} {{{$baseList}, and {$count} of your choice from the following list: {$selection}}}": string & { __params: { "count": number; "baseList": StringableTranslationParameter; "selection": StringableTranslationParameter } }
2340
2346
  "All": string
2347
+ "All Combat Techniques": string
2348
+ "All Combat Techniques used in hunting": string
2341
2349
  "All Close Combat Techniques": string
2342
2350
  "All Ranged Combat Techniques": string
2343
2351
  "Depends on combat style; both combat styles can be used only for their corresponding combat techniques": string
@@ -4403,26 +4411,6 @@ export interface Race {
4403
4411
  */
4404
4412
  base_values: BaseValues
4405
4413
 
4406
- /**
4407
- * A list of automatically applied advantages. This does only work for advantages with no further configuration such as level or special selection.
4408
- */
4409
- automatic_advantages?: AutomaticAdvantageDisadvantage<Advantage_ID>[]
4410
-
4411
- /**
4412
- * A list of automatically applied disadvantages. This does only work for disadvantages with no further configuration such as level or special selection.
4413
- */
4414
- automatic_disadvantages?: AutomaticAdvantageDisadvantage<Disadvantage_ID>[]
4415
-
4416
- /**
4417
- * A list of strongly recommended advantages.
4418
- */
4419
- strongly_recommended_advantages?: CommonnessRatedAdvantageDisadvantage<Advantage_ID>[]
4420
-
4421
- /**
4422
- * A list of strongly recommended disadvantages.
4423
- */
4424
- strongly_recommended_disadvantages?: CommonnessRatedAdvantageDisadvantage<Disadvantage_ID>[]
4425
-
4426
4414
  /**
4427
4415
  * How many different hair colors a race may have. By default, they have a single one that is for their whole body, but a race may have multiple if their hair color is different for different body parts. Additionally, if the hair color is labelled differently (e.g. scale color), there might be multiple colors for different body parts as well. This should only be set if the hair color count is higher than 1.
4428
4416
  */
@@ -4476,31 +4464,6 @@ export interface RaceTranslation {
4476
4464
  */
4477
4465
  name: string
4478
4466
 
4479
- /**
4480
- * The respective attribute adjustments text from the source book.
4481
- */
4482
- attribute_adjustments: string
4483
-
4484
- /**
4485
- * The respective automatic advantages text from the source book.
4486
- */
4487
- automatic_advantages?: string
4488
-
4489
- /**
4490
- * The respective automatic disadvantages text from the source book.
4491
- */
4492
- automatic_disadvantages?: string
4493
-
4494
- /**
4495
- * The respective strongly recommended advantages text from the source book.
4496
- */
4497
- strongly_recommended_advantages?: string
4498
-
4499
- /**
4500
- * The respective strongly recommended disadvantages text from the source book.
4501
- */
4502
- strongly_recommended_disadvantages?: string
4503
-
4504
4467
  /**
4505
4468
  * The label for hair colors if it is not a hair color in that sense: Some races may have different labels for hair color such as scale color.
4506
4469
  */
@@ -7466,6 +7429,11 @@ export interface MagicalTraditionTranslation {
7466
7429
  */
7467
7430
  name_in_library?: string
7468
7431
 
7432
+ /**
7433
+ * The name of spellcasters of this tradition. This is used to derive special rules from the data set already for this tradition.
7434
+ */
7435
+ nameOfSpellcasters: string
7436
+
7469
7437
  /**
7470
7438
  * The special rules of the tradition. They should be sorted like they are in the book.
7471
7439
  */
@@ -7495,7 +7463,7 @@ export interface PrimaryAttribute {
7495
7463
  /**
7496
7464
  * The attribute’s identifier.
7497
7465
  */
7498
- id?: Attribute_ID
7466
+ id: Attribute_ID
7499
7467
 
7500
7468
  /**
7501
7469
  * Typically, the value of the primary attribute (if one exists) is added onto the base of 20 AE to get the actual AE. But sometimes, only half the value is added.
@@ -8087,6 +8055,11 @@ export interface LessonPackage {
8087
8055
  */
8088
8056
  curriculum: Curriculum_ID
8089
8057
 
8058
+ /**
8059
+ * The AP value of the lesson package. This is only used to compare the generated AP value with the one in the book for error checking.
8060
+ */
8061
+ apValue?: number
8062
+
8090
8063
  /**
8091
8064
  * The spell values difference of the lesson package. This field reflects the changes (difference) to the field of the same name in the profession package. If a spell gets to SR 0 because of this, it will be removed completely.
8092
8065
  */
@@ -8149,7 +8122,7 @@ export type AbilityAdjustment =
8149
8122
  }
8150
8123
  | {
8151
8124
  kind: "Spellwork"
8152
- Spellwork: SpellworkAdjustment
8125
+ Spellwork: SpellworkAdjustmentWithBase
8153
8126
  }
8154
8127
 
8155
8128
  export interface CombatTechniqueAdjustment {
@@ -8159,6 +8132,11 @@ export interface CombatTechniqueAdjustment {
8159
8132
  * The combat technique points that will be added to the current combat technique rating.
8160
8133
  */
8161
8134
  points: number
8135
+
8136
+ /**
8137
+ * The combat technique rating of the base profession package. This is only used to compare the derived rating from the profession package with the one in the book for error checking. Note that 6 is always added to that number, so to get a base rating of 10, this field should be 4.
8138
+ */
8139
+ basePoints?: number
8162
8140
  }
8163
8141
 
8164
8142
  export interface SkillAdjustment {
@@ -8168,6 +8146,30 @@ export interface SkillAdjustment {
8168
8146
  * The skill points that will be added to the current skill rating.
8169
8147
  */
8170
8148
  points: number
8149
+
8150
+ /**
8151
+ * The skill rating of the base profession package. This is only used to compare the derived rating from the profession package with the one in the book for error checking.
8152
+ */
8153
+ basePoints?: number
8154
+ }
8155
+
8156
+ export interface SpellworkAdjustmentWithBase {
8157
+ id: SpellworkIdentifier
8158
+
8159
+ /**
8160
+ * The skill points that will be added to the current skill rating. If a spell gets to a skill rating of 0 because of this, it will be removed completely.
8161
+ */
8162
+ points: number
8163
+
8164
+ /**
8165
+ * The spell rating of the base profession package. This is only used to compare the derived rating from the profession package with the one in the book for error checking.
8166
+ */
8167
+ basePoints?: number
8168
+
8169
+ /**
8170
+ * The target tradition. If the target spell is not from the Guild Mage tradition, specify the tradition identifier here.
8171
+ */
8172
+ tradition?: MagicalTradition_ID
8171
8173
  }
8172
8174
 
8173
8175
  export interface ProfessionVersion {
@@ -19600,16 +19602,6 @@ export interface CalculationTranslation {
19600
19602
  no_primary?: string
19601
19603
  }
19602
19604
 
19603
- /**
19604
- * An advantage or disadvantage that is automatically applied to the character after selecting the race. This does only work for advantages or disadvantages with no further configuration such as level or special selection.
19605
- */
19606
- export interface AutomaticAdvantageDisadvantage<Identifier> {
19607
- /**
19608
- * The automatic advantage or disadvantage.
19609
- */
19610
- id: Identifier
19611
- }
19612
-
19613
19605
  /**
19614
19606
  * Configuration for random weight generation.
19615
19607
  */
@@ -19672,6 +19664,26 @@ export interface RaceVariant {
19672
19664
  */
19673
19665
  common_cultures?: Culture_ID[]
19674
19666
 
19667
+ /**
19668
+ * A list of automatically applied advantages. This does only work for advantages with no further configuration such as level or special selection.
19669
+ */
19670
+ automatic_advantages?: AutomaticAdvantageDisadvantage<Advantage_ID>[]
19671
+
19672
+ /**
19673
+ * A list of automatically applied disadvantages. This does only work for disadvantages with no further configuration such as level or special selection.
19674
+ */
19675
+ automatic_disadvantages?: AutomaticAdvantageDisadvantage<Disadvantage_ID>[]
19676
+
19677
+ /**
19678
+ * A list of strongly recommended advantages.
19679
+ */
19680
+ strongly_recommended_advantages?: CommonnessRatedAdvantageDisadvantage<Advantage_ID>[]
19681
+
19682
+ /**
19683
+ * A list of strongly recommended disadvantages.
19684
+ */
19685
+ strongly_recommended_disadvantages?: CommonnessRatedAdvantageDisadvantage<Disadvantage_ID>[]
19686
+
19675
19687
  /**
19676
19688
  * A list of common advantages.
19677
19689
  */
@@ -19726,6 +19738,31 @@ export interface RaceVariantTranslation {
19726
19738
  */
19727
19739
  name: string
19728
19740
 
19741
+ /**
19742
+ * The respective attribute adjustments text from the source book.
19743
+ */
19744
+ attribute_adjustments?: string
19745
+
19746
+ /**
19747
+ * The respective automatic advantages text from the source book.
19748
+ */
19749
+ automatic_advantages?: string
19750
+
19751
+ /**
19752
+ * The respective automatic disadvantages text from the source book.
19753
+ */
19754
+ automatic_disadvantages?: string
19755
+
19756
+ /**
19757
+ * The respective strongly recommended advantages text from the source book.
19758
+ */
19759
+ strongly_recommended_advantages?: string
19760
+
19761
+ /**
19762
+ * The respective strongly recommended disadvantages text from the source book.
19763
+ */
19764
+ strongly_recommended_disadvantages?: string
19765
+
19729
19766
  /**
19730
19767
  * The respective common advantages text from the source book.
19731
19768
  */
@@ -19794,6 +19831,16 @@ export interface SelectableAttributeAdjustment {
19794
19831
  value: number
19795
19832
  }
19796
19833
 
19834
+ /**
19835
+ * An advantage or disadvantage that is automatically applied to the character after selecting the race. This does only work for advantages or disadvantages with no further configuration such as level or special selection.
19836
+ */
19837
+ export interface AutomaticAdvantageDisadvantage<Identifier> {
19838
+ /**
19839
+ * The automatic advantage or disadvantage.
19840
+ */
19841
+ id: Identifier
19842
+ }
19843
+
19797
19844
  export interface HairColor {
19798
19845
  /**
19799
19846
  * All translations for the entry, identified by IETF language tag (BCP47).
@@ -40,6 +40,7 @@ export declare const Curriculum: DB.Entity<"Curriculum", {
40
40
  }, []>>>, []>>, false>;
41
41
  lesson_packages: DB.MemberDecl<DB.ChildEntities<DB.Entity<"LessonPackage", {
42
42
  curriculum: DB.MemberDecl<DB.ReferenceIdentifier, true>;
43
+ apValue: DB.MemberDecl<DB.Integer, false>;
43
44
  spellwork_changes: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"SpellworkChange", DB.Object<{
44
45
  base: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"SpellworkAdjustment", DB.Object<{
45
46
  id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SpellworkIdentifier", {
@@ -65,17 +66,20 @@ export declare const Curriculum: DB.Entity<"Curriculum", {
65
66
  RangedCombatTechnique: DB.EnumCase<DB.ReferenceIdentifier>;
66
67
  }, []>>, true>;
67
68
  points: DB.MemberDecl<DB.Integer, true>;
69
+ basePoints: DB.MemberDecl<DB.Integer, false>;
68
70
  }>, []>>>;
69
71
  Skill: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"SkillAdjustment", DB.Object<{
70
72
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
71
73
  points: DB.MemberDecl<DB.Integer, true>;
74
+ basePoints: DB.MemberDecl<DB.Integer, false>;
72
75
  }>, []>>>;
73
- Spellwork: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"SpellworkAdjustment", DB.Object<{
76
+ Spellwork: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"SpellworkAdjustmentWithBase", DB.Object<{
74
77
  id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SpellworkIdentifier", {
75
78
  Spell: DB.EnumCase<DB.ReferenceIdentifier>;
76
79
  Ritual: DB.EnumCase<DB.ReferenceIdentifier>;
77
80
  }, []>>, true>;
78
81
  points: DB.MemberDecl<DB.Integer, true>;
82
+ basePoints: DB.MemberDecl<DB.Integer, false>;
79
83
  tradition: DB.MemberDecl<DB.ReferenceIdentifier, false>;
80
84
  }>, []>>>;
81
85
  }, []>>>, false>;
@@ -135,6 +139,7 @@ export declare const Curriculum: DB.Entity<"Curriculum", {
135
139
  }, undefined>;
136
140
  export declare const LessonPackage: DB.Entity<"LessonPackage", {
137
141
  curriculum: DB.MemberDecl<DB.ReferenceIdentifier, true>;
142
+ apValue: DB.MemberDecl<DB.Integer, false>;
138
143
  spellwork_changes: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"SpellworkChange", DB.Object<{
139
144
  base: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"SpellworkAdjustment", DB.Object<{
140
145
  id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SpellworkIdentifier", {
@@ -160,17 +165,20 @@ export declare const LessonPackage: DB.Entity<"LessonPackage", {
160
165
  RangedCombatTechnique: DB.EnumCase<DB.ReferenceIdentifier>;
161
166
  }, []>>, true>;
162
167
  points: DB.MemberDecl<DB.Integer, true>;
168
+ basePoints: DB.MemberDecl<DB.Integer, false>;
163
169
  }>, []>>>;
164
170
  Skill: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"SkillAdjustment", DB.Object<{
165
171
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
166
172
  points: DB.MemberDecl<DB.Integer, true>;
173
+ basePoints: DB.MemberDecl<DB.Integer, false>;
167
174
  }>, []>>>;
168
- Spellwork: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"SpellworkAdjustment", DB.Object<{
175
+ Spellwork: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"SpellworkAdjustmentWithBase", DB.Object<{
169
176
  id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SpellworkIdentifier", {
170
177
  Spell: DB.EnumCase<DB.ReferenceIdentifier>;
171
178
  Ritual: DB.EnumCase<DB.ReferenceIdentifier>;
172
179
  }, []>>, true>;
173
180
  points: DB.MemberDecl<DB.Integer, true>;
181
+ basePoints: DB.MemberDecl<DB.Integer, false>;
174
182
  tradition: DB.MemberDecl<DB.ReferenceIdentifier, false>;
175
183
  }>, []>>>;
176
184
  }, []>>>, false>;
@@ -145,6 +145,10 @@ export const LessonPackage = DB.Entity(import.meta.url, {
145
145
  comment: "The associated curriculum.",
146
146
  type: CurriculumIdentifier(),
147
147
  }),
148
+ apValue: DB.Optional({
149
+ comment: "The AP value of the lesson package. This is only used to compare the generated AP value with the one in the book for error checking.",
150
+ type: DB.Integer({ minimum: 1 }),
151
+ }),
148
152
  spellwork_changes: DB.Optional({
149
153
  comment: "The spell values difference of the lesson package. This field reflects the changes (difference) to the field of the same name in the profession package. If a spell gets to SR 0 because of this, it will be removed completely.",
150
154
  type: DB.Array(DB.IncludeIdentifier(SpellworkChange), { minItems: 1, uniqueItems: true }),
@@ -185,7 +189,7 @@ const AbilityAdjustment = DB.Enum(import.meta.url, {
185
189
  values: () => ({
186
190
  CombatTechnique: DB.EnumCase({ type: DB.IncludeIdentifier(CombatTechniqueAdjustment) }),
187
191
  Skill: DB.EnumCase({ type: DB.IncludeIdentifier(SkillAdjustment) }),
188
- Spellwork: DB.EnumCase({ type: DB.IncludeIdentifier(SpellworkAdjustment) }),
192
+ Spellwork: DB.EnumCase({ type: DB.IncludeIdentifier(SpellworkAdjustmentWithBase) }),
189
193
  }),
190
194
  });
191
195
  const CombatTechniqueAdjustment = DB.TypeAlias(import.meta.url, {
@@ -198,6 +202,10 @@ const CombatTechniqueAdjustment = DB.TypeAlias(import.meta.url, {
198
202
  comment: "The combat technique points that will be added to the current combat technique rating.",
199
203
  type: DB.Integer({ minimum: -6, maximum: 6 }),
200
204
  }),
205
+ basePoints: DB.Optional({
206
+ comment: "The combat technique rating of the base profession package. This is only used to compare the derived rating from the profession package with the one in the book for error checking. Note that 6 is always added to that number, so to get a base rating of 10, this field should be 4.",
207
+ type: DB.Integer({ minimum: 0, maximum: 6 }),
208
+ }),
201
209
  }),
202
210
  });
203
211
  const SkillAdjustment = DB.TypeAlias(import.meta.url, {
@@ -210,6 +218,10 @@ const SkillAdjustment = DB.TypeAlias(import.meta.url, {
210
218
  comment: "The skill points that will be added to the current skill rating.",
211
219
  type: DB.Integer({ minimum: -8, maximum: 8 }),
212
220
  }),
221
+ basePoints: DB.Optional({
222
+ comment: "The skill rating of the base profession package. This is only used to compare the derived rating from the profession package with the one in the book for error checking.",
223
+ type: DB.Integer({ minimum: 0, maximum: 8 }),
224
+ }),
213
225
  }),
214
226
  });
215
227
  const SpellworkAdjustment = DB.TypeAlias(import.meta.url, {
@@ -228,3 +240,23 @@ const SpellworkAdjustment = DB.TypeAlias(import.meta.url, {
228
240
  }),
229
241
  }),
230
242
  });
243
+ const SpellworkAdjustmentWithBase = DB.TypeAlias(import.meta.url, {
244
+ name: "SpellworkAdjustmentWithBase",
245
+ type: () => DB.Object({
246
+ id: DB.Required({
247
+ type: DB.IncludeIdentifier(SpellworkIdentifier),
248
+ }),
249
+ points: DB.Required({
250
+ comment: "The skill points that will be added to the current skill rating. If a spell gets to a skill rating of 0 because of this, it will be removed completely.",
251
+ type: DB.Integer({ minimum: -10, maximum: 10 }),
252
+ }),
253
+ basePoints: DB.Optional({
254
+ comment: "The spell rating of the base profession package. This is only used to compare the derived rating from the profession package with the one in the book for error checking.",
255
+ type: DB.Integer({ minimum: 0, maximum: 10 }),
256
+ }),
257
+ tradition: DB.Optional({
258
+ comment: "The target tradition. If the target spell is not from the Guild Mage tradition, specify the tradition identifier here.",
259
+ type: MagicalTraditionIdentifier(),
260
+ }),
261
+ }),
262
+ });
@@ -1335,7 +1335,14 @@ export declare const Locale: DB.Entity<"Locale", {
1335
1335
  "corresponding liturgical style special ability": null;
1336
1336
  "corresponding magic style special ability": null;
1337
1337
  "corresponding skill style special ability": null;
1338
+ "Favored Skills": null;
1339
+ "The primary attribute of this Tradition is {$attr}.": null;
1340
+ "This primary attribute of this Tradition is {$attr}; however, {$casters} use only half of this stat (rounded up) to calculate their base AE pool or purchase AE.": null;
1341
+ "Tradition ({$name}) has no associated primary attribute, meaning {$casters} receive no bonus to the AE pool and cannot purchase additional AE.": null;
1342
+ ".input {$count :number} {{{$baseList}, and {$count} of your choice from the following list: {$selection}}}": null;
1338
1343
  All: null;
1344
+ "All Combat Techniques": null;
1345
+ "All Combat Techniques used in hunting": null;
1339
1346
  "All Close Combat Techniques": null;
1340
1347
  "All Ranged Combat Techniques": null;
1341
1348
  "Depends on combat style; both combat styles can be used only for their corresponding combat techniques": null;
@@ -1369,8 +1369,15 @@ export const Locale = DB.Entity(import.meta.url, {
1369
1369
  "corresponding liturgical style special ability": null,
1370
1370
  "corresponding magic style special ability": null,
1371
1371
  "corresponding skill style special ability": null,
1372
+ "Favored Skills": null,
1373
+ "The primary attribute of this Tradition is {$attr}.": null,
1374
+ "This primary attribute of this Tradition is {$attr}; however, {$casters} use only half of this stat (rounded up) to calculate their base AE pool or purchase AE.": null,
1375
+ "Tradition ({$name}) has no associated primary attribute, meaning {$casters} receive no bonus to the AE pool and cannot purchase additional AE.": null,
1376
+ ".input {$count :number} {{{$baseList}, and {$count} of your choice from the following list: {$selection}}}": null,
1372
1377
  // combat special ability -- applicable combat techniques
1373
1378
  "All": null,
1379
+ "All Combat Techniques": null, // for favored combat techniques
1380
+ "All Combat Techniques used in hunting": null,
1374
1381
  "All Close Combat Techniques": null,
1375
1382
  "All Ranged Combat Techniques": null,
1376
1383
  "Depends on combat style; both combat styles can be used only for their corresponding combat techniques": null,
@@ -4,24 +4,6 @@ export declare const Race: DB.Entity<"Race", {
4
4
  base_values: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"BaseValues", DB.NestedEntityMap<string, {
5
5
  value: DB.MemberDecl<DB.Integer, true>;
6
6
  }>, []>>, true>;
7
- automatic_advantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"AutomaticAdvantageDisadvantage", DB.Object<{
8
- id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
9
- }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
10
- automatic_disadvantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"AutomaticAdvantageDisadvantage", DB.Object<{
11
- id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
12
- }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
13
- strongly_recommended_advantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"CommonnessRatedAdvantageDisadvantage", DB.Object<{
14
- id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
15
- translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageTranslation", {
16
- options: DB.MemberDecl<DB.String, true>;
17
- }>, false>;
18
- }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
19
- strongly_recommended_disadvantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"CommonnessRatedAdvantageDisadvantage", DB.Object<{
20
- id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
21
- translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageTranslation", {
22
- options: DB.MemberDecl<DB.String, true>;
23
- }>, false>;
24
- }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
25
7
  hairColorCount: DB.MemberDecl<DB.Integer, false>;
26
8
  weight: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RandomWeightGeneration", DB.Object<{
27
9
  base: DB.MemberDecl<DB.Integer, true>;
@@ -55,6 +37,24 @@ export declare const Race: DB.Entity<"Race", {
55
37
  }>, []>>>, false>;
56
38
  }>, []>>, true>;
57
39
  common_cultures: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
40
+ automatic_advantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"AutomaticAdvantageDisadvantage", DB.Object<{
41
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
42
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
43
+ automatic_disadvantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"AutomaticAdvantageDisadvantage", DB.Object<{
44
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
45
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
46
+ strongly_recommended_advantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"CommonnessRatedAdvantageDisadvantage", DB.Object<{
47
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
48
+ translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageTranslation", {
49
+ options: DB.MemberDecl<DB.String, true>;
50
+ }>, false>;
51
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
52
+ strongly_recommended_disadvantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"CommonnessRatedAdvantageDisadvantage", DB.Object<{
53
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
54
+ translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageTranslation", {
55
+ options: DB.MemberDecl<DB.String, true>;
56
+ }>, false>;
57
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
58
58
  common_advantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"CommonnessRatedAdvantageDisadvantage", DB.Object<{
59
59
  id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
60
60
  translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageTranslation", {
@@ -90,6 +90,11 @@ export declare const Race: DB.Entity<"Race", {
90
90
  }>, []>>, true>;
91
91
  translations: DB.MemberDecl<DB.NestedEntityMap<"RaceVariantTranslation", {
92
92
  name: DB.MemberDecl<DB.String, true>;
93
+ attribute_adjustments: DB.MemberDecl<DB.String, false>;
94
+ automatic_advantages: DB.MemberDecl<DB.String, false>;
95
+ automatic_disadvantages: DB.MemberDecl<DB.String, false>;
96
+ strongly_recommended_advantages: DB.MemberDecl<DB.String, false>;
97
+ strongly_recommended_disadvantages: DB.MemberDecl<DB.String, false>;
93
98
  common_advantages: DB.MemberDecl<DB.String, false>;
94
99
  common_disadvantages: DB.MemberDecl<DB.String, false>;
95
100
  uncommon_advantages: DB.MemberDecl<DB.String, false>;
@@ -139,11 +144,6 @@ export declare const Race: DB.Entity<"Race", {
139
144
  }>, []>>>, []>>, true>;
140
145
  translations: DB.MemberDecl<DB.NestedEntityMap<"RaceTranslation", {
141
146
  name: DB.MemberDecl<DB.String, true>;
142
- attribute_adjustments: DB.MemberDecl<DB.String, true>;
143
- automatic_advantages: DB.MemberDecl<DB.String, false>;
144
- automatic_disadvantages: DB.MemberDecl<DB.String, false>;
145
- strongly_recommended_advantages: DB.MemberDecl<DB.String, false>;
146
- strongly_recommended_disadvantages: DB.MemberDecl<DB.String, false>;
147
147
  hairColorLabel: DB.MemberDecl<DB.String, false>;
148
148
  errata: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Errata", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"Erratum", DB.Object<{
149
149
  date: DB.MemberDecl<DB.Date, true>;
@@ -164,6 +164,24 @@ export declare const RaceVariant: DB.Entity<"RaceVariant", {
164
164
  }>, []>>>, false>;
165
165
  }>, []>>, true>;
166
166
  common_cultures: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
167
+ automatic_advantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"AutomaticAdvantageDisadvantage", DB.Object<{
168
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
169
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
170
+ automatic_disadvantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"AutomaticAdvantageDisadvantage", DB.Object<{
171
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
172
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
173
+ strongly_recommended_advantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"CommonnessRatedAdvantageDisadvantage", DB.Object<{
174
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
175
+ translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageTranslation", {
176
+ options: DB.MemberDecl<DB.String, true>;
177
+ }>, false>;
178
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
179
+ strongly_recommended_disadvantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"CommonnessRatedAdvantageDisadvantage", DB.Object<{
180
+ id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
181
+ translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageTranslation", {
182
+ options: DB.MemberDecl<DB.String, true>;
183
+ }>, false>;
184
+ }>, [Identifier: DB.Param<"Identifier", DB.Type>]>>>, false>;
167
185
  common_advantages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"CommonnessRatedAdvantageDisadvantage", DB.Object<{
168
186
  id: DB.MemberDecl<DB.TypeArgument<DB.Param<"Identifier", DB.Type>>, true>;
169
187
  translations: DB.MemberDecl<DB.NestedEntityMap<"CommonnessRatedAdvantageDisadvantageTranslation", {
@@ -199,6 +217,11 @@ export declare const RaceVariant: DB.Entity<"RaceVariant", {
199
217
  }>, []>>, true>;
200
218
  translations: DB.MemberDecl<DB.NestedEntityMap<"RaceVariantTranslation", {
201
219
  name: DB.MemberDecl<DB.String, true>;
220
+ attribute_adjustments: DB.MemberDecl<DB.String, false>;
221
+ automatic_advantages: DB.MemberDecl<DB.String, false>;
222
+ automatic_disadvantages: DB.MemberDecl<DB.String, false>;
223
+ strongly_recommended_advantages: DB.MemberDecl<DB.String, false>;
224
+ strongly_recommended_disadvantages: DB.MemberDecl<DB.String, false>;
202
225
  common_advantages: DB.MemberDecl<DB.String, false>;
203
226
  common_disadvantages: DB.MemberDecl<DB.String, false>;
204
227
  uncommon_advantages: DB.MemberDecl<DB.String, false>;
package/lib/types/Race.js CHANGED
@@ -20,24 +20,6 @@ export const Race = DB.Entity(import.meta.url, {
20
20
  comment: "The race’s base values.",
21
21
  type: DB.IncludeIdentifier(BaseValues),
22
22
  }),
23
- automatic_advantages: DB.Optional({
24
- comment: "A list of automatically applied advantages. This does only work for advantages with no further configuration such as level or special selection.",
25
- type: DB.Array(DB.GenIncludeIdentifier(AutomaticAdvantageDisadvantage, [AdvantageIdentifier()]), {
26
- minItems: 1,
27
- }),
28
- }),
29
- automatic_disadvantages: DB.Optional({
30
- comment: "A list of automatically applied disadvantages. This does only work for disadvantages with no further configuration such as level or special selection.",
31
- type: DB.Array(DB.GenIncludeIdentifier(AutomaticAdvantageDisadvantage, [DisadvantageIdentifier()]), { minItems: 1 }),
32
- }),
33
- strongly_recommended_advantages: DB.Optional({
34
- comment: "A list of strongly recommended advantages.",
35
- type: DB.Array(DB.GenIncludeIdentifier(CommonnessRatedAdvantageDisadvantage, [AdvantageIdentifier()]), { minItems: 1 }),
36
- }),
37
- strongly_recommended_disadvantages: DB.Optional({
38
- comment: "A list of strongly recommended disadvantages.",
39
- type: DB.Array(DB.GenIncludeIdentifier(CommonnessRatedAdvantageDisadvantage, [DisadvantageIdentifier()]), { minItems: 1 }),
40
- }),
41
23
  hairColorCount: DB.Optional({
42
24
  comment: "How many different hair colors a race may have. By default, they have a single one that is for their whole body, but a race may have multiple if their hair color is different for different body parts. Additionally, if the hair color is labelled differently (e.g. scale color), there might be multiple colors for different body parts as well. This should only be set if the hair color count is higher than 1.",
43
25
  type: DB.Integer({ minimum: 2 }),
@@ -75,26 +57,6 @@ export const Race = DB.Entity(import.meta.url, {
75
57
  comment: "The race’s name.",
76
58
  type: DB.String({ minLength: 1 }),
77
59
  }),
78
- attribute_adjustments: DB.Required({
79
- comment: "The respective attribute adjustments text from the source book.",
80
- type: DB.String({ minLength: 1 }),
81
- }),
82
- automatic_advantages: DB.Optional({
83
- comment: "The respective automatic advantages text from the source book.",
84
- type: DB.String({ minLength: 1 }),
85
- }),
86
- automatic_disadvantages: DB.Optional({
87
- comment: "The respective automatic disadvantages text from the source book.",
88
- type: DB.String({ minLength: 1 }),
89
- }),
90
- strongly_recommended_advantages: DB.Optional({
91
- comment: "The respective strongly recommended advantages text from the source book.",
92
- type: DB.String({ minLength: 1 }),
93
- }),
94
- strongly_recommended_disadvantages: DB.Optional({
95
- comment: "The respective strongly recommended disadvantages text from the source book.",
96
- type: DB.String({ minLength: 1 }),
97
- }),
98
60
  hairColorLabel: DB.Optional({
99
61
  comment: "The label for hair colors if it is not a hair color in that sense: Some races may have different labels for hair color such as scale color.",
100
62
  type: DB.String({ minLength: 1 }),
@@ -251,6 +213,24 @@ export const RaceVariant = DB.Entity(import.meta.url, {
251
213
  comment: "The list of common cultures.",
252
214
  type: DB.Array(CultureIdentifier(), { minItems: 1 }),
253
215
  }),
216
+ automatic_advantages: DB.Optional({
217
+ comment: "A list of automatically applied advantages. This does only work for advantages with no further configuration such as level or special selection.",
218
+ type: DB.Array(DB.GenIncludeIdentifier(AutomaticAdvantageDisadvantage, [AdvantageIdentifier()]), {
219
+ minItems: 1,
220
+ }),
221
+ }),
222
+ automatic_disadvantages: DB.Optional({
223
+ comment: "A list of automatically applied disadvantages. This does only work for disadvantages with no further configuration such as level or special selection.",
224
+ type: DB.Array(DB.GenIncludeIdentifier(AutomaticAdvantageDisadvantage, [DisadvantageIdentifier()]), { minItems: 1 }),
225
+ }),
226
+ strongly_recommended_advantages: DB.Optional({
227
+ comment: "A list of strongly recommended advantages.",
228
+ type: DB.Array(DB.GenIncludeIdentifier(CommonnessRatedAdvantageDisadvantage, [AdvantageIdentifier()]), { minItems: 1 }),
229
+ }),
230
+ strongly_recommended_disadvantages: DB.Optional({
231
+ comment: "A list of strongly recommended disadvantages.",
232
+ type: DB.Array(DB.GenIncludeIdentifier(CommonnessRatedAdvantageDisadvantage, [DisadvantageIdentifier()]), { minItems: 1 }),
233
+ }),
254
234
  common_advantages: DB.Optional({
255
235
  comment: "A list of common advantages.",
256
236
  type: DB.Array(DB.GenIncludeIdentifier(CommonnessRatedAdvantageDisadvantage, [AdvantageIdentifier()]), { minItems: 1 }),
@@ -284,6 +264,26 @@ export const RaceVariant = DB.Entity(import.meta.url, {
284
264
  comment: "The race variant’s name. If this is the only variant for a base race and thus just provides the missing information without actually being able to select, fill in the name of the base race.",
285
265
  type: DB.String({ minLength: 1 }),
286
266
  }),
267
+ attribute_adjustments: DB.Optional({
268
+ comment: "The respective attribute adjustments text from the source book.",
269
+ type: DB.String({ minLength: 1 }),
270
+ }),
271
+ automatic_advantages: DB.Optional({
272
+ comment: "The respective automatic advantages text from the source book.",
273
+ type: DB.String({ minLength: 1 }),
274
+ }),
275
+ automatic_disadvantages: DB.Optional({
276
+ comment: "The respective automatic disadvantages text from the source book.",
277
+ type: DB.String({ minLength: 1 }),
278
+ }),
279
+ strongly_recommended_advantages: DB.Optional({
280
+ comment: "The respective strongly recommended advantages text from the source book.",
281
+ type: DB.String({ minLength: 1 }),
282
+ }),
283
+ strongly_recommended_disadvantages: DB.Optional({
284
+ comment: "The respective strongly recommended disadvantages text from the source book.",
285
+ type: DB.String({ minLength: 1 }),
286
+ }),
287
287
  common_advantages: DB.Optional({
288
288
  comment: "The respective common advantages text from the source book.",
289
289
  type: DB.String({ minLength: 1 }),
@@ -947,7 +947,7 @@ export declare const MagicalTradition: DB.Entity<"MagicalTradition", {
947
947
  }>, false>;
948
948
  }, "parent">>, true>;
949
949
  primary: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PrimaryAttribute", DB.Object<{
950
- id: DB.MemberDecl<DB.ReferenceIdentifier, false>;
950
+ id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
951
951
  use_half_for_arcane_energy: DB.MemberDecl<DB.Boolean, true>;
952
952
  }>, []>>, false>;
953
953
  can_learn_cantrips: DB.MemberDecl<DB.Boolean, true>;
@@ -1119,6 +1119,7 @@ export declare const MagicalTradition: DB.Entity<"MagicalTradition", {
1119
1119
  name: DB.MemberDecl<DB.String, true>;
1120
1120
  name_for_arcane_spellworks: DB.MemberDecl<DB.String, false>;
1121
1121
  name_in_library: DB.MemberDecl<DB.String, false>;
1122
+ nameOfSpellcasters: DB.MemberDecl<DB.String, true>;
1122
1123
  special_rules: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"SpecialRule", DB.Object<{
1123
1124
  label: DB.MemberDecl<DB.String, false>;
1124
1125
  text: DB.MemberDecl<DB.String, true>;
@@ -1132,7 +1133,3 @@ export declare const MagicalTradition: DB.Entity<"MagicalTradition", {
1132
1133
  }>, []>>>, []>>, false>;
1133
1134
  }>, true>;
1134
1135
  }, undefined>;
1135
- export declare const PrimaryAttribute: DB.TypeAlias<"PrimaryAttribute", DB.Object<{
1136
- id: DB.MemberDecl<DB.ReferenceIdentifier, false>;
1137
- use_half_for_arcane_energy: DB.MemberDecl<DB.Boolean, true>;
1138
- }>, []>;
@@ -76,6 +76,10 @@ export const MagicalTradition = DB.Entity(import.meta.url, {
76
76
  type: DB.String({ minLength: 1 }),
77
77
  }),
78
78
  name_in_library,
79
+ nameOfSpellcasters: DB.Required({
80
+ comment: "The name of spellcasters of this tradition. This is used to derive special rules from the data set already for this tradition.",
81
+ type: DB.String({ minLength: 1 }),
82
+ }),
79
83
  special_rules: DB.Required({
80
84
  comment: "The special rules of the tradition. They should be sorted like they are in the book.",
81
85
  type: DB.Array(DB.IncludeIdentifier(SpecialRule), { minItems: 1 }),
@@ -100,10 +104,10 @@ export const MagicalTradition = DB.Entity(import.meta.url, {
100
104
  },
101
105
  ],
102
106
  });
103
- export const PrimaryAttribute = DB.TypeAlias(import.meta.url, {
107
+ const PrimaryAttribute = DB.TypeAlias(import.meta.url, {
104
108
  name: "PrimaryAttribute",
105
109
  type: () => DB.Object({
106
- id: DB.Optional({
110
+ id: DB.Required({
107
111
  comment: "The attribute’s identifier.",
108
112
  type: AttributeIdentifier(),
109
113
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optolith/database-schema",
3
- "version": "0.42.4",
3
+ "version": "0.43.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",