@optolith/database-schema 0.77.1 → 0.79.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/gen/types.d.ts +217 -3
  3. package/lib/cache/activatableSelectOptions.d.ts +2 -2
  4. package/lib/cache/activatableSelectOptions.js +2 -58
  5. package/lib/types/Advantage.d.ts +29 -0
  6. package/lib/types/Advantage.js +2 -1
  7. package/lib/types/Culture.d.ts +1 -0
  8. package/lib/types/Culture.js +5 -1
  9. package/lib/types/Disadvantage.d.ts +29 -0
  10. package/lib/types/Disadvantage.js +2 -1
  11. package/lib/types/Locale.d.ts +10 -0
  12. package/lib/types/Locale.js +11 -0
  13. package/lib/types/Profession.d.ts +178 -154
  14. package/lib/types/Profession.js +40 -1
  15. package/lib/types/Race.d.ts +1 -0
  16. package/lib/types/Race.js +10 -0
  17. package/lib/types/_ActivatableSelectOptions.d.ts +939 -0
  18. package/lib/types/_ActivatableSelectOptions.js +178 -117
  19. package/lib/types/equipment/item/EquipmentCategory.d.ts +15 -0
  20. package/lib/types/equipment/item/EquipmentCategory.js +5 -0
  21. package/lib/types/equipment/item/IlluminationLightSource.d.ts +9 -0
  22. package/lib/types/equipment/item/IlluminationLightSource.js +1 -1
  23. package/lib/types/equipment/item/Item.d.ts +9 -0
  24. package/lib/types/equipment/item/Item.js +6 -0
  25. package/lib/types/prerequisites/single/ActivatablePrerequisite.js +2 -0
  26. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.d.ts +29 -0
  27. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.js +2 -1
  28. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.d.ts +29 -0
  29. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.js +2 -1
  30. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.d.ts +29 -0
  31. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.js +2 -1
  32. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.d.ts +29 -0
  33. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.js +2 -1
  34. package/lib/types/specialAbility/AncestorGlyph.d.ts +29 -0
  35. package/lib/types/specialAbility/AncestorGlyph.js +2 -1
  36. package/lib/types/specialAbility/BlessedTradition.d.ts +29 -0
  37. package/lib/types/specialAbility/BlessedTradition.js +2 -1
  38. package/lib/types/specialAbility/BrawlingSpecialAbility.d.ts +29 -0
  39. package/lib/types/specialAbility/BrawlingSpecialAbility.js +2 -1
  40. package/lib/types/specialAbility/CeremonialItemSpecialAbility.d.ts +29 -0
  41. package/lib/types/specialAbility/CeremonialItemSpecialAbility.js +2 -1
  42. package/lib/types/specialAbility/CombatSpecialAbility.d.ts +29 -0
  43. package/lib/types/specialAbility/CombatSpecialAbility.js +2 -1
  44. package/lib/types/specialAbility/CombatStyleSpecialAbility.d.ts +29 -0
  45. package/lib/types/specialAbility/CombatStyleSpecialAbility.js +3 -2
  46. package/lib/types/specialAbility/CommandSpecialAbility.d.ts +29 -0
  47. package/lib/types/specialAbility/CommandSpecialAbility.js +2 -1
  48. package/lib/types/specialAbility/FamiliarSpecialAbility.d.ts +29 -0
  49. package/lib/types/specialAbility/FamiliarSpecialAbility.js +2 -1
  50. package/lib/types/specialAbility/FatePointSexSpecialAbility.d.ts +29 -0
  51. package/lib/types/specialAbility/FatePointSexSpecialAbility.js +2 -1
  52. package/lib/types/specialAbility/FatePointSpecialAbility.d.ts +29 -0
  53. package/lib/types/specialAbility/FatePointSpecialAbility.js +2 -1
  54. package/lib/types/specialAbility/GeneralSpecialAbility.d.ts +29 -0
  55. package/lib/types/specialAbility/GeneralSpecialAbility.js +2 -1
  56. package/lib/types/specialAbility/KarmaSpecialAbility.d.ts +29 -0
  57. package/lib/types/specialAbility/KarmaSpecialAbility.js +2 -1
  58. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.d.ts +29 -0
  59. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.js +2 -1
  60. package/lib/types/specialAbility/LycantropicGift.d.ts +29 -0
  61. package/lib/types/specialAbility/LycantropicGift.js +2 -1
  62. package/lib/types/specialAbility/MagicStyleSpecialAbility.d.ts +29 -0
  63. package/lib/types/specialAbility/MagicStyleSpecialAbility.js +2 -1
  64. package/lib/types/specialAbility/MagicalSpecialAbility.d.ts +29 -0
  65. package/lib/types/specialAbility/MagicalSpecialAbility.js +2 -1
  66. package/lib/types/specialAbility/MagicalTradition.d.ts +29 -0
  67. package/lib/types/specialAbility/MagicalTradition.js +2 -1
  68. package/lib/types/specialAbility/PactGift.d.ts +29 -0
  69. package/lib/types/specialAbility/PactGift.js +2 -1
  70. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.d.ts +29 -0
  71. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.js +2 -1
  72. package/lib/types/specialAbility/Sermon.d.ts +29 -0
  73. package/lib/types/specialAbility/Sermon.js +2 -1
  74. package/lib/types/specialAbility/SexSpecialAbility.d.ts +29 -0
  75. package/lib/types/specialAbility/SexSpecialAbility.js +2 -1
  76. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.d.ts +29 -0
  77. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.js +2 -1
  78. package/lib/types/specialAbility/SkillStyleSpecialAbility.d.ts +29 -0
  79. package/lib/types/specialAbility/SkillStyleSpecialAbility.js +2 -1
  80. package/lib/types/specialAbility/VampiricGift.d.ts +29 -0
  81. package/lib/types/specialAbility/VampiricGift.js +2 -1
  82. package/lib/types/specialAbility/Vision.d.ts +29 -0
  83. package/lib/types/specialAbility/Vision.js +2 -1
  84. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.d.ts +1 -1493
  85. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.js +2 -34
  86. package/lib/types/traditionArtifacts/AttireEnchantment.d.ts +1 -1493
  87. package/lib/types/traditionArtifacts/AttireEnchantment.js +2 -34
  88. package/lib/types/traditionArtifacts/Beutelzauber.d.ts +1 -1493
  89. package/lib/types/traditionArtifacts/Beutelzauber.js +2 -34
  90. package/lib/types/traditionArtifacts/BowlEnchantment.d.ts +1 -1493
  91. package/lib/types/traditionArtifacts/BowlEnchantment.js +2 -34
  92. package/lib/types/traditionArtifacts/CauldronEnchantment.d.ts +1 -1493
  93. package/lib/types/traditionArtifacts/CauldronEnchantment.js +5 -36
  94. package/lib/types/traditionArtifacts/ChronicleEnchantment.d.ts +1 -1493
  95. package/lib/types/traditionArtifacts/ChronicleEnchantment.js +2 -34
  96. package/lib/types/traditionArtifacts/DaggerRitual.d.ts +1 -1499
  97. package/lib/types/traditionArtifacts/DaggerRitual.js +5 -34
  98. package/lib/types/traditionArtifacts/FoolsHatEnchantment.d.ts +1 -1493
  99. package/lib/types/traditionArtifacts/FoolsHatEnchantment.js +2 -34
  100. package/lib/types/traditionArtifacts/Haubenzauber.d.ts +1 -1493
  101. package/lib/types/traditionArtifacts/Haubenzauber.js +2 -34
  102. package/lib/types/traditionArtifacts/Hauerkettenzauber.d.ts +1 -464
  103. package/lib/types/traditionArtifacts/Hauerkettenzauber.js +2 -31
  104. package/lib/types/traditionArtifacts/InstrumentEnchantment.d.ts +1 -1493
  105. package/lib/types/traditionArtifacts/InstrumentEnchantment.js +2 -34
  106. package/lib/types/traditionArtifacts/Keulenzauber.d.ts +1 -464
  107. package/lib/types/traditionArtifacts/Keulenzauber.js +2 -31
  108. package/lib/types/traditionArtifacts/Krallenkettenzauber.d.ts +1 -1493
  109. package/lib/types/traditionArtifacts/Krallenkettenzauber.js +2 -34
  110. package/lib/types/traditionArtifacts/Kristallkugelzauber.d.ts +1 -1493
  111. package/lib/types/traditionArtifacts/Kristallkugelzauber.js +2 -34
  112. package/lib/types/traditionArtifacts/OrbEnchantment.d.ts +1 -1493
  113. package/lib/types/traditionArtifacts/OrbEnchantment.js +2 -34
  114. package/lib/types/traditionArtifacts/RingEnchantment.d.ts +1 -1493
  115. package/lib/types/traditionArtifacts/RingEnchantment.js +2 -34
  116. package/lib/types/traditionArtifacts/Schweinetrommelzauber.d.ts +1 -464
  117. package/lib/types/traditionArtifacts/Schweinetrommelzauber.js +2 -31
  118. package/lib/types/traditionArtifacts/SickleRitual.d.ts +1 -1493
  119. package/lib/types/traditionArtifacts/SickleRitual.js +2 -34
  120. package/lib/types/traditionArtifacts/SpellSwordEnchantment.d.ts +1 -1493
  121. package/lib/types/traditionArtifacts/SpellSwordEnchantment.js +2 -34
  122. package/lib/types/traditionArtifacts/StaffEnchantment.d.ts +1 -1493
  123. package/lib/types/traditionArtifacts/StaffEnchantment.js +2 -34
  124. package/lib/types/traditionArtifacts/ToyEnchantment.d.ts +1 -1493
  125. package/lib/types/traditionArtifacts/ToyEnchantment.js +2 -34
  126. package/lib/types/traditionArtifacts/Trinkhornzauber.d.ts +1 -1493
  127. package/lib/types/traditionArtifacts/Trinkhornzauber.js +2 -34
  128. package/lib/types/traditionArtifacts/WandEnchantment.d.ts +1 -1455
  129. package/lib/types/traditionArtifacts/WandEnchantment.js +3 -33
  130. package/lib/types/traditionArtifacts/WeaponEnchantment.d.ts +1 -1493
  131. package/lib/types/traditionArtifacts/WeaponEnchantment.js +2 -34
  132. package/lib/types/traditionArtifacts/_shared.d.ts +10 -0
  133. package/lib/types/traditionArtifacts/_shared.js +40 -3
  134. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,40 @@
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.79.0](https://github.com/Optolith/database-schema/compare/v0.78.0...v0.79.0) (2026-10-05)
6
+
7
+ ### ⚠ BREAKING CHANGES
8
+
9
+ * burning time option for generic items
10
+
11
+ ### Features
12
+
13
+ * base for select option rules ([5df53d3](https://github.com/Optolith/database-schema/commit/5df53d3448d5c279c9a062b8c68cc4e5ee9cbfdb))
14
+ * burning time option for generic items ([7feb7ff](https://github.com/Optolith/database-schema/commit/7feb7ffb449724433c7f7012369c837d5b8f6688))
15
+
16
+ ## [0.78.0](https://github.com/Optolith/database-schema/compare/v0.77.1...v0.78.0) (2026-10-05)
17
+
18
+ ### ⚠ BREAKING CHANGES
19
+
20
+ * generalize special ability option selection for professions
21
+ * languages option with optional scripts inclusion
22
+ * missing magical action category translations
23
+ * some plant translations
24
+ * translation for empty profession variants
25
+
26
+ ### Features
27
+
28
+ * generalize special ability option selection for professions ([ef7d2c9](https://github.com/Optolith/database-schema/commit/ef7d2c9903f987720f173815e5454fdfa06b3a84))
29
+ * languages option with optional scripts inclusion ([31862d3](https://github.com/Optolith/database-schema/commit/31862d38d0027dae845f8b69218395c4307bf59d))
30
+ * optional different race and culture names within prerequisites ([5025e80](https://github.com/Optolith/database-schema/commit/5025e80131e41ad68aca9e51881f5ee08c23dad1))
31
+ * prepare activatable options validation ([d0c7e87](https://github.com/Optolith/database-schema/commit/d0c7e87e3ae9aac67aa4259e63ce8c9c51e1fb3e))
32
+ * some plant translations ([8f3fa6b](https://github.com/Optolith/database-schema/commit/8f3fa6ba1b569b9bcd3b355d01fd86c9fe287478))
33
+
34
+ ### Bug Fixes
35
+
36
+ * missing magical action category translations ([510d11b](https://github.com/Optolith/database-schema/commit/510d11bd9e98d478ec3e4ab37627496b3c8deec9))
37
+ * translation for empty profession variants ([8f63b30](https://github.com/Optolith/database-schema/commit/8f63b30e14508ee0f900626bdefafed1b2657078))
38
+
5
39
  ## [0.77.1](https://github.com/Optolith/database-schema/compare/v0.77.0...v0.77.1) (2026-10-03)
6
40
 
7
41
  ### Features
package/gen/types.d.ts CHANGED
@@ -277,6 +277,7 @@ export type EnumMap = {
277
277
  CastingTime: CastingTime<unknown>
278
278
  CastingTimeDuringLovemakingUnit: CastingTimeDuringLovemakingUnit
279
279
  CheckResultArithmetic: CheckResultArithmetic
280
+ ChildEntityForSelectOption: ChildEntityForSelectOption
280
281
  CollectorsValue: CollectorsValue
281
282
  CombatAnimalPowerType: CombatAnimalPowerType
282
283
  CombatRelatedSpecialAbilityIdentifier: CombatRelatedSpecialAbilityIdentifier
@@ -413,6 +414,7 @@ export type EnumMap = {
413
414
  ProfessionPrerequisiteGroup: ProfessionPrerequisiteGroup
414
415
  ProfessionSpecialAbility: ProfessionSpecialAbility
415
416
  ProfessionSpecialAbilityIdentifier: ProfessionSpecialAbilityIdentifier
417
+ ProfessionSpecialAbilityOption: ProfessionSpecialAbilityOption
416
418
  PropertyDeclaration: PropertyDeclaration
417
419
  PublicationCategory: PublicationCategory
418
420
  PublicationPrerequisiteGroup: PublicationPrerequisiteGroup
@@ -437,6 +439,8 @@ export type EnumMap = {
437
439
  RulePrerequisiteGroup: RulePrerequisiteGroup
438
440
  SelectOptionCategory: SelectOptionCategory
439
441
  SelectOptionParentIdentifier: SelectOptionParentIdentifier
442
+ SelectOptionRuleMultiple: SelectOptionRuleMultiple
443
+ SelectOptionRuleValue: SelectOptionRuleValue
440
444
  SelectOptionsAdventurePointsValue: SelectOptionsAdventurePointsValue<unknown>
441
445
  SelectOptionsBindingCostValue: SelectOptionsBindingCostValue<unknown>
442
446
  SentenceType: SentenceType
@@ -570,6 +574,7 @@ export type TypeAliasMap = {
570
574
  Cause: Cause
571
575
  CheckResultBasedModifier: CheckResultBasedModifier
572
576
  ChildNode: ChildNode
577
+ ChildSelectOptionRuleValue: ChildSelectOptionRuleValue
573
578
  ChurchBlessedTradition: ChurchBlessedTradition
574
579
  CloseCombatTechniqueSpecialRules: CloseCombatTechniqueSpecialRules
575
580
  CombatAnimalPower: CombatAnimalPower
@@ -826,6 +831,7 @@ export type TypeAliasMap = {
826
831
  PlantPoison: PlantPoison
827
832
  PoisonRecipe: PoisonRecipe
828
833
  Preconditions: Preconditions
834
+ PredefinedOrTextInputSelectOptionRuleValue: PredefinedOrTextInputSelectOptionRuleValue
829
835
  PrerequisiteForLevel: PrerequisiteForLevel<unknown>
830
836
  PrerequisiteGroup: PrerequisiteGroup<unknown>
831
837
  PrerequisitesDisjunction: PrerequisitesDisjunction<unknown>
@@ -840,6 +846,7 @@ export type TypeAliasMap = {
840
846
  ProfessionPrerequisite: ProfessionPrerequisite
841
847
  ProfessionPrerequisites: ProfessionPrerequisites
842
848
  ProfessionSpecialAbilitySelection: ProfessionSpecialAbilitySelection
849
+ ProfessionSpecialAbilitySelectionItem: ProfessionSpecialAbilitySelectionItem
843
850
  ProfessionSpellworkIdentifier: ProfessionSpellworkIdentifier
844
851
  ProfessionVariantPackageOptions: ProfessionVariantPackageOptions
845
852
  ProfessionVariantPrerequisites: ProfessionVariantPrerequisites
@@ -892,6 +899,8 @@ export type TypeAliasMap = {
892
899
  RulePrerequisites: RulePrerequisites
893
900
  SecondaryArmor: SecondaryArmor
894
901
  SelectableAttributeAdjustment: SelectableAttributeAdjustment
902
+ SelectOptionRule: SelectOptionRule
903
+ SelectOptionRules: SelectOptionRules
895
904
  SelectOptions: SelectOptions
896
905
  SelectOptionsDeriveAdventurePointsValueFromImprovementCost: SelectOptionsDeriveAdventurePointsValueFromImprovementCost
897
906
  SelectOptionsFixedAdventurePointsValue: SelectOptionsFixedAdventurePointsValue<unknown>
@@ -958,6 +967,7 @@ export type TypeAliasMap = {
958
967
  TalismanMeleeWeapon: TalismanMeleeWeapon
959
968
  TalismanRangedWeapon: TalismanRangedWeapon
960
969
  TargetCategoriesSelectOptionCategory: TargetCategoriesSelectOptionCategory
970
+ TextInputSelectOptionRuleValue: TextInputSelectOptionRuleValue
961
971
  TextNode: TextNode
962
972
  TextPrerequisite: TextPrerequisite
963
973
  TinyActivatablePrerequisite: TinyActivatablePrerequisite
@@ -1153,6 +1163,11 @@ export interface SelectOptions {
1153
1163
  * 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.
1154
1164
  */
1155
1165
  derived?: SelectOptionCategory
1166
+
1167
+ /**
1168
+ * 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.
1169
+ */
1170
+ rules?: SelectOptionRules
1156
1171
  }
1157
1172
 
1158
1173
  export type SelectOptionCategory =
@@ -2026,6 +2041,9 @@ export interface Locale {
2026
2041
  "Animist Powers": string
2027
2042
  "Geode Rituals": string
2028
2043
  "Zibilja Rituals": string
2044
+ "Bannzeichen": string
2045
+ "Goblin Rituals": string
2046
+ "Magical Runes": string
2029
2047
  "Mod": string
2030
2048
  "Check Modifier": string
2031
2049
  "spells.traditions.general": string
@@ -2697,6 +2715,10 @@ export interface Locale {
2697
2715
  ".input {$count :number} {{check required every {$count}. application in the same month}}": string & { __params: { "count": number } }
2698
2716
  "see {$link}": string & { __params: { "link": string } }
2699
2717
  "CoD": string
2718
+ "Search Difficulty": string
2719
+ "Identification Difficulty": string
2720
+ "Plant Applications": string
2721
+ "Remedies and Traditions": string
2700
2722
  "Romance Novel": string
2701
2723
  "Poetry": string
2702
2724
  "Political Pamphlet": string
@@ -2789,6 +2811,8 @@ export interface Locale {
2789
2811
  "Variants": string
2790
2812
  "Languages and Literacy totaling {$apValue} AP": string & { __params: { "apValue": string } }
2791
2813
  "no Languages and Literacy totaling {$apValue} AP": string & { __params: { "apValue": string } }
2814
+ "Languages totaling {$apValue} AP": string & { __params: { "apValue": string } }
2815
+ "no Languages totaling {$apValue} AP": string & { __params: { "apValue": string } }
2792
2816
  "Skill Specialization {$possibleSkills}": string & { __params: { "possibleSkills": string } }
2793
2817
  "no Skill Specialization {$possibleSkills}": string & { __params: { "possibleSkills": string } }
2794
2818
  "Skill Specialization for a {$skillOfGroup}": string & { __params: { "skillOfGroup": string } }
@@ -2815,6 +2839,7 @@ export interface Locale {
2815
2839
  "except for {$list :list type=conjunction}": string & { __params: { "list": string[] } }
2816
2840
  "depends on selected tradition": string
2817
2841
  "Additional Prerequisites": string
2842
+ "no changes": string
2818
2843
  "Enhancements": string
2819
2844
  "SR {$value}": string & { __params: { "value": string } }
2820
2845
  ".input {$hiddenCount :number} {{Prerequisites}}": string & { __params: { "hiddenCount": number } }
@@ -4679,6 +4704,11 @@ export interface RaceTranslation {
4679
4704
  */
4680
4705
  name: string
4681
4706
 
4707
+ /**
4708
+ * The race’s name in prerequisites, if different from the normal race’s name.
4709
+ */
4710
+ nameInPrerequisites?: string
4711
+
4682
4712
  /**
4683
4713
  * 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.
4684
4714
  */
@@ -9761,10 +9791,15 @@ export type Culture_ID = string
9761
9791
 
9762
9792
  export interface CultureTranslation {
9763
9793
  /**
9764
- * The race’s name.
9794
+ * The culture’s name.
9765
9795
  */
9766
9796
  name: string
9767
9797
 
9798
+ /**
9799
+ * The culture’s name in prerequisites, if different from the normal culture’s name.
9800
+ */
9801
+ nameInPrerequisites?: string
9802
+
9768
9803
  /**
9769
9804
  * The description of the area knowledge.
9770
9805
  */
@@ -10161,6 +10196,11 @@ export interface SpecificSkillSpecializationOptions {
10161
10196
  * Buy languages and scripts for a specific amount of AP.
10162
10197
  */
10163
10198
  export interface LanguagesScriptsOptions {
10199
+ /**
10200
+ * If scripts are included in the selection.
10201
+ */
10202
+ includeScripts: boolean
10203
+
10164
10204
  /**
10165
10205
  * The AP value you can buy languages and scripts for.
10166
10206
  */
@@ -10517,7 +10557,7 @@ export interface ConstantProfessionSpecialAbility {
10517
10557
  /**
10518
10558
  * Received select options. Order is important. Typically, you only need the first array index, though.
10519
10559
  */
10520
- options?: RequirableSelectOptionIdentifier[]
10560
+ options?: ProfessionSpecialAbilityOption[]
10521
10561
  }
10522
10562
 
10523
10563
  export type ProfessionSpecialAbilityIdentifier =
@@ -15056,6 +15096,13 @@ export interface Hauerkettenzauber {
15056
15096
  */
15057
15097
  nameBuilderRules?: ActivatableNameBuilderRules
15058
15098
 
15099
+ /**
15100
+ * Definitions for possible options for the activatable entry, derived from entry categories.
15101
+ *
15102
+ * 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.
15103
+ */
15104
+ select_options?: SelectOptions
15105
+
15059
15106
  /**
15060
15107
  * The number stating how often you can buy the entry. The **default** depends on the entry type:
15061
15108
  *
@@ -15380,6 +15427,13 @@ export interface Keulenzauber {
15380
15427
  */
15381
15428
  nameBuilderRules?: ActivatableNameBuilderRules
15382
15429
 
15430
+ /**
15431
+ * Definitions for possible options for the activatable entry, derived from entry categories.
15432
+ *
15433
+ * 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.
15434
+ */
15435
+ select_options?: SelectOptions
15436
+
15383
15437
  /**
15384
15438
  * The number stating how often you can buy the entry. The **default** depends on the entry type:
15385
15439
  *
@@ -16794,6 +16848,13 @@ export interface Schweinetrommelzauber {
16794
16848
  */
16795
16849
  nameBuilderRules?: ActivatableNameBuilderRules
16796
16850
 
16851
+ /**
16852
+ * Definitions for possible options for the activatable entry, derived from entry categories.
16853
+ *
16854
+ * 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.
16855
+ */
16856
+ select_options?: SelectOptions
16857
+
16797
16858
  /**
16798
16859
  * The number stating how often you can buy the entry. The **default** depends on the entry type:
16799
16860
  *
@@ -18280,11 +18341,37 @@ export interface WeaponEnchantmentTranslation {
18280
18341
  errata?: Errata
18281
18342
  }
18282
18343
 
18344
+ export type ProfessionSpecialAbilityOption =
18345
+ | {
18346
+ kind: "Identifier"
18347
+ Identifier: RequirableSelectOptionIdentifier
18348
+ }
18349
+ | {
18350
+ kind: "Select"
18351
+ }
18352
+
18283
18353
  export interface ProfessionSpecialAbilitySelection {
18284
18354
  /**
18285
18355
  * The list of special abilities to choose from. Must contain at least two entries.
18286
18356
  */
18287
- options: ConstantProfessionSpecialAbility[]
18357
+ options: ProfessionSpecialAbilitySelectionItem[]
18358
+ }
18359
+
18360
+ export interface ProfessionSpecialAbilitySelectionItem {
18361
+ /**
18362
+ * The identifier of the special ability to grant.
18363
+ */
18364
+ id: ProfessionSpecialAbilityIdentifier
18365
+
18366
+ /**
18367
+ * The level of the received special ability. If not specified and the special ability has levels, level 1 is used automatically.
18368
+ */
18369
+ level?: number
18370
+
18371
+ /**
18372
+ * Received select options. Order is important. Typically, you only need the first array index, though.
18373
+ */
18374
+ options?: RequirableSelectOptionIdentifier[]
18288
18375
  }
18289
18376
 
18290
18377
  export interface CombatTechniqueRating {
@@ -22413,6 +22500,123 @@ export type AdvantageDisadvantagePrerequisiteGroup =
22413
22500
  PersonalityTrait: PersonalityTraitPrerequisite
22414
22501
  }
22415
22502
 
22503
+ /**
22504
+ * 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.
22505
+ */
22506
+ export type SelectOptionRules = SelectOptionRule[]
22507
+
22508
+ /**
22509
+ * A rule for how options can be selected and relate to each other.
22510
+ */
22511
+ export interface SelectOptionRule {
22512
+ /**
22513
+ * The value of the rule.
22514
+ */
22515
+ value: SelectOptionRuleValue
22516
+
22517
+ /**
22518
+ * Sometimes, multiple options from a single list have to or can be chosen.
22519
+ */
22520
+ multiple?: SelectOptionRuleMultiple
22521
+ }
22522
+
22523
+ /**
22524
+ * The possible values for select option rules.
22525
+ */
22526
+ export type SelectOptionRuleValue =
22527
+ | {
22528
+ kind: "Predefined"
22529
+ }
22530
+ | {
22531
+ kind: "PredefinedOrTextInput"
22532
+ PredefinedOrTextInput: PredefinedOrTextInputSelectOptionRuleValue
22533
+ }
22534
+ | {
22535
+ kind: "Child"
22536
+ Child: ChildSelectOptionRuleValue
22537
+ }
22538
+ | {
22539
+ kind: "TextInput"
22540
+ TextInput: TextInputSelectOptionRuleValue
22541
+ }
22542
+
22543
+ export interface PredefinedOrTextInputSelectOptionRuleValue {
22544
+ /**
22545
+ * All translations for the entry, identified by IETF language tag (BCP47).
22546
+ */
22547
+ translations: {
22548
+ [localeId: string]: PredefinedOrTextInputSelectOptionRuleValueTranslation
22549
+ }
22550
+ }
22551
+
22552
+ export interface PredefinedOrTextInputSelectOptionRuleValueTranslation {
22553
+ /**
22554
+ * The label for the text input field.
22555
+ */
22556
+ inputLabel: string
22557
+
22558
+ /**
22559
+ * The label for the extra option in the list of select options that unlocks the text input field.
22560
+ */
22561
+ optionLabel: string
22562
+ }
22563
+
22564
+ export interface ChildSelectOptionRuleValue {
22565
+ /**
22566
+ * The index of the parent select option in the list of selected options.
22567
+ */
22568
+ parentIndex: number
22569
+
22570
+ /**
22571
+ * The entity you can choose from.
22572
+ */
22573
+ entity: ChildEntityForSelectOption
22574
+ }
22575
+
22576
+ /**
22577
+ * The possible child entities for select options.
22578
+ */
22579
+ export type ChildEntityForSelectOption =
22580
+ | {
22581
+ kind: "SkillApplication"
22582
+ }
22583
+
22584
+ export interface TextInputSelectOptionRuleValue {
22585
+ /**
22586
+ * All translations for the entry, identified by IETF language tag (BCP47).
22587
+ */
22588
+ translations: {
22589
+ [localeId: string]: TextInputSelectOptionRuleValueTranslation
22590
+ }
22591
+ }
22592
+
22593
+ export interface TextInputSelectOptionRuleValueTranslation {
22594
+ /**
22595
+ * The label for the text input field.
22596
+ */
22597
+ inputLabel: string
22598
+ }
22599
+
22600
+ export type SelectOptionRuleMultiple =
22601
+ | {
22602
+ kind: "Constant"
22603
+ Constant: number
22604
+ }
22605
+ | {
22606
+ kind: "Range"
22607
+ Range: {
22608
+ /**
22609
+ * The minimum number of options that need to be selected. If left empty it defaults to 1.
22610
+ */
22611
+ min?: number
22612
+
22613
+ /**
22614
+ * The maximum number of options that need to be selected.
22615
+ */
22616
+ max: number
22617
+ }
22618
+ }
22619
+
22416
22620
  export interface AlternativeRule {
22417
22621
  /**
22418
22622
  * The player types this alternative rule is suitable for.
@@ -24301,6 +24505,11 @@ export interface DefaultEquipmentCategoryTypeRules {
24301
24505
  * Presence of complexity to certain groups for items in this category.
24302
24506
  */
24303
24507
  complexity: ValueRule
24508
+
24509
+ /**
24510
+ * Presence of burning time to certain groups for items in this category.
24511
+ */
24512
+ burningTime: ValueRule
24304
24513
  }
24305
24514
 
24306
24515
  /**
@@ -26285,6 +26494,11 @@ export interface Item {
26285
26494
  */
26286
26495
  structurePoints: StructurePoints
26287
26496
 
26497
+ /**
26498
+ * The burning time is the time how long the light source can be lit. After that time you have to use a new light source.
26499
+ */
26500
+ burningTime?: BurningTime
26501
+
26288
26502
  /**
26289
26503
  * A list of stat blocks for each close combat technique this weapon can be used with.
26290
26504
  */
@@ -1,5 +1,5 @@
1
1
  import { Case } from "tsondb/schema/gen";
2
- import type { ActivatableIdentifier, GeneralSelectOption, RequirableSelectOptionIdentifier, TradeSecretAdventurePointsValue } from "../../gen/types.js";
2
+ import type { ActivatableIdentifier as ActivatableIdentifierType, GeneralSelectOption, RequirableSelectOptionIdentifier, TradeSecretAdventurePointsValue } from "../../gen/types.js";
3
3
  import type { CacheBuilder } from "./internal.ts";
4
4
  import type { ResolvedNewSkillApplication, ResolvedSkillUse } from "./newApplicationsAndUses.ts";
5
5
  export type ResolvedSelectOptionIdentifier = RequirableSelectOptionIdentifier | Case<"Blessing" | "Cantrip" | "Script" | "Culture" | "SexPractice" | "HomunculusType" | "BlessedTradition" | "Disease" | "Poison" | "TargetCategory", string>;
@@ -12,7 +12,7 @@ export type ResolvedSelectOption = {
12
12
  newApplications: ResolvedNewSkillApplication[];
13
13
  uses: ResolvedSkillUse[];
14
14
  };
15
- export type ActivatableSelectOptionsCache = Record<ActivatableIdentifier["kind"], {
15
+ export type ActivatableSelectOptionsCache = Record<ActivatableIdentifierType["kind"], {
16
16
  [id: string]: ResolvedSelectOption[];
17
17
  }>;
18
18
  export declare const activatableSelectOptionsCacheBuilder: CacheBuilder<ActivatableSelectOptionsCache>;
@@ -4,6 +4,7 @@ import { mapObject } from "@elyukai/utils/object";
4
4
  import { compareNullish, compareNumber } from "@elyukai/utils/ordering";
5
5
  import { assertExhaustive } from "@elyukai/utils/typeSafety";
6
6
  import { Case, fromUniformCase } from "tsondb/schema/gen";
7
+ import { ActivatableIdentifier } from "../types/_IdentifierGroup.js";
7
8
  const wrapPlainApValue = (apValue) => apValue === undefined ? undefined : Case("Fixed", apValue);
8
9
  const matchesSpecificSkillishIdList = (config, matches) => {
9
10
  const isInList = config.list.some(matches);
@@ -758,64 +759,7 @@ const getSelectOptionsForResults = (database, entity, results) => results.reduce
758
759
  }
759
760
  return acc;
760
761
  }, {});
761
- const cacheKeyBase = {
762
- Advantage: null,
763
- Disadvantage: null,
764
- AdvancedCombatSpecialAbility: null,
765
- AdvancedKarmaSpecialAbility: null,
766
- AdvancedMagicalSpecialAbility: null,
767
- AdvancedSkillSpecialAbility: null,
768
- AncestorGlyph: null,
769
- ArcaneOrbEnchantment: null,
770
- AttireEnchantment: null,
771
- Beutelzauber: null,
772
- BlessedTradition: null,
773
- BowlEnchantment: null,
774
- BrawlingSpecialAbility: null,
775
- CauldronEnchantment: null,
776
- CeremonialItemSpecialAbility: null,
777
- ChronicleEnchantment: null,
778
- CombatSpecialAbility: null,
779
- CombatStyleSpecialAbility: null,
780
- CommandSpecialAbility: null,
781
- DaggerRitual: null,
782
- FamiliarSpecialAbility: null,
783
- FatePointSexSpecialAbility: null,
784
- FatePointSpecialAbility: null,
785
- FoolsHatEnchantment: null,
786
- GeneralSpecialAbility: null,
787
- Haubenzauber: null,
788
- Hauerkettenzauber: null,
789
- InstrumentEnchantment: null,
790
- KarmaSpecialAbility: null,
791
- Keulenzauber: null,
792
- Krallenkettenzauber: null,
793
- Kristallkugelzauber: null,
794
- LiturgicalStyleSpecialAbility: null,
795
- LycantropicGift: null,
796
- MagicalSign: null,
797
- MagicalSpecialAbility: null,
798
- MagicalTradition: null,
799
- MagicStyleSpecialAbility: null,
800
- OrbEnchantment: null,
801
- PactGift: null,
802
- ProtectiveWardingCircleSpecialAbility: null,
803
- RingEnchantment: null,
804
- Schweinetrommelzauber: null,
805
- Sermon: null,
806
- SexSpecialAbility: null,
807
- SickleRitual: null,
808
- SikaryanDrainSpecialAbility: null,
809
- SkillStyleSpecialAbility: null,
810
- SpellSwordEnchantment: null,
811
- StaffEnchantment: null,
812
- ToyEnchantment: null,
813
- Trinkhornzauber: null,
814
- VampiricGift: null,
815
- Vision: null,
816
- WandEnchantment: null,
817
- WeaponEnchantment: null,
818
- };
762
+ const cacheKeyBase = mapObject(ActivatableIdentifier.type.value.values, () => null);
819
763
  export const activatableSelectOptionsCacheBuilder = database => Object.fromEntries(Object.keys(cacheKeyBase).map((entity) => [
820
764
  entity,
821
765
  getSelectOptionsForResults(database, entity, database.getAllInstanceContainersOfEntity(entity)),
@@ -851,6 +851,35 @@ export declare const Advantage: DB.Entity<"Advantage", {
851
851
  }>, []>>>, true>;
852
852
  }>, []>>>;
853
853
  }, []>>, false>;
854
+ rules: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"SelectOptionRules", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"SelectOptionRule", DB.Object<{
855
+ value: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SelectOptionRuleValue", {
856
+ Predefined: DB.EnumCase<null>;
857
+ PredefinedOrTextInput: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"PredefinedOrTextInputSelectOptionRuleValue", DB.Object<{
858
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PredefinedOrTextInputSelectOptionRuleValueTranslation", {
859
+ inputLabel: DB.MemberDecl<DB.String, true>;
860
+ optionLabel: DB.MemberDecl<DB.String, true>;
861
+ }>, true>;
862
+ }>, []>>>;
863
+ Child: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ChildSelectOptionRuleValue", DB.Object<{
864
+ parentIndex: DB.MemberDecl<DB.Integer, true>;
865
+ entity: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ChildEntityForSelectOption", {
866
+ SkillApplication: DB.EnumCase<null>;
867
+ }, []>>, true>;
868
+ }>, []>>>;
869
+ TextInput: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"TextInputSelectOptionRuleValue", DB.Object<{
870
+ translations: DB.MemberDecl<DB.NestedEntityMap<"TextInputSelectOptionRuleValueTranslation", {
871
+ inputLabel: DB.MemberDecl<DB.String, true>;
872
+ }>, true>;
873
+ }>, []>>>;
874
+ }, []>>, true>;
875
+ multiple: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SelectOptionRuleMultiple", {
876
+ Constant: DB.EnumCase<DB.Integer>;
877
+ Range: DB.EnumCase<DB.Object<{
878
+ min: DB.MemberDecl<DB.Integer, false>;
879
+ max: DB.MemberDecl<DB.Integer, true>;
880
+ }>>;
881
+ }, []>>, false>;
882
+ }>, []>>>, []>>, false>;
854
883
  }>, []>>, false>;
855
884
  explicit_select_options: DB.MemberDecl<DB.ChildEntities<DB.Entity<"GeneralSelectOption", {
856
885
  parent: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SelectOptionParentIdentifier", {
@@ -4,7 +4,7 @@ import { ap_value, ap_value_append, ap_value_l10n } from "./_ActivatableAdventur
4
4
  import { automatic_entries } from "./_ActivatableAutomatic.js";
5
5
  import { subtype } from "./_ActivatableMagical.js";
6
6
  import { activatableDisplayNameCustomizer, nameBuilderRules } from "./_ActivatableNames.js";
7
- import { explicit_select_options, select_options } from "./_ActivatableSelectOptions.js";
7
+ import { explicit_select_options, select_options, verifySelectOptionRules, } from "./_ActivatableSelectOptions.js";
8
8
  import { skill_applications, skill_uses } from "./_ActivatableSkillApplicationsAndUses.js";
9
9
  import { AdvantageDisadvantagePrerequisites } from "./_Prerequisite.js";
10
10
  import { NestedTranslationMap } from "./Locale.js";
@@ -58,4 +58,5 @@ export const Advantage = DB.Entity(import.meta.url, {
58
58
  keyPathInEntityMapFallback: "name",
59
59
  },
60
60
  ],
61
+ customConstraints: deps => verifySelectOptionRules("Advantage", deps),
61
62
  });
@@ -242,6 +242,7 @@ export declare const Culture: DB.Entity<"Culture", {
242
242
  }>, []>>>, []>>, true>;
243
243
  translations: DB.MemberDecl<DB.NestedEntityMap<"CultureTranslation", {
244
244
  name: DB.MemberDecl<DB.String, true>;
245
+ nameInPrerequisites: DB.MemberDecl<DB.String, false>;
245
246
  area_knowledge: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"AreaKnowledgeTranslation", DB.Object<{
246
247
  description: DB.MemberDecl<DB.String, true>;
247
248
  abbreviated: DB.MemberDecl<DB.String, true>;
@@ -60,7 +60,11 @@ export const Culture = DB.Entity(import.meta.url, {
60
60
  src,
61
61
  translations: NestedTranslationMap(DB.Required, "Culture", DB.Object({
62
62
  name: DB.Required({
63
- comment: "The race’s name.",
63
+ comment: "The culture’s name.",
64
+ type: DB.String({ minLength: 1 }),
65
+ }),
66
+ nameInPrerequisites: DB.Optional({
67
+ comment: "The culture’s name in prerequisites, if different from the normal culture’s name.",
64
68
  type: DB.String({ minLength: 1 }),
65
69
  }),
66
70
  area_knowledge: DB.Required({
@@ -851,6 +851,35 @@ export declare const Disadvantage: DB.Entity<"Disadvantage", {
851
851
  }>, []>>>, true>;
852
852
  }>, []>>>;
853
853
  }, []>>, false>;
854
+ rules: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"SelectOptionRules", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"SelectOptionRule", DB.Object<{
855
+ value: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SelectOptionRuleValue", {
856
+ Predefined: DB.EnumCase<null>;
857
+ PredefinedOrTextInput: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"PredefinedOrTextInputSelectOptionRuleValue", DB.Object<{
858
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PredefinedOrTextInputSelectOptionRuleValueTranslation", {
859
+ inputLabel: DB.MemberDecl<DB.String, true>;
860
+ optionLabel: DB.MemberDecl<DB.String, true>;
861
+ }>, true>;
862
+ }>, []>>>;
863
+ Child: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ChildSelectOptionRuleValue", DB.Object<{
864
+ parentIndex: DB.MemberDecl<DB.Integer, true>;
865
+ entity: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ChildEntityForSelectOption", {
866
+ SkillApplication: DB.EnumCase<null>;
867
+ }, []>>, true>;
868
+ }>, []>>>;
869
+ TextInput: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"TextInputSelectOptionRuleValue", DB.Object<{
870
+ translations: DB.MemberDecl<DB.NestedEntityMap<"TextInputSelectOptionRuleValueTranslation", {
871
+ inputLabel: DB.MemberDecl<DB.String, true>;
872
+ }>, true>;
873
+ }>, []>>>;
874
+ }, []>>, true>;
875
+ multiple: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SelectOptionRuleMultiple", {
876
+ Constant: DB.EnumCase<DB.Integer>;
877
+ Range: DB.EnumCase<DB.Object<{
878
+ min: DB.MemberDecl<DB.Integer, false>;
879
+ max: DB.MemberDecl<DB.Integer, true>;
880
+ }>>;
881
+ }, []>>, false>;
882
+ }>, []>>>, []>>, false>;
854
883
  }>, []>>, false>;
855
884
  explicit_select_options: DB.MemberDecl<DB.ChildEntities<DB.Entity<"GeneralSelectOption", {
856
885
  parent: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SelectOptionParentIdentifier", {
@@ -3,7 +3,7 @@ import { input, levels, maximum, name, name_in_library, rules } from "./_Activat
3
3
  import { ap_value, ap_value_append, ap_value_l10n } from "./_ActivatableAdventurePointsValue.js";
4
4
  import { subtype } from "./_ActivatableMagical.js";
5
5
  import { activatableDisplayNameCustomizer, nameBuilderRules } from "./_ActivatableNames.js";
6
- import { explicit_select_options, select_options } from "./_ActivatableSelectOptions.js";
6
+ import { explicit_select_options, select_options, verifySelectOptionRules, } from "./_ActivatableSelectOptions.js";
7
7
  import { skill_applications, skill_uses } from "./_ActivatableSkillApplicationsAndUses.js";
8
8
  import { AdvantageDisadvantagePrerequisites } from "./_Prerequisite.js";
9
9
  import { NestedTranslationMap } from "./Locale.js";
@@ -59,4 +59,5 @@ export const Disadvantage = DB.Entity(import.meta.url, {
59
59
  keyPathInEntityMapFallback: "name",
60
60
  },
61
61
  ],
62
+ customConstraints: deps => verifySelectOptionRules("Disadvantage", deps),
62
63
  });