@optolith/database-schema 0.112.0 → 0.114.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,33 @@
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.114.0](https://github.com/Optolith/database-schema/compare/v0.113.1...v0.114.0) (2026-10-30)
6
+
7
+ ### ⚠ BREAKING CHANGES
8
+
9
+ * more data-driven logic from client
10
+
11
+ ### Features
12
+
13
+ * more data-driven logic from client ([2126a3c](https://github.com/Optolith/database-schema/commit/2126a3c70cc826a96ff427aef0c12e8cc38239ea))
14
+
15
+ ## [0.113.1](https://github.com/Optolith/database-schema/compare/v0.113.0...v0.113.1) (2026-10-26)
16
+
17
+ ### Bug Fixes
18
+
19
+ * **cache:** missing sources for derived select options ([68347f2](https://github.com/Optolith/database-schema/commit/68347f21f6adfc62b4c755b4bc1ad5b8db0a543e))
20
+
21
+ ## [0.113.0](https://github.com/Optolith/database-schema/compare/v0.112.0...v0.113.0) (2026-10-26)
22
+
23
+ ### ⚠ BREAKING CHANGES
24
+
25
+ * pin enhancement focus rules in settings
26
+
27
+ ### Features
28
+
29
+ * **cache:** include parent source refs in new applications and uses ([26a0c1a](https://github.com/Optolith/database-schema/commit/26a0c1a959dd7c5ced909cee03a13be67174cc5b))
30
+ * pin enhancement focus rules in settings ([711a7d5](https://github.com/Optolith/database-schema/commit/711a7d5ac1f008e0d684cb4a8e94c7c9209eae8a))
31
+
5
32
  ## [0.112.0](https://github.com/Optolith/database-schema/compare/v0.111.1...v0.112.0) (2026-10-24)
6
33
 
7
34
  ### ⚠ BREAKING CHANGES
package/gen/types.d.ts CHANGED
@@ -324,6 +324,7 @@ export type EnumMap = {
324
324
  DerivedCharacteristicModifierPrerequisiteGroup: DerivedCharacteristicModifierPrerequisiteGroup
325
325
  DerivedCharacteristicPrerequisiteGroup: DerivedCharacteristicPrerequisiteGroup
326
326
  DerivedCharacteristicPrimaryAttributeValue: DerivedCharacteristicPrimaryAttributeValue
327
+ DerivedCharacteristicPurchaseMaximumValue: DerivedCharacteristicPurchaseMaximumValue
327
328
  DerivedCharacteristicSkillCheckPenalty: DerivedCharacteristicSkillCheckPenalty
328
329
  DerivedCharacteristicType: DerivedCharacteristicType
329
330
  DerivedPropertySpecializations: DerivedPropertySpecializations
@@ -622,6 +623,7 @@ export type TypeAliasMap = {
622
623
  CombatAnimalPower: CombatAnimalPower
623
624
  CombatTechniqueAdjustment: CombatTechniqueAdjustment
624
625
  CombatTechniqueRating: CombatTechniqueRating
626
+ CombatTechniqueSettings: CombatTechniqueSettings
625
627
  CombatTechniquesForAdventurePointsOption: CombatTechniquesForAdventurePointsOption
626
628
  CombatTechniquesOptions: CombatTechniquesOptions
627
629
  CombatTechniquesSelectOptionCategory: CombatTechniquesSelectOptionCategory
@@ -801,6 +803,7 @@ export type TypeAliasMap = {
801
803
  LevelTypeConfigTranslation: LevelTypeConfigTranslation
802
804
  LimitedBurningTime: LimitedBurningTime
803
805
  LiturgicalChantRating: LiturgicalChantRating
806
+ LiturgicalChantSettings: LiturgicalChantSettings
804
807
  LiturgiesOptions: LiturgiesOptions
805
808
  LiturgyPrerequisites: LiturgyPrerequisites
806
809
  LiturgyTraditionWithAspects: LiturgyTraditionWithAspects
@@ -983,6 +986,7 @@ export type TypeAliasMap = {
983
986
  SkillCheck: SkillCheck
984
987
  SkillRating: SkillRating
985
988
  SkillSelectOptionCategoryCategory: SkillSelectOptionCategoryCategory
989
+ SkillSettings: SkillSettings
986
990
  SkillsOptions: SkillsOptions
987
991
  SkillsSelectOptionCategory: SkillsSelectOptionCategory
988
992
  SlowCastingTime: SlowCastingTime
@@ -1008,6 +1012,7 @@ export type TypeAliasMap = {
1008
1012
  SpellworkAdjustmentWithBase: SpellworkAdjustmentWithBase
1009
1013
  SpellworkChange: SpellworkChange
1010
1014
  SpellworkPrerequisites: SpellworkPrerequisites
1015
+ SpellworkSettings: SpellworkSettings
1011
1016
  SpellworksForChosenProperty: SpellworksForChosenProperty
1012
1017
  SpellworksOptions: SpellworksOptions
1013
1018
  StandaloneCostMap: StandaloneCostMap
@@ -1526,6 +1531,7 @@ export interface Locale {
1526
1531
  "Sort By": string
1527
1532
  "Name": string
1528
1533
  "Date Modified": string
1534
+ "Date Created": string
1529
1535
  "Group": string
1530
1536
  "Property": string
1531
1537
  "general.filters.sort.bylocation": string
@@ -1976,6 +1982,8 @@ export interface Locale {
1976
1982
  "Lost Total": string
1977
1983
  "Bought Back": string
1978
1984
  "Buy Back Permanently Lost Point": string
1985
+ "Permanently Lost {$energy}": string & { __params: { "energy": string } }
1986
+ "p{$energy}": string & { __params: { "energy": string } }
1979
1987
  "Permanently Lost Life Points": string
1980
1988
  "pLP": string
1981
1989
  "Permanently Lost Arcane Energy": string
@@ -1991,7 +1999,9 @@ export interface Locale {
1991
1999
  "Custom AP Cost": string
1992
2000
  "AP Cost for {$category}": string & { __params: { "category": string } }
1993
2001
  "Custom option": string
2002
+ "Show entries with unmet prerequisites": string
1994
2003
  "specialabilities.nativetonguelevel": string
2004
+ "Adoruzepterzauber": string
1995
2005
  "Advanced Combat Special Abilities": string
1996
2006
  "Advanced Karma Special Abilities": string
1997
2007
  "Advanced Magical Special Abilities": string
@@ -1999,6 +2009,7 @@ export interface Locale {
1999
2009
  "Ancestor Glyphs": string
2000
2010
  "Arcane Orb Enchantments": string
2001
2011
  "Attire Enchantments": string
2012
+ "Beutelzauber": string
2002
2013
  "Blessed Traditions": string
2003
2014
  "Bowl Enchantments": string
2004
2015
  "Brawling Special Abilities": string
@@ -2014,9 +2025,13 @@ export interface Locale {
2014
2025
  "Fate Point Special Abilities": string
2015
2026
  "Fools Hat Enchantments": string
2016
2027
  "General Special Abilities": string
2028
+ "Haubenzauber": string
2029
+ "Hauerkettenzauber": string
2017
2030
  "Instrument Enchantments": string
2018
2031
  "Karma Special Abilities": string
2032
+ "Keulenzauber": string
2019
2033
  "Krallenkettenzauber": string
2034
+ "Kristallkugelzauber": string
2020
2035
  "Liturgical Style Special Abilities": string
2021
2036
  "Lycantropic Gifts": string
2022
2037
  "Magical Signs": string
@@ -2027,6 +2042,7 @@ export interface Locale {
2027
2042
  "Pact Gifts": string
2028
2043
  "Protective/Warding Circle Special Abilities": string
2029
2044
  "Ring Enchantments": string
2045
+ "Schweinetrommelzauber": string
2030
2046
  "Sermons": string
2031
2047
  "Sex Special Abilities": string
2032
2048
  "Sickle Rituals": string
@@ -4952,7 +4968,51 @@ export interface DerivedCharacteristicPurchase {
4952
4968
  /**
4953
4969
  * The maximum value that can be achieved for the derived characteristic through improvements.
4954
4970
  */
4955
- maximum: DerivedCharacteristicBase
4971
+ maximum: DerivedCharacteristicPurchaseMaximumValue
4972
+ }
4973
+
4974
+ export type DerivedCharacteristicPurchaseMaximumValue =
4975
+ | {
4976
+ kind: "Attribute"
4977
+ Attribute: Attribute_ID
4978
+ }
4979
+ | {
4980
+ kind: "PrimaryAttribute"
4981
+ PrimaryAttribute: DerivedCharacteristicPrimaryAttributeValue
4982
+ }
4983
+
4984
+ export type DerivedCharacteristicPrimaryAttributeValue =
4985
+ | {
4986
+ kind: "Magical"
4987
+ }
4988
+ | {
4989
+ kind: "Blessed"
4990
+ }
4991
+
4992
+ export interface DerivedCharacteristicPermanentLoss {
4993
+ /**
4994
+ * If set, permanent losses to the derived characteristic can be bought back for the specified cost.
4995
+ */
4996
+ canBeBoughtBack?: DerivedCharacteristicBuyBack
4997
+ }
4998
+
4999
+ export interface DerivedCharacteristicBuyBack {
5000
+ /**
5001
+ * The AP cost for buying back one point.
5002
+ */
5003
+ cost: number
5004
+ }
5005
+
5006
+ export interface DerivedCharacteristicCalculation {
5007
+ /**
5008
+ * The base value for the calculation.
5009
+ */
5010
+ base: DerivedCharacteristicBase
5011
+
5012
+ /**
5013
+ * A list of modifiers that are applied to the base value. The modifiers are applied in the order they appear in the list.
5014
+ */
5015
+ modifiers?: DerivedCharacteristicModifier[]
4956
5016
  }
4957
5017
 
4958
5018
  export type DerivedCharacteristicBase = MathOperation<DerivedCharacteristicBaseValue>
@@ -5000,40 +5060,6 @@ export type DerivedCharacteristicBaseValue =
5000
5060
  PrimaryAttribute: DerivedCharacteristicPrimaryAttributeValue
5001
5061
  }
5002
5062
 
5003
- export type DerivedCharacteristicPrimaryAttributeValue =
5004
- | {
5005
- kind: "Magical"
5006
- }
5007
- | {
5008
- kind: "Blessed"
5009
- }
5010
-
5011
- export interface DerivedCharacteristicPermanentLoss {
5012
- /**
5013
- * If set, permanent losses to the derived characteristic can be bought back for the specified cost.
5014
- */
5015
- canBeBoughtBack?: DerivedCharacteristicBuyBack
5016
- }
5017
-
5018
- export interface DerivedCharacteristicBuyBack {
5019
- /**
5020
- * The AP cost for buying back one point.
5021
- */
5022
- cost: number
5023
- }
5024
-
5025
- export interface DerivedCharacteristicCalculation {
5026
- /**
5027
- * The base value for the calculation.
5028
- */
5029
- base: DerivedCharacteristicBase
5030
-
5031
- /**
5032
- * A list of modifiers that are applied to the base value. The modifiers are applied in the order they appear in the list.
5033
- */
5034
- modifiers?: DerivedCharacteristicModifier[]
5035
- }
5036
-
5037
5063
  export interface DerivedCharacteristicModifier {
5038
5064
  /**
5039
5065
  * The entry that, when active, causes the modifier.
@@ -29265,15 +29291,13 @@ export interface Settings {
29265
29291
  */
29266
29292
  extendedBookDescriptionPublication: Publication_ID
29267
29293
 
29268
- /**
29269
- * The entry that grants a bonus of 1 towards the maximum skill rating per selection.
29270
- */
29271
- maximumSkillRatingBonusEntry: ActivatableIdentifier
29294
+ skills: SkillSettings
29272
29295
 
29273
- /**
29274
- * The entry that grants a bonus of 1 towards the maximum skill rating per selection.
29275
- */
29276
- maximumCombatTechniqueRatingBonusEntry: ActivatableIdentifier
29296
+ combatTechniques: CombatTechniqueSettings
29297
+
29298
+ spellworks: SpellworkSettings
29299
+
29300
+ liturgicalChants: LiturgicalChantSettings
29277
29301
  }
29278
29302
 
29279
29303
  /**
@@ -29341,6 +29365,59 @@ export interface StyleSpecialAbilitySettings {
29341
29365
  liturgical: FocusRule_ID
29342
29366
  }
29343
29367
 
29368
+ export interface SkillSettings {
29369
+ /**
29370
+ * The entry that grants a bonus of 1 towards the maximum skill rating per selection.
29371
+ */
29372
+ maximumSkillRatingBonusEntry: ActivatableIdentifier
29373
+ }
29374
+
29375
+ export interface CombatTechniqueSettings {
29376
+ /**
29377
+ * The entry that grants a bonus of 1 towards the maximum skill rating per selection.
29378
+ */
29379
+ maximumCombatTechniqueRatingBonusEntry: ActivatableIdentifier
29380
+
29381
+ /**
29382
+ * The attribute that increases the attack value of a close combat technique.
29383
+ */
29384
+ closeCombatTechniqueAttackAttribute: Attribute_ID
29385
+ }
29386
+
29387
+ export interface SpellworkSettings {
29388
+ /**
29389
+ * The entry that removes the maximum rating of 14 from spellworks for selected properties. It must provide the property as a selected option.
29390
+ */
29391
+ maximumRatingUnlockEntry: ActivatableIdentifier
29392
+
29393
+ /**
29394
+ * Spell Enhancements are part of focus rules. This type defines which focus rule must be enabled in order to use an enhancement. Essentially, this is a default prerequisite they must meet, but manually inserting them with every enhancement is a lot of work and error-prone. Therefore, in order to use an enhancement, prerequisites for the focus rule must be generated for every entry.
29395
+ */
29396
+ enhancementsFocusRule: FocusRule_ID
29397
+ }
29398
+
29399
+ export interface LiturgicalChantSettings {
29400
+ /**
29401
+ * The general aspect for church traditions.
29402
+ */
29403
+ generalAspectForChurch: Aspect_ID
29404
+
29405
+ /**
29406
+ * The general aspect for shamanistic traditions.
29407
+ */
29408
+ generalAspectForShamanistic: Aspect_ID
29409
+
29410
+ /**
29411
+ * The entry that removes the maximum rating of 14 from liturgical chants for selected aspects. It must provide the aspect as a selected option.
29412
+ */
29413
+ maximumRatingUnlockEntry: ActivatableIdentifier
29414
+
29415
+ /**
29416
+ * Liturgical Chant Enhancements are part of focus rules. This type defines which focus rule must be enabled in order to use an enhancement. Essentially, this is a default prerequisite they must meet, but manually inserting them with every enhancement is a lot of work and error-prone. Therefore, in order to use an enhancement, prerequisites for the focus rule must be generated for every entry.
29417
+ */
29418
+ enhancementsFocusRule: FocusRule_ID
29419
+ }
29420
+
29344
29421
  export interface SexPractice {
29345
29422
  /**
29346
29423
  * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
@@ -2,7 +2,7 @@ import { Case } from "tsondb/schema/gen";
2
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
- export type ResolvedSelectOptionIdentifier = RequirableSelectOptionIdentifier | Case<"Blessing" | "Cantrip" | "Script" | "Culture" | "SexPractice" | "HomunculusType" | "BlessedTradition" | "Disease" | "Poison" | "TargetCategory" | "Advantage", string>;
5
+ export type ResolvedSelectOptionIdentifier = RequirableSelectOptionIdentifier | Case<"Blessing" | "Cantrip" | "Script" | "Culture" | "SexPractice" | "HomunculusType" | "BlessedTradition" | "Disease" | "Poison" | "TargetCategory" | "Patron" | "Advantage", string>;
6
6
  export type ResolvedSelectOption = {
7
7
  id: ResolvedSelectOptionIdentifier;
8
8
  content: Omit<GeneralSelectOption, "ap_value"> & {
@@ -102,11 +102,12 @@ const getApValueForSkillish = (config, id, ic) => {
102
102
  return assertExhaustive(config);
103
103
  }
104
104
  };
105
- const convertSkillApplicationOrUse = (entryId, id, applicationOrUse) => ({
105
+ const convertSkillApplicationOrUse = (entryId, id, applicationOrUse, src) => ({
106
106
  id: `${fromUniformCase(entryId)}+${applicationOrUse.id.toFixed()}`,
107
107
  content: {
108
108
  parent: entryId,
109
109
  skills: [id],
110
+ src,
110
111
  translations: applicationOrUse.translations,
111
112
  },
112
113
  });
@@ -131,7 +132,7 @@ const getSpellworkFilter = (category) => {
131
132
  }
132
133
  });
133
134
  };
134
- const getDerivedSkillishSelectOptions = (database, entryId, entity, category, options, filter) => {
135
+ const getDerivedSkillishSelectOptions = (database, entryId, entity, category, options, filter, parentSrc) => {
135
136
  const { prerequisites } = category;
136
137
  const { bindingCost, ap_value } = options;
137
138
  const instances = database.getAllInstanceContainersOfEntity(entity);
@@ -150,13 +151,12 @@ const getDerivedSkillishSelectOptions = (database, entryId, entity, category, op
150
151
  name: t10n.name,
151
152
  })),
152
153
  },
153
- newApplications: category.skill_applications?.map(app => convertSkillApplicationOrUse(entryId, id, app)) ??
154
- [],
155
- uses: category.skill_uses?.map(use => convertSkillApplicationOrUse(entryId, id, use)) ?? [],
154
+ newApplications: category.skill_applications?.map(app => convertSkillApplicationOrUse(entryId, id, app, parentSrc)) ?? [],
155
+ uses: category.skill_uses?.map(use => convertSkillApplicationOrUse(entryId, id, use, parentSrc)) ?? [],
156
156
  };
157
157
  });
158
158
  };
159
- const getDerivedSelectOptions = (selectOptionCategory, entryId, database) => {
159
+ const getDerivedSelectOptions = (selectOptionCategory, entryId, database, parentSrc) => {
160
160
  switch (selectOptionCategory.kind) {
161
161
  case "Blessings":
162
162
  return database
@@ -685,15 +685,15 @@ const getDerivedSelectOptions = (selectOptionCategory, entryId, database) => {
685
685
  const matchesIdRequirement = category.Skills.specific === undefined ||
686
686
  matchesSpecificSkillishIdList(category.Skills.specific, required => required === id);
687
687
  return matchesGroupRequirement && matchesIdRequirement;
688
- });
688
+ }, parentSrc);
689
689
  case "Spells":
690
- return getDerivedSkillishSelectOptions(database, entryId, "Spell", category.Spells, selectOptionCategory.Skills, getSpellworkFilter(category.Spells));
690
+ return getDerivedSkillishSelectOptions(database, entryId, "Spell", category.Spells, selectOptionCategory.Skills, getSpellworkFilter(category.Spells), parentSrc);
691
691
  case "Rituals":
692
- return getDerivedSkillishSelectOptions(database, entryId, "Ritual", category.Rituals, selectOptionCategory.Skills, getSpellworkFilter(category.Rituals));
692
+ return getDerivedSkillishSelectOptions(database, entryId, "Ritual", category.Rituals, selectOptionCategory.Skills, getSpellworkFilter(category.Rituals), parentSrc);
693
693
  case "LiturgicalChants":
694
- return getDerivedSkillishSelectOptions(database, entryId, "LiturgicalChant", category.LiturgicalChants, selectOptionCategory.Skills, getDefaultSkillishFilter(category.LiturgicalChants));
694
+ return getDerivedSkillishSelectOptions(database, entryId, "LiturgicalChant", category.LiturgicalChants, selectOptionCategory.Skills, getDefaultSkillishFilter(category.LiturgicalChants), parentSrc);
695
695
  case "Ceremonies":
696
- return getDerivedSkillishSelectOptions(database, entryId, "Ceremony", category.Ceremonies, selectOptionCategory.Skills, getDefaultSkillishFilter(category.Ceremonies));
696
+ return getDerivedSkillishSelectOptions(database, entryId, "Ceremony", category.Ceremonies, selectOptionCategory.Skills, getDefaultSkillishFilter(category.Ceremonies), parentSrc);
697
697
  default:
698
698
  return assertExhaustive(category);
699
699
  }
@@ -702,9 +702,9 @@ const getDerivedSelectOptions = (selectOptionCategory, entryId, database) => {
702
702
  return selectOptionCategory.CombatTechniques.categories.flatMap(category => {
703
703
  switch (category.kind) {
704
704
  case "CloseCombatTechniques":
705
- return getDerivedSkillishSelectOptions(database, entryId, "CloseCombatTechnique", category.CloseCombatTechniques, selectOptionCategory.CombatTechniques, getDefaultSkillishFilter(category.CloseCombatTechniques));
705
+ return getDerivedSkillishSelectOptions(database, entryId, "CloseCombatTechnique", category.CloseCombatTechniques, selectOptionCategory.CombatTechniques, getDefaultSkillishFilter(category.CloseCombatTechniques), parentSrc);
706
706
  case "RangedCombatTechniques":
707
- return getDerivedSkillishSelectOptions(database, entryId, "RangedCombatTechnique", category.RangedCombatTechniques, selectOptionCategory.CombatTechniques, getDefaultSkillishFilter(category.RangedCombatTechniques));
707
+ return getDerivedSkillishSelectOptions(database, entryId, "RangedCombatTechnique", category.RangedCombatTechniques, selectOptionCategory.CombatTechniques, getDefaultSkillishFilter(category.RangedCombatTechniques), parentSrc);
708
708
  default:
709
709
  return assertExhaustive(category);
710
710
  }
@@ -787,14 +787,14 @@ const getExplicitSelectOptions = (id, database) => database
787
787
  newApplications: [], // database.getAllChildInstanceContainersForParent("NewSkillApplication", Case("GeneralSelectOption", id)), // prevent duplicates as these can already be queried from the database
788
788
  uses: [], // database.getAllChildInstanceContainersForParent("SkillUse", Case("GeneralSelectOption", id)), // prevent duplicates as these can already be queried from the database
789
789
  }));
790
- const getSelectOptions = (selectOptions, id, database) => [
790
+ const getSelectOptions = (selectOptions, id, database, parentSrc) => [
791
791
  ...(selectOptions.derived === undefined
792
792
  ? []
793
- : getDerivedSelectOptions(selectOptions.derived, id, database)),
793
+ : getDerivedSelectOptions(selectOptions.derived, id, database, parentSrc)),
794
794
  ...getExplicitSelectOptions(id, database),
795
795
  ];
796
796
  const getSelectOptionsForResults = (database, entity, results) => results.reduce((acc, { id, content }) => {
797
- const options = getSelectOptions(content.select_options ?? {}, Case(entity, id), database);
797
+ const options = getSelectOptions(content.select_options ?? {}, Case(entity, id), database, content.src);
798
798
  if (options.length > 0) {
799
799
  acc[id] = options;
800
800
  }
@@ -1,16 +1,18 @@
1
- import type { ActivatableIdentifier, NewSkillApplication, NewSkillApplicationOrUseParentIdentifier, Skill_ID, SkillUse } from "../../gen/types.js";
1
+ import type { ActivatableIdentifier, NewSkillApplication, NewSkillApplicationOrUseParentIdentifier, PublicationRefs, Skill_ID, SkillUse } from "../../gen/types.js";
2
2
  import type { ActivatableSelectOptionsCache } from "./activatableSelectOptions.ts";
3
3
  import type { CacheBuilder } from "./internal.ts";
4
4
  export type ResolvedNewSkillApplication = {
5
5
  id: string;
6
6
  content: Omit<NewSkillApplication, "parent"> & {
7
7
  parent: NewSkillApplicationOrUseParentIdentifier | ActivatableIdentifier;
8
+ src: PublicationRefs | undefined;
8
9
  };
9
10
  };
10
11
  export type ResolvedSkillUse = {
11
12
  id: string;
12
13
  content: Omit<SkillUse, "parent"> & {
13
14
  parent: NewSkillApplicationOrUseParentIdentifier | ActivatableIdentifier;
15
+ src: PublicationRefs | undefined;
14
16
  };
15
17
  };
16
18
  export type NewApplicationsAndUsesCache = {
@@ -1,15 +1,23 @@
1
- const groupByAffectedSkill = (entries, prev = {}) => entries.reduce((acc, entry) => entry.content.skills.reduce((acc1, skillId) => {
1
+ const groupByAffectedSkill = (database, entries, prev = {}) => entries
2
+ .map(entry => ({
3
+ ...entry,
4
+ content: {
5
+ ...entry.content,
6
+ src: database.getInstanceOfEntityById(entry.content.parent)?.src,
7
+ },
8
+ }))
9
+ .reduce((acc, entry) => entry.content.skills.reduce((acc1, skillId) => {
2
10
  acc1[skillId] = [...(acc1[skillId] ?? []), entry];
3
11
  return acc1;
4
12
  }, acc), prev);
5
- const addGeneratedEntries = (generatedSelectOptions, prev) => Object.values(generatedSelectOptions).reduce((acc, byInstance) => Object.values(byInstance).reduce((acc1, resolvedSelectOptions) => resolvedSelectOptions.reduce((acc2, selectOption) => ({
6
- newApplications: groupByAffectedSkill(selectOption.newApplications, acc2.newApplications),
7
- uses: groupByAffectedSkill(selectOption.uses, acc2.uses),
13
+ const addGeneratedEntries = (database, generatedSelectOptions, prev) => Object.values(generatedSelectOptions).reduce((acc, byInstance) => Object.values(byInstance).reduce((acc1, resolvedSelectOptions) => resolvedSelectOptions.reduce((acc2, selectOption) => ({
14
+ newApplications: groupByAffectedSkill(database, selectOption.newApplications, acc2.newApplications),
15
+ uses: groupByAffectedSkill(database, selectOption.uses, acc2.uses),
8
16
  }), acc1), acc), prev);
9
17
  export const buildNewApplicationsAndUsesCache = (database, _idMap, generatedSelectOptions) => {
10
18
  const cache = {
11
- newApplications: groupByAffectedSkill(database.getAllInstanceContainersOfEntity("NewSkillApplication")),
12
- uses: groupByAffectedSkill(database.getAllInstanceContainersOfEntity("SkillUse")),
19
+ newApplications: groupByAffectedSkill(database, database.getAllInstanceContainersOfEntity("NewSkillApplication")),
20
+ uses: groupByAffectedSkill(database, database.getAllInstanceContainersOfEntity("SkillUse")),
13
21
  };
14
- return addGeneratedEntries(generatedSelectOptions, cache);
22
+ return addGeneratedEntries(database, generatedSelectOptions, cache);
15
23
  };
@@ -12,7 +12,13 @@ export declare const DerivedCharacteristic: DB.Entity<"DerivedCharacteristic", {
12
12
  C: DB.EnumCase<null>;
13
13
  D: DB.EnumCase<null>;
14
14
  }, []>>, true>;
15
- maximum: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"DerivedCharacteristicBase", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], MathOperation>, []>>, true>;
15
+ maximum: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DerivedCharacteristicPurchaseMaximumValue", {
16
+ Attribute: DB.EnumCase<DB.ReferenceIdentifier>;
17
+ PrimaryAttribute: DB.EnumCase<DB.IncludeIdentifier<[], DB.Enum<"DerivedCharacteristicPrimaryAttributeValue", {
18
+ Magical: DB.EnumCase<null>;
19
+ Blessed: DB.EnumCase<null>;
20
+ }, []>>>;
21
+ }, []>>, true>;
16
22
  }>, []>>, false>;
17
23
  permanentLoss: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"DerivedCharacteristicPermanentLoss", DB.Object<{
18
24
  canBeBoughtBack: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"DerivedCharacteristicBuyBack", DB.Object<{
@@ -130,6 +130,15 @@ const DerivedCharacteristicBaseValue = DB.Enum(import.meta.url, {
130
130
  }),
131
131
  }),
132
132
  });
133
+ const DerivedCharacteristicPurchaseMaximumValue = DB.Enum(import.meta.url, {
134
+ name: "DerivedCharacteristicPurchaseMaximumValue",
135
+ values: () => ({
136
+ Attribute: DB.EnumCase({ type: AttributeIdentifier() }),
137
+ PrimaryAttribute: DB.EnumCase({
138
+ type: DB.IncludeIdentifier(DerivedCharacteristicPrimaryAttributeValue),
139
+ }),
140
+ }),
141
+ });
133
142
  const DerivedCharacteristicBase = DB.TypeAlias(import.meta.url, {
134
143
  name: "DerivedCharacteristicBase",
135
144
  type: () => DB.GenIncludeIdentifier(MathOperation, [DB.IncludeIdentifier(DerivedCharacteristicBaseValue)]),
@@ -194,7 +203,7 @@ const DerivedCharacteristicPurchase = DB.TypeAlias(import.meta.url, {
194
203
  }),
195
204
  maximum: DB.Required({
196
205
  comment: "The maximum value that can be achieved for the derived characteristic through improvements.",
197
- type: DB.IncludeIdentifier(DerivedCharacteristicBase),
206
+ type: DB.IncludeIdentifier(DerivedCharacteristicPurchaseMaximumValue),
198
207
  }),
199
208
  }),
200
209
  });
@@ -230,6 +230,7 @@ export declare const Locale: DB.Entity<"Locale", {
230
230
  "Sort By": null;
231
231
  Name: null;
232
232
  "Date Modified": null;
233
+ "Date Created": null;
233
234
  Group: null;
234
235
  Property: null;
235
236
  "general.filters.sort.bylocation": null;
@@ -748,6 +749,8 @@ export declare const Locale: DB.Entity<"Locale", {
748
749
  "Lost Total": null;
749
750
  "Bought Back": null;
750
751
  "Buy Back Permanently Lost Point": null;
752
+ "Permanently Lost {$energy}": null;
753
+ "p{$energy}": null;
751
754
  "Permanently Lost Life Points": null;
752
755
  pLP: null;
753
756
  "Permanently Lost Arcane Energy": null;
@@ -766,7 +769,9 @@ export declare const Locale: DB.Entity<"Locale", {
766
769
  */
767
770
  "AP Cost for {$category}": null;
768
771
  "Custom option": null;
772
+ "Show entries with unmet prerequisites": null;
769
773
  "specialabilities.nativetonguelevel": null;
774
+ Adoruzepterzauber: null;
770
775
  "Advanced Combat Special Abilities": null;
771
776
  "Advanced Karma Special Abilities": null;
772
777
  "Advanced Magical Special Abilities": null;
@@ -774,6 +779,7 @@ export declare const Locale: DB.Entity<"Locale", {
774
779
  "Ancestor Glyphs": null;
775
780
  "Arcane Orb Enchantments": null;
776
781
  "Attire Enchantments": null;
782
+ Beutelzauber: null;
777
783
  "Blessed Traditions": null;
778
784
  "Bowl Enchantments": null;
779
785
  "Brawling Special Abilities": null;
@@ -789,9 +795,13 @@ export declare const Locale: DB.Entity<"Locale", {
789
795
  "Fate Point Special Abilities": null;
790
796
  "Fools Hat Enchantments": null;
791
797
  "General Special Abilities": null;
798
+ Haubenzauber: null;
799
+ Hauerkettenzauber: null;
792
800
  "Instrument Enchantments": null;
793
801
  "Karma Special Abilities": null;
802
+ Keulenzauber: null;
794
803
  Krallenkettenzauber: null;
804
+ Kristallkugelzauber: null;
795
805
  "Liturgical Style Special Abilities": null;
796
806
  "Lycantropic Gifts": null;
797
807
  "Magical Signs": null;
@@ -802,6 +812,7 @@ export declare const Locale: DB.Entity<"Locale", {
802
812
  "Pact Gifts": null;
803
813
  "Protective/Warding Circle Special Abilities": null;
804
814
  "Ring Enchantments": null;
815
+ Schweinetrommelzauber: null;
805
816
  Sermons: null;
806
817
  "Sex Special Abilities": null;
807
818
  "Sickle Rituals": null;
@@ -251,6 +251,7 @@ export const Locale = DB.Entity(import.meta.url, {
251
251
  "Sort By": null,
252
252
  "Name": null,
253
253
  "Date Modified": null,
254
+ "Date Created": null,
254
255
  "Group": null,
255
256
  "Property": null,
256
257
  "general.filters.sort.bylocation": null,
@@ -772,6 +773,8 @@ export const Locale = DB.Entity(import.meta.url, {
772
773
  "Lost Total": null,
773
774
  "Bought Back": null,
774
775
  "Buy Back Permanently Lost Point": null,
776
+ "Permanently Lost {$energy}": null,
777
+ "p{$energy}": null,
775
778
  "Permanently Lost Life Points": null,
776
779
  "pLP": null,
777
780
  "Permanently Lost Arcane Energy": null,
@@ -790,7 +793,9 @@ export const Locale = DB.Entity(import.meta.url, {
790
793
  */
791
794
  "AP Cost for {$category}": null,
792
795
  "Custom option": null,
796
+ "Show entries with unmet prerequisites": null,
793
797
  "specialabilities.nativetonguelevel": null,
798
+ "Adoruzepterzauber": null,
794
799
  "Advanced Combat Special Abilities": null,
795
800
  "Advanced Karma Special Abilities": null,
796
801
  "Advanced Magical Special Abilities": null,
@@ -798,6 +803,7 @@ export const Locale = DB.Entity(import.meta.url, {
798
803
  "Ancestor Glyphs": null,
799
804
  "Arcane Orb Enchantments": null,
800
805
  "Attire Enchantments": null,
806
+ "Beutelzauber": null,
801
807
  "Blessed Traditions": null,
802
808
  "Bowl Enchantments": null,
803
809
  "Brawling Special Abilities": null,
@@ -813,9 +819,13 @@ export const Locale = DB.Entity(import.meta.url, {
813
819
  "Fate Point Special Abilities": null,
814
820
  "Fools Hat Enchantments": null,
815
821
  "General Special Abilities": null,
822
+ "Haubenzauber": null,
823
+ "Hauerkettenzauber": null,
816
824
  "Instrument Enchantments": null,
817
825
  "Karma Special Abilities": null,
826
+ "Keulenzauber": null,
818
827
  "Krallenkettenzauber": null,
828
+ "Kristallkugelzauber": null,
819
829
  "Liturgical Style Special Abilities": null,
820
830
  "Lycantropic Gifts": null,
821
831
  "Magical Signs": null,
@@ -826,6 +836,7 @@ export const Locale = DB.Entity(import.meta.url, {
826
836
  "Pact Gifts": null,
827
837
  "Protective/Warding Circle Special Abilities": null,
828
838
  "Ring Enchantments": null,
839
+ "Schweinetrommelzauber": null,
829
840
  "Sermons": null,
830
841
  "Sex Special Abilities": null,
831
842
  "Sickle Rituals": null,
@@ -187,122 +187,253 @@ export declare const Settings: DB.SingletonEntity<"Settings", {
187
187
  liturgical: DB.MemberDecl<DB.ReferenceIdentifier, true>;
188
188
  }>, []>>, true>;
189
189
  extendedBookDescriptionPublication: DB.MemberDecl<DB.ReferenceIdentifier, true>;
190
- maximumSkillRatingBonusEntry: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ActivatableIdentifier", {
191
- Adoruzepterzauber: DB.EnumCase<DB.ReferenceIdentifier>;
192
- ArcaneOrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
193
- AttireEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
194
- Beutelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
195
- BowlEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
196
- CauldronEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
197
- ChronicleEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
198
- DaggerRitual: DB.EnumCase<DB.ReferenceIdentifier>;
199
- FoolsHatEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
200
- Haubenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
201
- Hauerkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
202
- InstrumentEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
203
- Keulenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
204
- Krallenkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
205
- Kristallkugelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
206
- OrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
207
- RingEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
208
- Schweinetrommelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
209
- SickleRitual: DB.EnumCase<DB.ReferenceIdentifier>;
210
- SpellSwordEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
211
- StaffEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
212
- ToyEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
213
- Trinkhornzauber: DB.EnumCase<DB.ReferenceIdentifier>;
214
- WandEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
215
- WeaponEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
216
- AdvancedCombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
217
- AdvancedKarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
218
- AdvancedMagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
219
- AdvancedSkillSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
220
- AncestorGlyph: DB.EnumCase<DB.ReferenceIdentifier>;
221
- BlessedTradition: DB.EnumCase<DB.ReferenceIdentifier>;
222
- BrawlingSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
223
- CeremonialItemSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
224
- CombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
225
- CombatStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
226
- CommandSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
227
- FamiliarSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
228
- FatePointSexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
229
- FatePointSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
230
- GeneralSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
231
- KarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
232
- LiturgicalStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
233
- LycantropicGift: DB.EnumCase<DB.ReferenceIdentifier>;
234
- MagicalSign: DB.EnumCase<DB.ReferenceIdentifier>;
235
- MagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
236
- MagicalTradition: DB.EnumCase<DB.ReferenceIdentifier>;
237
- MagicStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
238
- PactGift: DB.EnumCase<DB.ReferenceIdentifier>;
239
- ProtectiveWardingCircleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
240
- Sermon: DB.EnumCase<DB.ReferenceIdentifier>;
241
- SexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
242
- SikaryanDrainSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
243
- SkillStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
244
- VampiricGift: DB.EnumCase<DB.ReferenceIdentifier>;
245
- Vision: DB.EnumCase<DB.ReferenceIdentifier>;
246
- Advantage: DB.EnumCase<DB.ReferenceIdentifier>;
247
- Disadvantage: DB.EnumCase<DB.ReferenceIdentifier>;
248
- }, []>>, true>;
249
- maximumCombatTechniqueRatingBonusEntry: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ActivatableIdentifier", {
250
- Adoruzepterzauber: DB.EnumCase<DB.ReferenceIdentifier>;
251
- ArcaneOrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
252
- AttireEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
253
- Beutelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
254
- BowlEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
255
- CauldronEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
256
- ChronicleEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
257
- DaggerRitual: DB.EnumCase<DB.ReferenceIdentifier>;
258
- FoolsHatEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
259
- Haubenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
260
- Hauerkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
261
- InstrumentEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
262
- Keulenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
263
- Krallenkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
264
- Kristallkugelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
265
- OrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
266
- RingEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
267
- Schweinetrommelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
268
- SickleRitual: DB.EnumCase<DB.ReferenceIdentifier>;
269
- SpellSwordEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
270
- StaffEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
271
- ToyEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
272
- Trinkhornzauber: DB.EnumCase<DB.ReferenceIdentifier>;
273
- WandEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
274
- WeaponEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
275
- AdvancedCombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
276
- AdvancedKarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
277
- AdvancedMagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
278
- AdvancedSkillSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
279
- AncestorGlyph: DB.EnumCase<DB.ReferenceIdentifier>;
280
- BlessedTradition: DB.EnumCase<DB.ReferenceIdentifier>;
281
- BrawlingSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
282
- CeremonialItemSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
283
- CombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
284
- CombatStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
285
- CommandSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
286
- FamiliarSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
287
- FatePointSexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
288
- FatePointSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
289
- GeneralSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
290
- KarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
291
- LiturgicalStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
292
- LycantropicGift: DB.EnumCase<DB.ReferenceIdentifier>;
293
- MagicalSign: DB.EnumCase<DB.ReferenceIdentifier>;
294
- MagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
295
- MagicalTradition: DB.EnumCase<DB.ReferenceIdentifier>;
296
- MagicStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
297
- PactGift: DB.EnumCase<DB.ReferenceIdentifier>;
298
- ProtectiveWardingCircleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
299
- Sermon: DB.EnumCase<DB.ReferenceIdentifier>;
300
- SexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
301
- SikaryanDrainSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
302
- SkillStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
303
- VampiricGift: DB.EnumCase<DB.ReferenceIdentifier>;
304
- Vision: DB.EnumCase<DB.ReferenceIdentifier>;
305
- Advantage: DB.EnumCase<DB.ReferenceIdentifier>;
306
- Disadvantage: DB.EnumCase<DB.ReferenceIdentifier>;
307
- }, []>>, true>;
190
+ skills: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"SkillSettings", DB.Object<{
191
+ maximumSkillRatingBonusEntry: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ActivatableIdentifier", {
192
+ Adoruzepterzauber: DB.EnumCase<DB.ReferenceIdentifier>;
193
+ ArcaneOrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
194
+ AttireEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
195
+ Beutelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
196
+ BowlEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
197
+ CauldronEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
198
+ ChronicleEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
199
+ DaggerRitual: DB.EnumCase<DB.ReferenceIdentifier>;
200
+ FoolsHatEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
201
+ Haubenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
202
+ Hauerkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
203
+ InstrumentEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
204
+ Keulenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
205
+ Krallenkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
206
+ Kristallkugelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
207
+ OrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
208
+ RingEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
209
+ Schweinetrommelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
210
+ SickleRitual: DB.EnumCase<DB.ReferenceIdentifier>;
211
+ SpellSwordEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
212
+ StaffEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
213
+ ToyEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
214
+ Trinkhornzauber: DB.EnumCase<DB.ReferenceIdentifier>;
215
+ WandEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
216
+ WeaponEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
217
+ AdvancedCombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
218
+ AdvancedKarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
219
+ AdvancedMagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
220
+ AdvancedSkillSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
221
+ AncestorGlyph: DB.EnumCase<DB.ReferenceIdentifier>;
222
+ BlessedTradition: DB.EnumCase<DB.ReferenceIdentifier>;
223
+ BrawlingSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
224
+ CeremonialItemSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
225
+ CombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
226
+ CombatStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
227
+ CommandSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
228
+ FamiliarSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
229
+ FatePointSexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
230
+ FatePointSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
231
+ GeneralSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
232
+ KarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
233
+ LiturgicalStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
234
+ LycantropicGift: DB.EnumCase<DB.ReferenceIdentifier>;
235
+ MagicalSign: DB.EnumCase<DB.ReferenceIdentifier>;
236
+ MagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
237
+ MagicalTradition: DB.EnumCase<DB.ReferenceIdentifier>;
238
+ MagicStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
239
+ PactGift: DB.EnumCase<DB.ReferenceIdentifier>;
240
+ ProtectiveWardingCircleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
241
+ Sermon: DB.EnumCase<DB.ReferenceIdentifier>;
242
+ SexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
243
+ SikaryanDrainSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
244
+ SkillStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
245
+ VampiricGift: DB.EnumCase<DB.ReferenceIdentifier>;
246
+ Vision: DB.EnumCase<DB.ReferenceIdentifier>;
247
+ Advantage: DB.EnumCase<DB.ReferenceIdentifier>;
248
+ Disadvantage: DB.EnumCase<DB.ReferenceIdentifier>;
249
+ }, []>>, true>;
250
+ }>, []>>, true>;
251
+ combatTechniques: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"CombatTechniqueSettings", DB.Object<{
252
+ maximumCombatTechniqueRatingBonusEntry: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ActivatableIdentifier", {
253
+ Adoruzepterzauber: DB.EnumCase<DB.ReferenceIdentifier>;
254
+ ArcaneOrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
255
+ AttireEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
256
+ Beutelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
257
+ BowlEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
258
+ CauldronEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
259
+ ChronicleEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
260
+ DaggerRitual: DB.EnumCase<DB.ReferenceIdentifier>;
261
+ FoolsHatEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
262
+ Haubenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
263
+ Hauerkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
264
+ InstrumentEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
265
+ Keulenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
266
+ Krallenkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
267
+ Kristallkugelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
268
+ OrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
269
+ RingEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
270
+ Schweinetrommelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
271
+ SickleRitual: DB.EnumCase<DB.ReferenceIdentifier>;
272
+ SpellSwordEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
273
+ StaffEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
274
+ ToyEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
275
+ Trinkhornzauber: DB.EnumCase<DB.ReferenceIdentifier>;
276
+ WandEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
277
+ WeaponEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
278
+ AdvancedCombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
279
+ AdvancedKarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
280
+ AdvancedMagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
281
+ AdvancedSkillSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
282
+ AncestorGlyph: DB.EnumCase<DB.ReferenceIdentifier>;
283
+ BlessedTradition: DB.EnumCase<DB.ReferenceIdentifier>;
284
+ BrawlingSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
285
+ CeremonialItemSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
286
+ CombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
287
+ CombatStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
288
+ CommandSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
289
+ FamiliarSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
290
+ FatePointSexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
291
+ FatePointSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
292
+ GeneralSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
293
+ KarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
294
+ LiturgicalStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
295
+ LycantropicGift: DB.EnumCase<DB.ReferenceIdentifier>;
296
+ MagicalSign: DB.EnumCase<DB.ReferenceIdentifier>;
297
+ MagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
298
+ MagicalTradition: DB.EnumCase<DB.ReferenceIdentifier>;
299
+ MagicStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
300
+ PactGift: DB.EnumCase<DB.ReferenceIdentifier>;
301
+ ProtectiveWardingCircleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
302
+ Sermon: DB.EnumCase<DB.ReferenceIdentifier>;
303
+ SexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
304
+ SikaryanDrainSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
305
+ SkillStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
306
+ VampiricGift: DB.EnumCase<DB.ReferenceIdentifier>;
307
+ Vision: DB.EnumCase<DB.ReferenceIdentifier>;
308
+ Advantage: DB.EnumCase<DB.ReferenceIdentifier>;
309
+ Disadvantage: DB.EnumCase<DB.ReferenceIdentifier>;
310
+ }, []>>, true>;
311
+ closeCombatTechniqueAttackAttribute: DB.MemberDecl<DB.ReferenceIdentifier, true>;
312
+ }>, []>>, true>;
313
+ spellworks: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"SpellworkSettings", DB.Object<{
314
+ maximumRatingUnlockEntry: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ActivatableIdentifier", {
315
+ Adoruzepterzauber: DB.EnumCase<DB.ReferenceIdentifier>;
316
+ ArcaneOrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
317
+ AttireEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
318
+ Beutelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
319
+ BowlEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
320
+ CauldronEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
321
+ ChronicleEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
322
+ DaggerRitual: DB.EnumCase<DB.ReferenceIdentifier>;
323
+ FoolsHatEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
324
+ Haubenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
325
+ Hauerkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
326
+ InstrumentEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
327
+ Keulenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
328
+ Krallenkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
329
+ Kristallkugelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
330
+ OrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
331
+ RingEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
332
+ Schweinetrommelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
333
+ SickleRitual: DB.EnumCase<DB.ReferenceIdentifier>;
334
+ SpellSwordEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
335
+ StaffEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
336
+ ToyEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
337
+ Trinkhornzauber: DB.EnumCase<DB.ReferenceIdentifier>;
338
+ WandEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
339
+ WeaponEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
340
+ AdvancedCombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
341
+ AdvancedKarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
342
+ AdvancedMagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
343
+ AdvancedSkillSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
344
+ AncestorGlyph: DB.EnumCase<DB.ReferenceIdentifier>;
345
+ BlessedTradition: DB.EnumCase<DB.ReferenceIdentifier>;
346
+ BrawlingSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
347
+ CeremonialItemSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
348
+ CombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
349
+ CombatStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
350
+ CommandSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
351
+ FamiliarSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
352
+ FatePointSexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
353
+ FatePointSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
354
+ GeneralSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
355
+ KarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
356
+ LiturgicalStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
357
+ LycantropicGift: DB.EnumCase<DB.ReferenceIdentifier>;
358
+ MagicalSign: DB.EnumCase<DB.ReferenceIdentifier>;
359
+ MagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
360
+ MagicalTradition: DB.EnumCase<DB.ReferenceIdentifier>;
361
+ MagicStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
362
+ PactGift: DB.EnumCase<DB.ReferenceIdentifier>;
363
+ ProtectiveWardingCircleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
364
+ Sermon: DB.EnumCase<DB.ReferenceIdentifier>;
365
+ SexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
366
+ SikaryanDrainSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
367
+ SkillStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
368
+ VampiricGift: DB.EnumCase<DB.ReferenceIdentifier>;
369
+ Vision: DB.EnumCase<DB.ReferenceIdentifier>;
370
+ Advantage: DB.EnumCase<DB.ReferenceIdentifier>;
371
+ Disadvantage: DB.EnumCase<DB.ReferenceIdentifier>;
372
+ }, []>>, true>;
373
+ enhancementsFocusRule: DB.MemberDecl<DB.ReferenceIdentifier, true>;
374
+ }>, []>>, true>;
375
+ liturgicalChants: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"LiturgicalChantSettings", DB.Object<{
376
+ generalAspectForChurch: DB.MemberDecl<DB.ReferenceIdentifier, true>;
377
+ generalAspectForShamanistic: DB.MemberDecl<DB.ReferenceIdentifier, true>;
378
+ maximumRatingUnlockEntry: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ActivatableIdentifier", {
379
+ Adoruzepterzauber: DB.EnumCase<DB.ReferenceIdentifier>;
380
+ ArcaneOrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
381
+ AttireEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
382
+ Beutelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
383
+ BowlEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
384
+ CauldronEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
385
+ ChronicleEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
386
+ DaggerRitual: DB.EnumCase<DB.ReferenceIdentifier>;
387
+ FoolsHatEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
388
+ Haubenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
389
+ Hauerkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
390
+ InstrumentEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
391
+ Keulenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
392
+ Krallenkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
393
+ Kristallkugelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
394
+ OrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
395
+ RingEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
396
+ Schweinetrommelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
397
+ SickleRitual: DB.EnumCase<DB.ReferenceIdentifier>;
398
+ SpellSwordEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
399
+ StaffEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
400
+ ToyEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
401
+ Trinkhornzauber: DB.EnumCase<DB.ReferenceIdentifier>;
402
+ WandEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
403
+ WeaponEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
404
+ AdvancedCombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
405
+ AdvancedKarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
406
+ AdvancedMagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
407
+ AdvancedSkillSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
408
+ AncestorGlyph: DB.EnumCase<DB.ReferenceIdentifier>;
409
+ BlessedTradition: DB.EnumCase<DB.ReferenceIdentifier>;
410
+ BrawlingSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
411
+ CeremonialItemSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
412
+ CombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
413
+ CombatStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
414
+ CommandSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
415
+ FamiliarSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
416
+ FatePointSexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
417
+ FatePointSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
418
+ GeneralSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
419
+ KarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
420
+ LiturgicalStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
421
+ LycantropicGift: DB.EnumCase<DB.ReferenceIdentifier>;
422
+ MagicalSign: DB.EnumCase<DB.ReferenceIdentifier>;
423
+ MagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
424
+ MagicalTradition: DB.EnumCase<DB.ReferenceIdentifier>;
425
+ MagicStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
426
+ PactGift: DB.EnumCase<DB.ReferenceIdentifier>;
427
+ ProtectiveWardingCircleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
428
+ Sermon: DB.EnumCase<DB.ReferenceIdentifier>;
429
+ SexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
430
+ SikaryanDrainSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
431
+ SkillStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
432
+ VampiricGift: DB.EnumCase<DB.ReferenceIdentifier>;
433
+ Vision: DB.EnumCase<DB.ReferenceIdentifier>;
434
+ Advantage: DB.EnumCase<DB.ReferenceIdentifier>;
435
+ Disadvantage: DB.EnumCase<DB.ReferenceIdentifier>;
436
+ }, []>>, true>;
437
+ enhancementsFocusRule: DB.MemberDecl<DB.ReferenceIdentifier, true>;
438
+ }>, []>>, true>;
308
439
  }>;
@@ -1,5 +1,5 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { AdvantageIdentifier, DerivedCharacteristicIdentifier, ExperienceLevelIdentifier, FocusRuleIdentifier, PublicationIdentifier, } from "./_Identifier.js";
2
+ import { AdvantageIdentifier, AspectIdentifier, AttributeIdentifier, DerivedCharacteristicIdentifier, ExperienceLevelIdentifier, FocusRuleIdentifier, PublicationIdentifier, } from "./_Identifier.js";
3
3
  import { ActivatableIdentifier, SpecialAbilityIdentifier } from "./_IdentifierGroup.js";
4
4
  export const Settings = DB.SingletonEntity(import.meta.url, {
5
5
  name: "Settings",
@@ -31,13 +31,21 @@ export const Settings = DB.SingletonEntity(import.meta.url, {
31
31
  comment: "The publication that extends the description of books with additional information.",
32
32
  type: PublicationIdentifier(),
33
33
  }),
34
- maximumSkillRatingBonusEntry: DB.Required({
35
- comment: "The entry that grants a bonus of 1 towards the maximum skill rating per selection.",
36
- type: DB.IncludeIdentifier(ActivatableIdentifier),
34
+ skills: DB.Required({
35
+ comment: SkillSettings.comment,
36
+ type: DB.IncludeIdentifier(SkillSettings),
37
37
  }),
38
- maximumCombatTechniqueRatingBonusEntry: DB.Required({
39
- comment: "The entry that grants a bonus of 1 towards the maximum skill rating per selection.",
40
- type: DB.IncludeIdentifier(ActivatableIdentifier),
38
+ combatTechniques: DB.Required({
39
+ comment: CombatTechniqueSettings.comment,
40
+ type: DB.IncludeIdentifier(CombatTechniqueSettings),
41
+ }),
42
+ spellworks: DB.Required({
43
+ comment: SpellworkSettings.comment,
44
+ type: DB.IncludeIdentifier(SpellworkSettings),
45
+ }),
46
+ liturgicalChants: DB.Required({
47
+ comment: LiturgicalChantSettings.comment,
48
+ type: DB.IncludeIdentifier(LiturgicalChantSettings),
41
49
  }),
42
50
  }),
43
51
  });
@@ -103,3 +111,59 @@ const StyleSpecialAbilitySettings = DB.TypeAlias(import.meta.url, {
103
111
  }),
104
112
  }),
105
113
  });
114
+ const SkillSettings = DB.TypeAlias(import.meta.url, {
115
+ name: "SkillSettings",
116
+ type: () => DB.Object({
117
+ maximumSkillRatingBonusEntry: DB.Required({
118
+ comment: "The entry that grants a bonus of 1 towards the maximum skill rating per selection.",
119
+ type: DB.IncludeIdentifier(ActivatableIdentifier),
120
+ }),
121
+ }),
122
+ });
123
+ const CombatTechniqueSettings = DB.TypeAlias(import.meta.url, {
124
+ name: "CombatTechniqueSettings",
125
+ type: () => DB.Object({
126
+ maximumCombatTechniqueRatingBonusEntry: DB.Required({
127
+ comment: "The entry that grants a bonus of 1 towards the maximum skill rating per selection.",
128
+ type: DB.IncludeIdentifier(ActivatableIdentifier),
129
+ }),
130
+ closeCombatTechniqueAttackAttribute: DB.Required({
131
+ comment: "The attribute that increases the attack value of a close combat technique.",
132
+ type: AttributeIdentifier(),
133
+ }),
134
+ }),
135
+ });
136
+ const SpellworkSettings = DB.TypeAlias(import.meta.url, {
137
+ name: "SpellworkSettings",
138
+ type: () => DB.Object({
139
+ maximumRatingUnlockEntry: DB.Required({
140
+ comment: "The entry that removes the maximum rating of 14 from spellworks for selected properties. It must provide the property as a selected option.",
141
+ type: DB.IncludeIdentifier(ActivatableIdentifier),
142
+ }),
143
+ enhancementsFocusRule: DB.Required({
144
+ comment: "Spell Enhancements are part of focus rules. This type defines which focus rule must be enabled in order to use an enhancement. Essentially, this is a default prerequisite they must meet, but manually inserting them with every enhancement is a lot of work and error-prone. Therefore, in order to use an enhancement, prerequisites for the focus rule must be generated for every entry.",
145
+ type: FocusRuleIdentifier(),
146
+ }),
147
+ }),
148
+ });
149
+ const LiturgicalChantSettings = DB.TypeAlias(import.meta.url, {
150
+ name: "LiturgicalChantSettings",
151
+ type: () => DB.Object({
152
+ generalAspectForChurch: DB.Required({
153
+ comment: "The general aspect for church traditions.",
154
+ type: AspectIdentifier(),
155
+ }),
156
+ generalAspectForShamanistic: DB.Required({
157
+ comment: "The general aspect for shamanistic traditions.",
158
+ type: AspectIdentifier(),
159
+ }),
160
+ maximumRatingUnlockEntry: DB.Required({
161
+ comment: "The entry that removes the maximum rating of 14 from liturgical chants for selected aspects. It must provide the aspect as a selected option.",
162
+ type: DB.IncludeIdentifier(ActivatableIdentifier),
163
+ }),
164
+ enhancementsFocusRule: DB.Required({
165
+ comment: "Liturgical Chant Enhancements are part of focus rules. This type defines which focus rule must be enabled in order to use an enhancement. Essentially, this is a default prerequisite they must meet, but manually inserting them with every enhancement is a lot of work and error-prone. Therefore, in order to use an enhancement, prerequisites for the focus rule must be generated for every entry.",
166
+ type: FocusRuleIdentifier(),
167
+ }),
168
+ }),
169
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optolith/database-schema",
3
- "version": "0.112.0",
3
+ "version": "0.114.0",
4
4
  "description": "Definitions and utilities for the flat-file database of Optolith, a character creation tool for the Pen and Paper RPG “The Dark Eye 5”, and its external integrations into other software.",
5
5
  "keywords": [
6
6
  "tde",
@@ -39,7 +39,7 @@
39
39
  "license": "MPL-2.0",
40
40
  "dependencies": {
41
41
  "@elyukai/utils": "^0.3.6",
42
- "tsondb": "^0.23.2"
42
+ "tsondb": "^0.23.4"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@elyukai/oxc-config": "^0.1.0",