@optolith/database-schema 0.47.2 → 0.47.4

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 (55) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/gen/types.d.ts +230 -96
  3. package/lib/types/Culture.d.ts +4 -0
  4. package/lib/types/Culture.js +10 -0
  5. package/lib/types/Profession.js +1 -1
  6. package/lib/types/Race.d.ts +100 -52
  7. package/lib/types/Race.js +13 -4
  8. package/lib/types/Skill.d.ts +123 -0
  9. package/lib/types/Skill.js +2 -1
  10. package/lib/types/_ActivatableNonMundane.d.ts +4 -0
  11. package/lib/types/_ActivatableNonMundane.js +4 -0
  12. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.d.ts +4 -0
  13. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.js +5 -18
  14. package/lib/types/traditionArtifacts/AttireEnchantment.d.ts +4 -0
  15. package/lib/types/traditionArtifacts/AttireEnchantment.js +5 -18
  16. package/lib/types/traditionArtifacts/Beutelzauber.d.ts +4 -0
  17. package/lib/types/traditionArtifacts/Beutelzauber.js +5 -18
  18. package/lib/types/traditionArtifacts/BowlEnchantment.d.ts +4 -0
  19. package/lib/types/traditionArtifacts/BowlEnchantment.js +5 -18
  20. package/lib/types/traditionArtifacts/CauldronEnchantment.d.ts +4 -0
  21. package/lib/types/traditionArtifacts/CauldronEnchantment.js +5 -18
  22. package/lib/types/traditionArtifacts/ChronicleEnchantment.d.ts +4 -0
  23. package/lib/types/traditionArtifacts/ChronicleEnchantment.js +5 -18
  24. package/lib/types/traditionArtifacts/DaggerRitual.d.ts +4 -0
  25. package/lib/types/traditionArtifacts/DaggerRitual.js +5 -18
  26. package/lib/types/traditionArtifacts/FoolsHatEnchantment.d.ts +4 -0
  27. package/lib/types/traditionArtifacts/FoolsHatEnchantment.js +5 -18
  28. package/lib/types/traditionArtifacts/Haubenzauber.d.ts +4 -0
  29. package/lib/types/traditionArtifacts/Haubenzauber.js +5 -18
  30. package/lib/types/traditionArtifacts/InstrumentEnchantment.d.ts +4 -0
  31. package/lib/types/traditionArtifacts/InstrumentEnchantment.js +5 -18
  32. package/lib/types/traditionArtifacts/Krallenkettenzauber.d.ts +4 -0
  33. package/lib/types/traditionArtifacts/Krallenkettenzauber.js +5 -18
  34. package/lib/types/traditionArtifacts/Kristallkugelzauber.d.ts +4 -0
  35. package/lib/types/traditionArtifacts/Kristallkugelzauber.js +5 -18
  36. package/lib/types/traditionArtifacts/OrbEnchantment.d.ts +4 -0
  37. package/lib/types/traditionArtifacts/OrbEnchantment.js +5 -18
  38. package/lib/types/traditionArtifacts/RingEnchantment.d.ts +4 -0
  39. package/lib/types/traditionArtifacts/RingEnchantment.js +5 -18
  40. package/lib/types/traditionArtifacts/SickleRitual.d.ts +4 -0
  41. package/lib/types/traditionArtifacts/SickleRitual.js +5 -18
  42. package/lib/types/traditionArtifacts/SpellSwordEnchantment.d.ts +4 -0
  43. package/lib/types/traditionArtifacts/SpellSwordEnchantment.js +5 -18
  44. package/lib/types/traditionArtifacts/StaffEnchantment.js +5 -23
  45. package/lib/types/traditionArtifacts/ToyEnchantment.d.ts +4 -0
  46. package/lib/types/traditionArtifacts/ToyEnchantment.js +5 -18
  47. package/lib/types/traditionArtifacts/Trinkhornzauber.d.ts +4 -0
  48. package/lib/types/traditionArtifacts/Trinkhornzauber.js +5 -18
  49. package/lib/types/traditionArtifacts/WandEnchantment.d.ts +4 -0
  50. package/lib/types/traditionArtifacts/WandEnchantment.js +5 -18
  51. package/lib/types/traditionArtifacts/WeaponEnchantment.d.ts +4 -0
  52. package/lib/types/traditionArtifacts/WeaponEnchantment.js +5 -18
  53. package/lib/types/traditionArtifacts/_shared.d.ts +19 -0
  54. package/lib/types/traditionArtifacts/_shared.js +20 -0
  55. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
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.47.4](https://github.com/Optolith/database-schema/compare/v0.47.3...v0.47.4) (2026-06-13)
6
+
7
+
8
+ ### Features
9
+
10
+ * culture language translations ([b5ece95](https://github.com/Optolith/database-schema/commit/b5ece951032138b19cb02dfc8172177bd337b37f))
11
+
12
+ ## [0.47.3](https://github.com/Optolith/database-schema/compare/v0.47.2...v0.47.3) (2026-06-13)
13
+
14
+
15
+ ### Features
16
+
17
+ * level and options for automatic and str. rec. dis/advantages in sub-races ([a7b8e7e](https://github.com/Optolith/database-schema/commit/a7b8e7ec0c6c1c90b8a656b9b19cd156d403382b)), closes [#150](https://github.com/Optolith/database-schema/issues/150)
18
+ * optional sources for skill applications ([cdb86e9](https://github.com/Optolith/database-schema/commit/cdb86e9aa6768601c9f017f01bde6d70108db083))
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * profession cantrips must be unique ([6c9f7a6](https://github.com/Optolith/database-schema/commit/6c9f7a6ec2bafb35c40680d1199739f1b435e6a9))
24
+
5
25
  ## [0.47.2](https://github.com/Optolith/database-schema/compare/v0.47.1...v0.47.2) (2026-06-08)
6
26
 
7
27
 
package/gen/types.d.ts CHANGED
@@ -3886,6 +3886,11 @@ export interface SkillApplication {
3886
3886
  */
3887
3887
  parent: Skill_ID
3888
3888
 
3889
+ /**
3890
+ * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
3891
+ */
3892
+ src?: PublicationRefs
3893
+
3889
3894
  /**
3890
3895
  * All translations for the entry, identified by IETF language tag (BCP47).
3891
3896
  */
@@ -3906,98 +3911,6 @@ export interface SkillApplicationTranslation {
3906
3911
  name: string
3907
3912
  }
3908
3913
 
3909
- /**
3910
- * Indicates whether encumbrance gives a penalty for checks with the skill.
3911
- */
3912
- export type EncumbranceInfluence =
3913
- | {
3914
- kind: "Yes"
3915
- }
3916
- | {
3917
- kind: "No"
3918
- }
3919
- | {
3920
- kind: "Maybe"
3921
- }
3922
-
3923
- export type ImprovementCost =
3924
- | {
3925
- kind: "A"
3926
- }
3927
- | {
3928
- kind: "B"
3929
- }
3930
- | {
3931
- kind: "C"
3932
- }
3933
- | {
3934
- kind: "D"
3935
- }
3936
-
3937
- export interface SkillGroup {
3938
- /**
3939
- * The position of the skill group in lists. This has to be a unique value.
3940
- */
3941
- position: number
3942
-
3943
- /**
3944
- * The skill group’s skill check attributes
3945
- */
3946
- check: SkillCheck
3947
-
3948
- /**
3949
- * The display color of the skill group.
3950
- */
3951
- color: GradientColor
3952
-
3953
- /**
3954
- * All translations for the entry, identified by IETF language tag (BCP47).
3955
- */
3956
- translations: {
3957
- [localeId: string]: SkillGroupTranslation
3958
- }
3959
- }
3960
-
3961
- /**
3962
- * The entity’s identifier. A UUID or a locale code if it is registered as the locale entity.
3963
- */
3964
- export type SkillGroup_ID = string
3965
-
3966
- export interface SkillGroupTranslation {
3967
- /**
3968
- * The skill group’s name.
3969
- */
3970
- name: string
3971
-
3972
- /**
3973
- * The skill group’s long name.
3974
- */
3975
- longName: string
3976
- }
3977
-
3978
- /**
3979
- * A display color for entries that have a certain color as a gradient in the header of their box in the official publications.
3980
- */
3981
- export type GradientColor =
3982
- | {
3983
- kind: "Gaia"
3984
- }
3985
- | {
3986
- kind: "LightHarvestGold"
3987
- }
3988
- | {
3989
- kind: "OldRed"
3990
- }
3991
- | {
3992
- kind: "SanMarino"
3993
- }
3994
- | {
3995
- kind: "TribalTeal"
3996
- }
3997
- | {
3998
- kind: "Verdigris"
3999
- }
4000
-
4001
3914
  /**
4002
3915
  * The publications where you can find the entry.
4003
3916
  */
@@ -4284,6 +4197,98 @@ export interface Deprecation {
4284
4197
  printing: number
4285
4198
  }
4286
4199
 
4200
+ /**
4201
+ * Indicates whether encumbrance gives a penalty for checks with the skill.
4202
+ */
4203
+ export type EncumbranceInfluence =
4204
+ | {
4205
+ kind: "Yes"
4206
+ }
4207
+ | {
4208
+ kind: "No"
4209
+ }
4210
+ | {
4211
+ kind: "Maybe"
4212
+ }
4213
+
4214
+ export type ImprovementCost =
4215
+ | {
4216
+ kind: "A"
4217
+ }
4218
+ | {
4219
+ kind: "B"
4220
+ }
4221
+ | {
4222
+ kind: "C"
4223
+ }
4224
+ | {
4225
+ kind: "D"
4226
+ }
4227
+
4228
+ export interface SkillGroup {
4229
+ /**
4230
+ * The position of the skill group in lists. This has to be a unique value.
4231
+ */
4232
+ position: number
4233
+
4234
+ /**
4235
+ * The skill group’s skill check attributes
4236
+ */
4237
+ check: SkillCheck
4238
+
4239
+ /**
4240
+ * The display color of the skill group.
4241
+ */
4242
+ color: GradientColor
4243
+
4244
+ /**
4245
+ * All translations for the entry, identified by IETF language tag (BCP47).
4246
+ */
4247
+ translations: {
4248
+ [localeId: string]: SkillGroupTranslation
4249
+ }
4250
+ }
4251
+
4252
+ /**
4253
+ * The entity’s identifier. A UUID or a locale code if it is registered as the locale entity.
4254
+ */
4255
+ export type SkillGroup_ID = string
4256
+
4257
+ export interface SkillGroupTranslation {
4258
+ /**
4259
+ * The skill group’s name.
4260
+ */
4261
+ name: string
4262
+
4263
+ /**
4264
+ * The skill group’s long name.
4265
+ */
4266
+ longName: string
4267
+ }
4268
+
4269
+ /**
4270
+ * A display color for entries that have a certain color as a gradient in the header of their box in the official publications.
4271
+ */
4272
+ export type GradientColor =
4273
+ | {
4274
+ kind: "Gaia"
4275
+ }
4276
+ | {
4277
+ kind: "LightHarvestGold"
4278
+ }
4279
+ | {
4280
+ kind: "OldRed"
4281
+ }
4282
+ | {
4283
+ kind: "SanMarino"
4284
+ }
4285
+ | {
4286
+ kind: "TribalTeal"
4287
+ }
4288
+ | {
4289
+ kind: "Verdigris"
4290
+ }
4291
+
4287
4292
  /**
4288
4293
  * A list of errata for the entry in the specific language.
4289
4294
  */
@@ -9405,6 +9410,25 @@ export interface CultureLanguage {
9405
9410
  * The language specializations, if any.
9406
9411
  */
9407
9412
  specializations?: LanguageSpecialization_ID[]
9413
+
9414
+ /**
9415
+ * All translations for the entry, identified by IETF language tag (BCP47).
9416
+ */
9417
+ translations?: {
9418
+ [localeId: string]: CultureLanguageTranslation
9419
+ }
9420
+ }
9421
+
9422
+ export interface CultureLanguageTranslation {
9423
+ /**
9424
+ * The concrete language specialization, if the language allows to specify arbitrary text.
9425
+ */
9426
+ specialization?: string
9427
+
9428
+ /**
9429
+ * A different promt fro the language specialization, if the language allows to specify arbitrary text.
9430
+ */
9431
+ specializationPrompt?: string
9408
9432
  }
9409
9433
 
9410
9434
  export interface Script {
@@ -10613,6 +10637,11 @@ export interface ArcaneOrbEnchantmentTranslation {
10613
10637
  */
10614
10638
  effect: string
10615
10639
 
10640
+ /**
10641
+ * A note, appended to the generated cost string in parenthesis.
10642
+ */
10643
+ cost_note?: ResponsiveTextOptional
10644
+
10616
10645
  /**
10617
10646
  * The binding cost for an enchantment.
10618
10647
  * @deprecated
@@ -11310,6 +11339,11 @@ export interface AttireEnchantmentTranslation {
11310
11339
  */
11311
11340
  effect: string
11312
11341
 
11342
+ /**
11343
+ * A note, appended to the generated cost string in parenthesis.
11344
+ */
11345
+ cost_note?: ResponsiveTextOptional
11346
+
11313
11347
  /**
11314
11348
  * The binding cost for an enchantment.
11315
11349
  * @deprecated
@@ -11428,6 +11462,11 @@ export interface BeutelzauberTranslation {
11428
11462
  */
11429
11463
  effect: string
11430
11464
 
11465
+ /**
11466
+ * A note, appended to the generated cost string in parenthesis.
11467
+ */
11468
+ cost_note?: ResponsiveTextOptional
11469
+
11431
11470
  /**
11432
11471
  * The binding cost for an enchantment.
11433
11472
  * @deprecated
@@ -11546,6 +11585,11 @@ export interface BowlEnchantmentTranslation {
11546
11585
  */
11547
11586
  effect: string
11548
11587
 
11588
+ /**
11589
+ * A note, appended to the generated cost string in parenthesis.
11590
+ */
11591
+ cost_note?: ResponsiveTextOptional
11592
+
11549
11593
  /**
11550
11594
  * The binding cost for an enchantment.
11551
11595
  * @deprecated
@@ -12701,6 +12745,11 @@ export interface CauldronEnchantmentTranslation {
12701
12745
  */
12702
12746
  effect: string
12703
12747
 
12748
+ /**
12749
+ * A note, appended to the generated cost string in parenthesis.
12750
+ */
12751
+ cost_note?: ResponsiveTextOptional
12752
+
12704
12753
  /**
12705
12754
  * The binding cost for an enchantment.
12706
12755
  * @deprecated
@@ -12930,6 +12979,11 @@ export interface ChronicleEnchantmentTranslation {
12930
12979
  */
12931
12980
  effect: string
12932
12981
 
12982
+ /**
12983
+ * A note, appended to the generated cost string in parenthesis.
12984
+ */
12985
+ cost_note?: ResponsiveTextOptional
12986
+
12933
12987
  /**
12934
12988
  * The binding cost for an enchantment.
12935
12989
  * @deprecated
@@ -13938,6 +13992,11 @@ export interface DaggerRitualTranslation {
13938
13992
  */
13939
13993
  effect: string
13940
13994
 
13995
+ /**
13996
+ * A note, appended to the generated cost string in parenthesis.
13997
+ */
13998
+ cost_note?: ResponsiveTextOptional
13999
+
13941
14000
  /**
13942
14001
  * The binding cost for an enchantment.
13943
14002
  * @deprecated
@@ -14339,6 +14398,11 @@ export interface FoolsHatEnchantmentTranslation {
14339
14398
  */
14340
14399
  effect: string
14341
14400
 
14401
+ /**
14402
+ * A note, appended to the generated cost string in parenthesis.
14403
+ */
14404
+ cost_note?: ResponsiveTextOptional
14405
+
14342
14406
  /**
14343
14407
  * The binding cost for an enchantment.
14344
14408
  * @deprecated
@@ -14547,6 +14611,11 @@ export interface HaubenzauberTranslation {
14547
14611
  */
14548
14612
  effect: string
14549
14613
 
14614
+ /**
14615
+ * A note, appended to the generated cost string in parenthesis.
14616
+ */
14617
+ cost_note?: ResponsiveTextOptional
14618
+
14550
14619
  /**
14551
14620
  * The binding cost for an enchantment.
14552
14621
  * @deprecated
@@ -14665,6 +14734,11 @@ export interface InstrumentEnchantmentTranslation {
14665
14734
  */
14666
14735
  effect: string
14667
14736
 
14737
+ /**
14738
+ * A note, appended to the generated cost string in parenthesis.
14739
+ */
14740
+ cost_note?: ResponsiveTextOptional
14741
+
14668
14742
  /**
14669
14743
  * The binding cost for an enchantment.
14670
14744
  * @deprecated
@@ -14868,6 +14942,11 @@ export interface KrallenkettenzauberTranslation {
14868
14942
  */
14869
14943
  effect: string
14870
14944
 
14945
+ /**
14946
+ * A note, appended to the generated cost string in parenthesis.
14947
+ */
14948
+ cost_note?: ResponsiveTextOptional
14949
+
14871
14950
  /**
14872
14951
  * The binding cost for an enchantment.
14873
14952
  * @deprecated
@@ -14986,6 +15065,11 @@ export interface KristallkugelzauberTranslation {
14986
15065
  */
14987
15066
  effect: string
14988
15067
 
15068
+ /**
15069
+ * A note, appended to the generated cost string in parenthesis.
15070
+ */
15071
+ cost_note?: ResponsiveTextOptional
15072
+
14989
15073
  /**
14990
15074
  * The binding cost for an enchantment.
14991
15075
  * @deprecated
@@ -15548,6 +15632,11 @@ export interface OrbEnchantmentTranslation {
15548
15632
  */
15549
15633
  effect: string
15550
15634
 
15635
+ /**
15636
+ * A note, appended to the generated cost string in parenthesis.
15637
+ */
15638
+ cost_note?: ResponsiveTextOptional
15639
+
15551
15640
  /**
15552
15641
  * The binding cost for an enchantment.
15553
15642
  * @deprecated
@@ -15936,6 +16025,11 @@ export interface RingEnchantmentTranslation {
15936
16025
  */
15937
16026
  effect: string
15938
16027
 
16028
+ /**
16029
+ * A note, appended to the generated cost string in parenthesis.
16030
+ */
16031
+ cost_note?: ResponsiveTextOptional
16032
+
15939
16033
  /**
15940
16034
  * The binding cost for an enchantment.
15941
16035
  * @deprecated
@@ -16224,6 +16318,11 @@ export interface SickleRitualTranslation {
16224
16318
  */
16225
16319
  effect: string
16226
16320
 
16321
+ /**
16322
+ * A note, appended to the generated cost string in parenthesis.
16323
+ */
16324
+ cost_note?: ResponsiveTextOptional
16325
+
16227
16326
  /**
16228
16327
  * The binding cost for an enchantment.
16229
16328
  * @deprecated
@@ -16527,6 +16626,11 @@ export interface SpellSwordEnchantmentTranslation {
16527
16626
  */
16528
16627
  effect: string
16529
16628
 
16629
+ /**
16630
+ * A note, appended to the generated cost string in parenthesis.
16631
+ */
16632
+ cost_note?: ResponsiveTextOptional
16633
+
16530
16634
  /**
16531
16635
  * The binding cost for an enchantment.
16532
16636
  * @deprecated
@@ -16768,6 +16872,11 @@ export interface ToyEnchantmentTranslation {
16768
16872
  */
16769
16873
  effect: string
16770
16874
 
16875
+ /**
16876
+ * A note, appended to the generated cost string in parenthesis.
16877
+ */
16878
+ cost_note?: ResponsiveTextOptional
16879
+
16771
16880
  /**
16772
16881
  * The binding cost for an enchantment.
16773
16882
  * @deprecated
@@ -16886,6 +16995,11 @@ export interface TrinkhornzauberTranslation {
16886
16995
  */
16887
16996
  effect: string
16888
16997
 
16998
+ /**
16999
+ * A note, appended to the generated cost string in parenthesis.
17000
+ */
17001
+ cost_note?: ResponsiveTextOptional
17002
+
16889
17003
  /**
16890
17004
  * The binding cost for an enchantment.
16891
17005
  * @deprecated
@@ -17169,6 +17283,11 @@ export interface WandEnchantmentTranslation {
17169
17283
  */
17170
17284
  effect: string
17171
17285
 
17286
+ /**
17287
+ * A note, appended to the generated cost string in parenthesis.
17288
+ */
17289
+ cost_note?: ResponsiveTextOptional
17290
+
17172
17291
  /**
17173
17292
  * The binding cost for an enchantment.
17174
17293
  * @deprecated
@@ -17287,6 +17406,11 @@ export interface WeaponEnchantmentTranslation {
17287
17406
  */
17288
17407
  effect: string
17289
17408
 
17409
+ /**
17410
+ * A note, appended to the generated cost string in parenthesis.
17411
+ */
17412
+ cost_note?: ResponsiveTextOptional
17413
+
17290
17414
  /**
17291
17415
  * The binding cost for an enchantment.
17292
17416
  * @deprecated
@@ -20563,24 +20687,24 @@ export interface RaceVariant {
20563
20687
  common_cultures?: Culture_ID[]
20564
20688
 
20565
20689
  /**
20566
- * A list of automatically applied advantages. This does only work for advantages with no further configuration such as level or special selection.
20690
+ * A list of automatically applied advantages.
20567
20691
  */
20568
20692
  automatic_advantages?: AutomaticAdvantageDisadvantage<Advantage_ID>[]
20569
20693
 
20570
20694
  /**
20571
- * A list of automatically applied disadvantages. This does only work for disadvantages with no further configuration such as level or special selection.
20695
+ * A list of automatically applied disadvantages.
20572
20696
  */
20573
20697
  automatic_disadvantages?: AutomaticAdvantageDisadvantage<Disadvantage_ID>[]
20574
20698
 
20575
20699
  /**
20576
20700
  * A list of strongly recommended advantages.
20577
20701
  */
20578
- strongly_recommended_advantages?: CommonnessRatedAdvantageDisadvantage<Advantage_ID>[]
20702
+ strongly_recommended_advantages?: AutomaticAdvantageDisadvantage<Advantage_ID>[]
20579
20703
 
20580
20704
  /**
20581
20705
  * A list of strongly recommended disadvantages.
20582
20706
  */
20583
- strongly_recommended_disadvantages?: CommonnessRatedAdvantageDisadvantage<Disadvantage_ID>[]
20707
+ strongly_recommended_disadvantages?: AutomaticAdvantageDisadvantage<Disadvantage_ID>[]
20584
20708
 
20585
20709
  /**
20586
20710
  * A list of common advantages.
@@ -20737,6 +20861,16 @@ export interface AutomaticAdvantageDisadvantage<Identifier> {
20737
20861
  * The automatic advantage or disadvantage.
20738
20862
  */
20739
20863
  id: Identifier
20864
+
20865
+ /**
20866
+ * The level of the entry.
20867
+ */
20868
+ level?: number
20869
+
20870
+ /**
20871
+ * Required select options. Order is important. Typically, you only need the first array index, though.
20872
+ */
20873
+ options?: RequirableSelectOptionIdentifier[]
20740
20874
  }
20741
20875
 
20742
20876
  export interface HairColor {
@@ -3,6 +3,10 @@ export declare const Culture: DB.Entity<"Culture", {
3
3
  language: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"CultureLanguage", DB.Object<{
4
4
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
5
5
  specializations: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
6
+ translations: DB.MemberDecl<DB.NestedEntityMap<"CultureLanguageTranslation", {
7
+ specialization: DB.MemberDecl<DB.String, false>;
8
+ specializationPrompt: DB.MemberDecl<DB.String, false>;
9
+ }>, false>;
6
10
  }>, []>>>, true>;
7
11
  script: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
8
12
  area_knowledge: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"AreaKnowledge", DB.Object<{
@@ -112,6 +112,16 @@ const CultureLanguage = DB.TypeAlias(import.meta.url, {
112
112
  comment: "The language specializations, if any.",
113
113
  type: DB.Array(LanguageSpecializationIdentifier(), { minItems: 1, uniqueItems: true }),
114
114
  }),
115
+ translations: NestedTranslationMap(DB.Optional, "CultureLanguage", DB.Object({
116
+ specialization: DB.Optional({
117
+ comment: "The concrete language specialization, if the language allows to specify arbitrary text.",
118
+ type: DB.String({ minLength: 1 }),
119
+ }),
120
+ specializationPrompt: DB.Optional({
121
+ comment: "A different promt fro the language specialization, if the language allows to specify arbitrary text.",
122
+ type: DB.String({ minLength: 1 }),
123
+ }),
124
+ }, { minProperties: 1 })),
115
125
  }),
116
126
  });
117
127
  const AreaKnowledge = DB.TypeAlias(import.meta.url, {
@@ -184,7 +184,7 @@ export const ProfessionPackage = DB.Entity(import.meta.url, {
184
184
  }),
185
185
  cantrips: DB.Optional({
186
186
  comment: "The cantrips the profession receives from the package.",
187
- type: DB.Array(CantripIdentifier(), { minItems: 1 }),
187
+ type: DB.Array(CantripIdentifier(), { minItems: 1, uniqueItems: true }),
188
188
  }),
189
189
  spells: DB.Optional({
190
190
  comment: "The skill ratings a magical profession receives for spells; these spells are considered activated. Spells from an unfamiliar Tradition, if any, are identified as such.",