@optolith/database-schema 0.93.0 → 0.95.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 (57) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/gen/types.d.ts +188 -17
  3. package/lib/cache/tradeSecrets.js +15 -3
  4. package/lib/main.js +1 -0
  5. package/lib/types/Locale.d.ts +1 -0
  6. package/lib/types/Locale.js +1 -0
  7. package/lib/types/Settings.d.ts +57 -0
  8. package/lib/types/Settings.js +10 -1
  9. package/lib/types/_Identifier.d.ts +1 -0
  10. package/lib/types/_Identifier.js +2 -0
  11. package/lib/types/_IdentifierGroup.d.ts +1 -0
  12. package/lib/types/_IdentifierGroup.js +2 -1
  13. package/lib/types/_Prerequisite.d.ts +24 -0
  14. package/lib/types/_Prerequisite.js +5 -1
  15. package/lib/types/equipment/EquipmentPackage.d.ts +1 -0
  16. package/lib/types/equipment/item/Ammunition.d.ts +72 -0
  17. package/lib/types/equipment/item/Ammunition.js +5 -1
  18. package/lib/types/equipment/item/Armor.d.ts +24 -0
  19. package/lib/types/equipment/item/ArmorAccessory.d.ts +281 -0
  20. package/lib/types/equipment/item/ArmorAccessory.js +48 -0
  21. package/lib/types/equipment/item/BandageOrRemedy.d.ts +24 -0
  22. package/lib/types/equipment/item/Book.d.ts +98 -20
  23. package/lib/types/equipment/item/Book.js +60 -45
  24. package/lib/types/equipment/item/CeremonialItem.d.ts +24 -0
  25. package/lib/types/equipment/item/Clothes.d.ts +24 -0
  26. package/lib/types/equipment/item/Container.d.ts +24 -0
  27. package/lib/types/equipment/item/IlluminationLightSource.d.ts +24 -0
  28. package/lib/types/equipment/item/IlluminationRefillOrSupply.d.ts +24 -0
  29. package/lib/types/equipment/item/Item.d.ts +24 -0
  30. package/lib/types/equipment/item/Jewelry.d.ts +24 -0
  31. package/lib/types/equipment/item/Laboratory.d.ts +24 -0
  32. package/lib/types/equipment/item/Liebesspielzeug.d.ts +24 -0
  33. package/lib/types/equipment/item/LuxuryGood.d.ts +24 -0
  34. package/lib/types/equipment/item/MagicalArtifact.d.ts +24 -0
  35. package/lib/types/equipment/item/MusicalInstrument.d.ts +24 -0
  36. package/lib/types/equipment/item/OrienteeringAid.d.ts +24 -0
  37. package/lib/types/equipment/item/RopeOrChain.d.ts +24 -0
  38. package/lib/types/equipment/item/Stationery.d.ts +24 -0
  39. package/lib/types/equipment/item/ThievesTool.d.ts +24 -0
  40. package/lib/types/equipment/item/ToolOfTheTrade.d.ts +24 -0
  41. package/lib/types/equipment/item/TravelGearOrTool.d.ts +24 -0
  42. package/lib/types/equipment/item/Vehicle.d.ts +24 -0
  43. package/lib/types/equipment/item/Weapon.d.ts +24 -0
  44. package/lib/types/equipment/item/WeaponAccessory.d.ts +24 -0
  45. package/lib/types/equipment/item/_Item.d.ts +72 -0
  46. package/lib/types/equipment/item/_Item.js +5 -0
  47. package/lib/types/index.d.ts +1 -0
  48. package/lib/types/index.js +1 -0
  49. package/lib/types/magicalActions/ElvenMagicalSong.d.ts +1 -0
  50. package/lib/types/magicalActions/ElvenMagicalSong.js +4 -0
  51. package/lib/types/prerequisites/PrerequisiteGroups.d.ts +9 -0
  52. package/lib/types/prerequisites/PrerequisiteGroups.js +9 -0
  53. package/lib/types/prerequisites/single/LanguagePrerequisite.d.ts +5 -0
  54. package/lib/types/prerequisites/single/LanguagePrerequisite.js +15 -0
  55. package/lib/types/prerequisites/single/ScriptPrerequisite.d.ts +4 -0
  56. package/lib/types/prerequisites/single/ScriptPrerequisite.js +11 -0
  57. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,30 @@
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.95.0](https://github.com/Optolith/database-schema/compare/v0.94.0...v0.95.0) (2026-10-12)
6
+
7
+ ### ⚠ BREAKING CHANGES
8
+
9
+ * armor accessory entity
10
+ * rearrange book values for Aventurische Bibliothek
11
+
12
+ ### Features
13
+
14
+ * armor accessory entity ([3ecd251](https://github.com/Optolith/database-schema/commit/3ecd25145811c115228fb2c10e31501ff7e1acd2))
15
+ * rearrange book values for Aventurische Bibliothek ([bc36e58](https://github.com/Optolith/database-schema/commit/bc36e58957e3e9ac96d40998e762dff72b62bdaa)), closes [#154](https://github.com/Optolith/database-schema/issues/154), references [#153](https://github.com/Optolith/database-schema/issues/153)
16
+
17
+ ## [0.94.0](https://github.com/Optolith/database-schema/compare/v0.93.0...v0.94.0) (2026-10-12)
18
+
19
+ ### ⚠ BREAKING CHANGES
20
+
21
+ * add distorted elven magical songs flag
22
+ * derived trade secrets for ammunition
23
+
24
+ ### Features
25
+
26
+ * add distorted elven magical songs flag ([837062e](https://github.com/Optolith/database-schema/commit/837062ee095a7bd706ce4c7c38517057580ee73a)), references [#199](https://github.com/Optolith/database-schema/issues/199)
27
+ * derived trade secrets for ammunition ([6b5b5ae](https://github.com/Optolith/database-schema/commit/6b5b5ae8f59d26c594c6594e3798263fdd47095b))
28
+
5
29
  ## [0.93.0](https://github.com/Optolith/database-schema/compare/v0.92.0...v0.93.0) (2026-10-11)
6
30
 
7
31
  ### ⚠ BREAKING CHANGES
package/gen/types.d.ts CHANGED
@@ -21,6 +21,7 @@ export type EntityMap = {
21
21
  ArcaneDancerTradition: ArcaneDancerTradition
22
22
  ArcaneOrbEnchantment: ArcaneOrbEnchantment
23
23
  Armor: Armor
24
+ ArmorAccessory: ArmorAccessory
24
25
  Aspect: Aspect
25
26
  AttireEnchantment: AttireEnchantment
26
27
  Attribute: Attribute
@@ -271,6 +272,7 @@ export type EnumMap = {
271
272
  BookContentQuality: BookContentQuality
272
273
  BookCost: BookCost
273
274
  BookCostVariant: BookCostVariant
275
+ BookPrerequisiteGroup: BookPrerequisiteGroup
274
276
  BookRules: BookRules
275
277
  BookType: BookType
276
278
  BurningTime: BurningTime
@@ -570,6 +572,7 @@ export type TypeAliasMap = {
570
572
  BlessedTraditionPrerequisite: BlessedTraditionPrerequisite
571
573
  BlessedTraditionsSelectOptionCategory: BlessedTraditionsSelectOptionCategory
572
574
  BlessingPerformanceParameters: BlessingPerformanceParameters
575
+ BookPrerequisites: BookPrerequisites
573
576
  BookRulesByEdition: BookRulesByEdition
574
577
  BookRulesOfEdition: BookRulesOfEdition
575
578
  BySizeCategory: BySizeCategory<unknown>
@@ -750,6 +753,7 @@ export type TypeAliasMap = {
750
753
  JewelryMaterialDifference: JewelryMaterialDifference<unknown>
751
754
  KnownItemSpecifics: KnownItemSpecifics
752
755
  KnownItemSpecificsTranslation: KnownItemSpecificsTranslation
756
+ LanguagePrerequisite: LanguagePrerequisite
753
757
  LanguagePrerequisites: LanguagePrerequisites
754
758
  LanguagesScriptsOptions: LanguagesScriptsOptions
755
759
  LanguagesSelectOptionCategory: LanguagesSelectOptionCategory
@@ -906,6 +910,7 @@ export type TypeAliasMap = {
906
910
  ReversalisEffect: ReversalisEffect
907
911
  RulePrerequisite: RulePrerequisite
908
912
  RulePrerequisites: RulePrerequisites
913
+ ScriptPrerequisite: ScriptPrerequisite
909
914
  SecondaryArmor: SecondaryArmor
910
915
  SelectableAttributeAdjustment: SelectableAttributeAdjustment
911
916
  SelectOptionRule: SelectOptionRule
@@ -2661,6 +2666,7 @@ export interface Locale {
2661
2666
  "Helmets": string
2662
2667
  "Pieces of Armor": string
2663
2668
  "Weapon Accessories": string
2669
+ "Armor Accessories": string
2664
2670
  "Clothes": string
2665
2671
  "Clothing Packages for Social Status": string
2666
2672
  "Travel Gear and Tools": string
@@ -12727,6 +12733,11 @@ export interface ComplexComplexity {
12727
12733
  */
12728
12734
  ap_value: number
12729
12735
 
12736
+ /**
12737
+ * The prerequisites of the trade secret, if any. Note that the special ability prerequisite for weapon and armor trade secrets is added automatically based on the value in the `Settings` singleton entity.
12738
+ */
12739
+ prerequisites?: PlainGeneralPrerequisites
12740
+
12730
12741
  /**
12731
12742
  * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
12732
12743
  */
@@ -12993,6 +13004,11 @@ export interface Ammunition {
12993
13004
  */
12994
13005
  cost: Cost
12995
13006
 
13007
+ /**
13008
+ * The complexity of crafting the item.
13009
+ */
13010
+ complexity?: Complexity
13011
+
12996
13012
  /**
12997
13013
  * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
12998
13014
  */
@@ -19465,6 +19481,11 @@ export interface ElvenMagicalSong {
19465
19481
  */
19466
19482
  improvement_cost: ImprovementCost
19467
19483
 
19484
+ /**
19485
+ * Is the song a distorted Elven magical song?
19486
+ */
19487
+ is_distorted: boolean
19488
+
19468
19489
  /**
19469
19490
  * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
19470
19491
  */
@@ -23860,7 +23881,7 @@ export interface HeadHitZoneCombinationPossibilities {
23860
23881
  protection?: number
23861
23882
  }
23862
23883
 
23863
- export interface BandageOrRemedy {
23884
+ export interface ArmorAccessory {
23864
23885
  /**
23865
23886
  * The cost in silverthalers.
23866
23887
  */
@@ -23869,7 +23890,7 @@ export interface BandageOrRemedy {
23869
23890
  /**
23870
23891
  * The weight in kg.
23871
23892
  */
23872
- weight: Weight
23893
+ weight?: Weight
23873
23894
 
23874
23895
  /**
23875
23896
  * The complexity of crafting the item.
@@ -23895,16 +23916,16 @@ export interface BandageOrRemedy {
23895
23916
  * All translations for the entry, identified by IETF language tag (BCP47).
23896
23917
  */
23897
23918
  translations: {
23898
- [localeId: string]: BandageOrRemedyTranslation
23919
+ [localeId: string]: ArmorAccessoryTranslation
23899
23920
  }
23900
23921
  }
23901
23922
 
23902
23923
  /**
23903
23924
  * The entity’s identifier. A UUID or a locale code if it is registered as the locale entity.
23904
23925
  */
23905
- export type BandageOrRemedy_ID = string
23926
+ export type ArmorAccessory_ID = string
23906
23927
 
23907
- export interface BandageOrRemedyTranslation {
23928
+ export interface ArmorAccessoryTranslation {
23908
23929
  /**
23909
23930
  * The item’s name.
23910
23931
  */
@@ -24036,6 +24057,74 @@ export interface SecondaryArmorTranslation {
24036
24057
  disadvantage?: string
24037
24058
  }
24038
24059
 
24060
+ export interface BandageOrRemedy {
24061
+ /**
24062
+ * The cost in silverthalers.
24063
+ */
24064
+ cost: Cost
24065
+
24066
+ /**
24067
+ * The weight in kg.
24068
+ */
24069
+ weight: Weight
24070
+
24071
+ /**
24072
+ * The complexity of crafting the item.
24073
+ */
24074
+ complexity?: Complexity
24075
+
24076
+ /**
24077
+ * The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
24078
+ */
24079
+ structure_points?: StructurePoints
24080
+
24081
+ /**
24082
+ * The item can also be used either as an improvised weapon or as an armor, although this is not the primary use case of the item.
24083
+ */
24084
+ combat_use?: CombatUse
24085
+
24086
+ /**
24087
+ * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
24088
+ */
24089
+ src: PublicationRefs
24090
+
24091
+ /**
24092
+ * All translations for the entry, identified by IETF language tag (BCP47).
24093
+ */
24094
+ translations: {
24095
+ [localeId: string]: BandageOrRemedyTranslation
24096
+ }
24097
+ }
24098
+
24099
+ /**
24100
+ * The entity’s identifier. A UUID or a locale code if it is registered as the locale entity.
24101
+ */
24102
+ export type BandageOrRemedy_ID = string
24103
+
24104
+ export interface BandageOrRemedyTranslation {
24105
+ /**
24106
+ * The item’s name.
24107
+ */
24108
+ name: string
24109
+
24110
+ /**
24111
+ * An auxiliary name or label of the item, if available.
24112
+ */
24113
+ secondary_name?: string
24114
+
24115
+ /**
24116
+ * Note text.
24117
+ */
24118
+ note?: string
24119
+
24120
+ /**
24121
+ * Special rules text.
24122
+ */
24123
+ rules?: string
24124
+
24125
+ errata?: Errata
24126
+ }
24127
+
24039
24128
  export interface Biome {
24040
24129
  /**
24041
24130
  * All translations for the entry, identified by IETF language tag (BCP47).
@@ -24115,6 +24204,11 @@ export interface Book {
24115
24204
  */
24116
24205
  types: BookType[]
24117
24206
 
24207
+ /**
24208
+ * The language(s) and script(s) the book is written in.
24209
+ */
24210
+ languageAndScript?: BookPrerequisites
24211
+
24118
24212
  /**
24119
24213
  * The cost in silverthalers.
24120
24214
  */
@@ -24140,6 +24234,11 @@ export interface Book {
24140
24234
  */
24141
24235
  contentQuality?: BookContentQuality
24142
24236
 
24237
+ /**
24238
+ * Skills and abilities you can learn by reading the book, as well as any other rules and effects concerning the book.
24239
+ */
24240
+ rules: BookRules
24241
+
24143
24242
  /**
24144
24243
  * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
24145
24244
  */
@@ -24170,25 +24269,15 @@ export interface BookTranslation {
24170
24269
  secondary_name?: string
24171
24270
 
24172
24271
  /**
24173
- * The language the book is written in, if specified.
24174
- */
24175
- language?: string
24176
-
24177
- /**
24178
- * The script that was used for the book, if specified.
24272
+ * The language(s) and script(s) the book is written in.
24179
24273
  */
24180
- script?: string
24274
+ languageAndScript?: string
24181
24275
 
24182
24276
  /**
24183
24277
  * Note text.
24184
24278
  */
24185
24279
  note?: string
24186
24280
 
24187
- /**
24188
- * Special rules text.
24189
- */
24190
- rules?: BookRules
24191
-
24192
24281
  /**
24193
24282
  * The legality of the item, if specified.
24194
24283
  */
@@ -24249,6 +24338,37 @@ export type MundaneBookType =
24249
24338
  ProfessionalPublication: Skill_ID
24250
24339
  }
24251
24340
 
24341
+ export type BookPrerequisites = PlainPrerequisites<BookPrerequisiteGroup>
24342
+
24343
+ export type BookPrerequisiteGroup =
24344
+ | {
24345
+ kind: "Language"
24346
+ Language: LanguagePrerequisite
24347
+ }
24348
+ | {
24349
+ kind: "Script"
24350
+ Script: ScriptPrerequisite
24351
+ }
24352
+
24353
+ export interface LanguagePrerequisite {
24354
+ /**
24355
+ * The language’s identifier.
24356
+ */
24357
+ id: Language_ID
24358
+
24359
+ /**
24360
+ * The required minimum level of the language.
24361
+ */
24362
+ level: number
24363
+ }
24364
+
24365
+ export interface ScriptPrerequisite {
24366
+ /**
24367
+ * The script’s identifier.
24368
+ */
24369
+ id: Script_ID
24370
+ }
24371
+
24252
24372
  /**
24253
24373
  * The cost of the book, which may be a single value or multiple values that are defined by specific editions or other defining factors of the book.
24254
24374
  */
@@ -24358,6 +24478,15 @@ export type BookRules =
24358
24478
  * The book’s rules without any special effects or conditions.
24359
24479
  */
24360
24480
  export interface PlainBookRules {
24481
+ /**
24482
+ * All translations for the entry, identified by IETF language tag (BCP47).
24483
+ */
24484
+ translations: {
24485
+ [localeId: string]: PlainBookRulesTranslation
24486
+ }
24487
+ }
24488
+
24489
+ export interface PlainBookRulesTranslation {
24361
24490
  /**
24362
24491
  * The (main) rules text.
24363
24492
  */
@@ -24385,6 +24514,15 @@ export interface PlainBookRules {
24385
24514
  export interface BookRulesByEdition {
24386
24515
  editions: BookRulesOfEdition[]
24387
24516
 
24517
+ /**
24518
+ * All translations for the entry, identified by IETF language tag (BCP47).
24519
+ */
24520
+ translations?: {
24521
+ [localeId: string]: BookRulesByEditionTranslation
24522
+ }
24523
+ }
24524
+
24525
+ export interface BookRulesByEditionTranslation {
24388
24526
  /**
24389
24527
  * Additional rules text that comes after all other rules.
24390
24528
  */
@@ -24392,11 +24530,30 @@ export interface BookRulesByEdition {
24392
24530
  }
24393
24531
 
24394
24532
  export interface BookRulesOfEdition {
24533
+ /**
24534
+ * The language(s) and script(s) the book is written in.
24535
+ */
24536
+ languageAndScript?: BookPrerequisites
24537
+
24538
+ /**
24539
+ * All translations for the entry, identified by IETF language tag (BCP47).
24540
+ */
24541
+ translations: {
24542
+ [localeId: string]: BookRulesOfEditionTranslation
24543
+ }
24544
+ }
24545
+
24546
+ export interface BookRulesOfEditionTranslation {
24395
24547
  /**
24396
24548
  * The edition(s) the rules apply to.
24397
24549
  */
24398
24550
  label: string
24399
24551
 
24552
+ /**
24553
+ * The language(s) and script(s) the book is written in.
24554
+ */
24555
+ languageAndScript?: string
24556
+
24400
24557
  /**
24401
24558
  * The rules text.
24402
24559
  */
@@ -25381,6 +25538,10 @@ export type EquipmentIdentifier =
25381
25538
  kind: "Armor"
25382
25539
  Armor: Armor_ID
25383
25540
  }
25541
+ | {
25542
+ kind: "ArmorAccessory"
25543
+ ArmorAccessory: ArmorAccessory_ID
25544
+ }
25384
25545
  | {
25385
25546
  kind: "BandageOrRemedy"
25386
25547
  BandageOrRemedy: BandageOrRemedy_ID
@@ -27827,6 +27988,11 @@ export interface Settings {
27827
27988
  * Style Special Abilities and Advanced Special Abilities are part of focus rules. This type defines which focus rule must be enabled in order to use any of these special abilities. Essentially, this is a default prerequisite all of these special abilities must meet, but manually inserting them with every special ability is a lot of work and error-prone. Therefore, in order to use any of these special abilities, prerequisites for the respective focus rule must be generated for every entry.
27828
27989
  */
27829
27990
  styles: StyleSpecialAbilitySettings
27991
+
27992
+ /**
27993
+ * The publication that extends the description of books with additional information.
27994
+ */
27995
+ extendedBookDescriptionPublication: Publication_ID
27830
27996
  }
27831
27997
 
27832
27998
  /**
@@ -27838,6 +28004,11 @@ export interface DerivedTradeSecretsSettings {
27838
28004
  */
27839
28005
  requiredSpecialAbilityForWeapons: SpecialAbilityIdentifier
27840
28006
 
28007
+ /**
28008
+ * The special ability required to buy derived trade secrets for ammunition.
28009
+ */
28010
+ requiredSpecialAbilityForAmmunition: SpecialAbilityIdentifier
28011
+
27841
28012
  /**
27842
28013
  * The special ability required to buy derived trade secrets for armor.
27843
28014
  */
@@ -2,6 +2,8 @@ import { assertExhaustive } from "@elyukai/utils/typeSafety";
2
2
  import { Case } from "tsondb/schema/gen";
3
3
  const emptyDerivedEquipmentTradeSecretsCache = {
4
4
  Armor: {},
5
+ ArmorAccessory: {},
6
+ Ammunition: {},
5
7
  BandageOrRemedy: {},
6
8
  Book: {},
7
9
  CeremonialItem: {},
@@ -53,15 +55,25 @@ export const buildDerivedTradeSecretsCache = (database, settings) => {
53
55
  id: settings.derivedTradeSecrets.requiredSpecialAbilityForWeapons,
54
56
  active: true,
55
57
  })),
58
+ ...(container.content.complexity.Complex.prerequisites ?? []),
56
59
  ]
57
- : entity === "Armor"
60
+ : entity === "Ammunition"
58
61
  ? [
59
62
  Case("Single", Case("Activatable", {
60
- id: settings.derivedTradeSecrets.requiredSpecialAbilityForArmor,
63
+ id: settings.derivedTradeSecrets.requiredSpecialAbilityForAmmunition,
61
64
  active: true,
62
65
  })),
66
+ ...(container.content.complexity.Complex.prerequisites ?? []),
63
67
  ]
64
- : undefined,
68
+ : entity === "Armor"
69
+ ? [
70
+ Case("Single", Case("Activatable", {
71
+ id: settings.derivedTradeSecrets.requiredSpecialAbilityForArmor,
72
+ active: true,
73
+ })),
74
+ ...(container.content.complexity.Complex.prerequisites ?? []),
75
+ ]
76
+ : (container.content.complexity.Complex.prerequisites ?? []),
65
77
  src: container.content.complexity.Complex.src ?? container.content.src,
66
78
  translations: Object.fromEntries(Object.entries(container.content.translations).map(([lang, translation]) => [
67
79
  lang,
package/lib/main.js CHANGED
@@ -21,6 +21,7 @@ export const schema = new Schema([
21
21
  Types.ArcaneDancerTradition,
22
22
  Types.ArcaneOrbEnchantment,
23
23
  Types.Armor,
24
+ Types.ArmorAccessory,
24
25
  Types.Aspect,
25
26
  Types.AttireEnchantment,
26
27
  Types.Attribute,
@@ -1507,6 +1507,7 @@ export declare const Locale: DB.Entity<"Locale", {
1507
1507
  Helmets: null;
1508
1508
  "Pieces of Armor": null;
1509
1509
  "Weapon Accessories": null;
1510
+ "Armor Accessories": null;
1510
1511
  Clothes: null;
1511
1512
  "Clothing Packages for Social Status": null;
1512
1513
  "Travel Gear and Tools": null;
@@ -1550,6 +1550,7 @@ export const Locale = DB.Entity(import.meta.url, {
1550
1550
  "Helmets": null,
1551
1551
  "Pieces of Armor": null,
1552
1552
  "Weapon Accessories": null,
1553
+ "Armor Accessories": null,
1553
1554
  "Clothes": null,
1554
1555
  "Clothing Packages for Social Status": null,
1555
1556
  "Travel Gear and Tools": null,
@@ -59,6 +59,62 @@ export declare const Settings: DB.SingletonEntity<"Settings", {
59
59
  VampiricGift: DB.EnumCase<DB.ReferenceIdentifier>;
60
60
  Vision: DB.EnumCase<DB.ReferenceIdentifier>;
61
61
  }, []>>, true>;
62
+ requiredSpecialAbilityForAmmunition: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SpecialAbilityIdentifier", {
63
+ ArcaneOrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
64
+ AttireEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
65
+ Beutelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
66
+ BowlEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
67
+ CauldronEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
68
+ ChronicleEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
69
+ DaggerRitual: DB.EnumCase<DB.ReferenceIdentifier>;
70
+ FoolsHatEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
71
+ Haubenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
72
+ Hauerkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
73
+ InstrumentEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
74
+ Keulenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
75
+ Krallenkettenzauber: DB.EnumCase<DB.ReferenceIdentifier>;
76
+ Kristallkugelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
77
+ OrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
78
+ RingEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
79
+ Schweinetrommelzauber: DB.EnumCase<DB.ReferenceIdentifier>;
80
+ SickleRitual: DB.EnumCase<DB.ReferenceIdentifier>;
81
+ SpellSwordEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
82
+ StaffEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
83
+ ToyEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
84
+ Trinkhornzauber: DB.EnumCase<DB.ReferenceIdentifier>;
85
+ WandEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
86
+ WeaponEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
87
+ AdvancedCombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
88
+ AdvancedKarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
89
+ AdvancedMagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
90
+ AdvancedSkillSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
91
+ AncestorGlyph: DB.EnumCase<DB.ReferenceIdentifier>;
92
+ BlessedTradition: DB.EnumCase<DB.ReferenceIdentifier>;
93
+ BrawlingSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
94
+ CeremonialItemSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
95
+ CombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
96
+ CombatStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
97
+ CommandSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
98
+ FamiliarSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
99
+ FatePointSexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
100
+ FatePointSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
101
+ GeneralSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
102
+ KarmaSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
103
+ LiturgicalStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
104
+ LycantropicGift: DB.EnumCase<DB.ReferenceIdentifier>;
105
+ MagicalSign: DB.EnumCase<DB.ReferenceIdentifier>;
106
+ MagicalSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
107
+ MagicalTradition: DB.EnumCase<DB.ReferenceIdentifier>;
108
+ MagicStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
109
+ PactGift: DB.EnumCase<DB.ReferenceIdentifier>;
110
+ ProtectiveWardingCircleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
111
+ Sermon: DB.EnumCase<DB.ReferenceIdentifier>;
112
+ SexSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
113
+ SikaryanDrainSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
114
+ SkillStyleSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
115
+ VampiricGift: DB.EnumCase<DB.ReferenceIdentifier>;
116
+ Vision: DB.EnumCase<DB.ReferenceIdentifier>;
117
+ }, []>>, true>;
62
118
  requiredSpecialAbilityForArmor: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SpecialAbilityIdentifier", {
63
119
  ArcaneOrbEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
64
120
  AttireEnchantment: DB.EnumCase<DB.ReferenceIdentifier>;
@@ -127,4 +183,5 @@ export declare const Settings: DB.SingletonEntity<"Settings", {
127
183
  magic: DB.MemberDecl<DB.ReferenceIdentifier, true>;
128
184
  liturgical: DB.MemberDecl<DB.ReferenceIdentifier, true>;
129
185
  }>, []>>, true>;
186
+ extendedBookDescriptionPublication: DB.MemberDecl<DB.ReferenceIdentifier, true>;
130
187
  }>;
@@ -1,5 +1,5 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { AdvantageIdentifier, DerivedCharacteristicIdentifier, ExperienceLevelIdentifier, FocusRuleIdentifier, } from "./_Identifier.js";
2
+ import { AdvantageIdentifier, DerivedCharacteristicIdentifier, ExperienceLevelIdentifier, FocusRuleIdentifier, PublicationIdentifier, } from "./_Identifier.js";
3
3
  import { SpecialAbilityIdentifier } from "./_IdentifierGroup.js";
4
4
  export const Settings = DB.SingletonEntity(import.meta.url, {
5
5
  name: "Settings",
@@ -27,6 +27,10 @@ export const Settings = DB.SingletonEntity(import.meta.url, {
27
27
  comment: StyleSpecialAbilitySettings.comment,
28
28
  type: DB.IncludeIdentifier(StyleSpecialAbilitySettings),
29
29
  }),
30
+ extendedBookDescriptionPublication: DB.Required({
31
+ comment: "The publication that extends the description of books with additional information.",
32
+ type: PublicationIdentifier(),
33
+ }),
30
34
  }),
31
35
  });
32
36
  const SupernaturalBaseAdvantageSettings = DB.TypeAlias(import.meta.url, {
@@ -52,6 +56,11 @@ const DerivedTradeSecretsSettings = DB.TypeAlias(import.meta.url, {
52
56
  comment: "The special ability required to buy derived trade secrets for weapons.",
53
57
  type: DB.IncludeIdentifier(SpecialAbilityIdentifier),
54
58
  }),
59
+ requiredSpecialAbilityForAmmunition: DB.Required({
60
+ displayName: "Required Special Ability for Ammunition",
61
+ comment: "The special ability required to buy derived trade secrets for ammunition.",
62
+ type: DB.IncludeIdentifier(SpecialAbilityIdentifier),
63
+ }),
55
64
  requiredSpecialAbilityForArmor: DB.Required({
56
65
  displayName: "Required Special Ability for Armor",
57
66
  comment: "The special ability required to buy derived trade secrets for armor.",
@@ -18,6 +18,7 @@ export declare const ArcaneBardTraditionIdentifier: () => R;
18
18
  export declare const ArcaneDancerTraditionIdentifier: () => R;
19
19
  export declare const ArcaneOrbEnchantmentIdentifier: () => R;
20
20
  export declare const ArmorIdentifier: () => R;
21
+ export declare const ArmorAccessoryIdentifier: () => R;
21
22
  export declare const AspectIdentifier: () => R;
22
23
  export declare const AttireEnchantmentIdentifier: () => R;
23
24
  export declare const AttributeIdentifier: () => R;
@@ -23,6 +23,7 @@ import { Ammunition } from "./equipment/item/Ammunition.js";
23
23
  import { Animal } from "./equipment/item/Animal.js";
24
24
  import { AnimalCare } from "./equipment/item/AnimalCare.js";
25
25
  import { Armor } from "./equipment/item/Armor.js";
26
+ import { ArmorAccessory } from "./equipment/item/ArmorAccessory.js";
26
27
  import { BandageOrRemedy } from "./equipment/item/BandageOrRemedy.js";
27
28
  import { Book } from "./equipment/item/Book.js";
28
29
  import { CeremonialItem } from "./equipment/item/CeremonialItem.js";
@@ -186,6 +187,7 @@ export const ArcaneBardTraditionIdentifier = () => R(ArcaneBardTradition);
186
187
  export const ArcaneDancerTraditionIdentifier = () => R(ArcaneDancerTradition);
187
188
  export const ArcaneOrbEnchantmentIdentifier = () => R(ArcaneOrbEnchantment);
188
189
  export const ArmorIdentifier = () => R(Armor);
190
+ export const ArmorAccessoryIdentifier = () => R(ArmorAccessory);
189
191
  export const AspectIdentifier = () => R(Aspect);
190
192
  export const AttireEnchantmentIdentifier = () => R(AttireEnchantment);
191
193
  export const AttributeIdentifier = () => R(Attribute);
@@ -436,6 +436,7 @@ export declare const EquipmentIdentifier: DB.Enum<"EquipmentIdentifier", {
436
436
  Animal: DB.EnumCase<DB.ReferenceIdentifier>;
437
437
  AnimalCare: DB.EnumCase<DB.ReferenceIdentifier>;
438
438
  Armor: DB.EnumCase<DB.ReferenceIdentifier>;
439
+ ArmorAccessory: DB.EnumCase<DB.ReferenceIdentifier>;
439
440
  BandageOrRemedy: DB.EnumCase<DB.ReferenceIdentifier>;
440
441
  Book: DB.EnumCase<DB.ReferenceIdentifier>;
441
442
  CeremonialItem: DB.EnumCase<DB.ReferenceIdentifier>;
@@ -1,6 +1,6 @@
1
1
  import { sortObjectKeys } from "@elyukai/utils/object";
2
2
  import * as DB from "tsondb/schema/dsl";
3
- import { AdvancedCombatSpecialAbilityIdentifier, AdvancedKarmaSpecialAbilityIdentifier, AdvancedMagicalSpecialAbilityIdentifier, AdvancedSkillSpecialAbilityIdentifier, AdvantageIdentifier, AmmunitionIdentifier, AncestorGlyphIdentifier, AnimalCareIdentifier, AnimalIdentifier, AnimalShapeIdentifier, AnimalShapeSizeIdentifier, AnimistPowerIdentifier, ArcaneBardTraditionIdentifier, ArcaneDancerTraditionIdentifier, ArcaneOrbEnchantmentIdentifier, ArmorIdentifier, AspectIdentifier, AttireEnchantmentIdentifier, AttributeIdentifier, BandageOrRemedyIdentifier, BannzeichenIdentifier, BeutelzauberIdentifier, BlessedTraditionIdentifier, BlessingIdentifier, BookIdentifier, BowlEnchantmentIdentifier, BrawlingSpecialAbilityIdentifier, CantripIdentifier, CauldronEnchantmentIdentifier, CeremonialItemIdentifier, CeremonialItemSpecialAbilityIdentifier, CeremonyIdentifier, ChronicleEnchantmentIdentifier, CloseCombatTechniqueIdentifier, ClothesIdentifier, ClothingPackageIdentifier, CombatSpecialAbilityIdentifier, CombatStyleSpecialAbilityIdentifier, CommandSpecialAbilityIdentifier, ContainerIdentifier, CultureIdentifier, CurseIdentifier, DaggerRitualIdentifier, DisadvantageIdentifier, DiseaseIdentifier, DominationRitualIdentifier, ElementIdentifier, ElixirIdentifier, ElvenMagicalSongIdentifier, EnhancementIdentifier, EquipmentOfBlessedOnesIdentifier, FamiliarSpecialAbilityIdentifier, FatePointSexSpecialAbilityIdentifier, FatePointSpecialAbilityIdentifier, FocusRuleIdentifier, FoolsHatEnchantmentIdentifier, GemOrPreciousStoneIdentifier, GeneralIdentifier, GeneralSpecialAbilityIdentifier, GeodeRitualIdentifier, GoblinRitualIdentifier, HaubenzauberIdentifier, HauerkettenzauberIdentifier, IlluminationLightSourceIdentifier, IlluminationRefillOrSupplyIdentifier, InstrumentEnchantmentIdentifier, JesterTrickIdentifier, JewelryIdentifier, KarmaSpecialAbilityIdentifier, KeulenzauberIdentifier, KrallenkettenzauberIdentifier, KristallkugelzauberIdentifier, LaboratoryIdentifier, LanguageIdentifier, LiebesspielzeugIdentifier, LiturgicalChantIdentifier, LiturgicalStyleSpecialAbilityIdentifier, LuxuryGoodIdentifier, LycantropicGiftIdentifier, MagicalArtifactIdentifier, MagicalDanceIdentifier, MagicalMelodyIdentifier, MagicalRuneIdentifier, MagicalSignIdentifier, MagicalSpecialAbilityIdentifier, MagicalTraditionIdentifier, MagicStyleSpecialAbilityIdentifier, MusicalInstrumentIdentifier, NewspaperIdentifier, OptionalRuleIdentifier, OrbEnchantmentIdentifier, OrienteeringAidIdentifier, PactGiftIdentifier, PatronIdentifier, PoisonIdentifier, PropertyIdentifier, ProtectiveWardingCircleSpecialAbilityIdentifier, RaceIdentifier, RangedCombatTechniqueIdentifier, RingEnchantmentIdentifier, RitualIdentifier, RopeOrChainIdentifier, SchweinetrommelzauberIdentifier, ScriptIdentifier, SermonIdentifier, SexPracticeIdentifier, SexSpecialAbilityIdentifier, SickleRitualIdentifier, SikaryanDrainSpecialAbilityIdentifier, SkillApplicationIdentifier, SkillGroupIdentifier, SkillIdentifier, SkillStyleSpecialAbilityIdentifier, SpellIdentifier, SpellSwordEnchantmentIdentifier, StaffEnchantmentIdentifier, StationeryIdentifier, TargetCategoryIdentifier, ThievesToolIdentifier, ToolOfTheTradeIdentifier, ToyEnchantmentIdentifier, TradeSecretIdentifier, TravelGearOrToolIdentifier, TrinkhornzauberIdentifier, VampiricGiftIdentifier, VehicleIdentifier, VisionIdentifier, WandEnchantmentIdentifier, WeaponAccessoryIdentifier, WeaponEnchantmentIdentifier, WeaponIdentifier, WorkingSupernaturalCreatureIdentifier, ZibiljaRitualIdentifier, } from "./_Identifier.js";
3
+ import { AdvancedCombatSpecialAbilityIdentifier, AdvancedKarmaSpecialAbilityIdentifier, AdvancedMagicalSpecialAbilityIdentifier, AdvancedSkillSpecialAbilityIdentifier, AdvantageIdentifier, AmmunitionIdentifier, AncestorGlyphIdentifier, AnimalCareIdentifier, AnimalIdentifier, AnimalShapeIdentifier, AnimalShapeSizeIdentifier, AnimistPowerIdentifier, ArcaneBardTraditionIdentifier, ArcaneDancerTraditionIdentifier, ArcaneOrbEnchantmentIdentifier, ArmorAccessoryIdentifier, ArmorIdentifier, AspectIdentifier, AttireEnchantmentIdentifier, AttributeIdentifier, BandageOrRemedyIdentifier, BannzeichenIdentifier, BeutelzauberIdentifier, BlessedTraditionIdentifier, BlessingIdentifier, BookIdentifier, BowlEnchantmentIdentifier, BrawlingSpecialAbilityIdentifier, CantripIdentifier, CauldronEnchantmentIdentifier, CeremonialItemIdentifier, CeremonialItemSpecialAbilityIdentifier, CeremonyIdentifier, ChronicleEnchantmentIdentifier, CloseCombatTechniqueIdentifier, ClothesIdentifier, ClothingPackageIdentifier, CombatSpecialAbilityIdentifier, CombatStyleSpecialAbilityIdentifier, CommandSpecialAbilityIdentifier, ContainerIdentifier, CultureIdentifier, CurseIdentifier, DaggerRitualIdentifier, DisadvantageIdentifier, DiseaseIdentifier, DominationRitualIdentifier, ElementIdentifier, ElixirIdentifier, ElvenMagicalSongIdentifier, EnhancementIdentifier, EquipmentOfBlessedOnesIdentifier, FamiliarSpecialAbilityIdentifier, FatePointSexSpecialAbilityIdentifier, FatePointSpecialAbilityIdentifier, FocusRuleIdentifier, FoolsHatEnchantmentIdentifier, GemOrPreciousStoneIdentifier, GeneralIdentifier, GeneralSpecialAbilityIdentifier, GeodeRitualIdentifier, GoblinRitualIdentifier, HaubenzauberIdentifier, HauerkettenzauberIdentifier, IlluminationLightSourceIdentifier, IlluminationRefillOrSupplyIdentifier, InstrumentEnchantmentIdentifier, JesterTrickIdentifier, JewelryIdentifier, KarmaSpecialAbilityIdentifier, KeulenzauberIdentifier, KrallenkettenzauberIdentifier, KristallkugelzauberIdentifier, LaboratoryIdentifier, LanguageIdentifier, LiebesspielzeugIdentifier, LiturgicalChantIdentifier, LiturgicalStyleSpecialAbilityIdentifier, LuxuryGoodIdentifier, LycantropicGiftIdentifier, MagicalArtifactIdentifier, MagicalDanceIdentifier, MagicalMelodyIdentifier, MagicalRuneIdentifier, MagicalSignIdentifier, MagicalSpecialAbilityIdentifier, MagicalTraditionIdentifier, MagicStyleSpecialAbilityIdentifier, MusicalInstrumentIdentifier, NewspaperIdentifier, OptionalRuleIdentifier, OrbEnchantmentIdentifier, OrienteeringAidIdentifier, PactGiftIdentifier, PatronIdentifier, PoisonIdentifier, PropertyIdentifier, ProtectiveWardingCircleSpecialAbilityIdentifier, RaceIdentifier, RangedCombatTechniqueIdentifier, RingEnchantmentIdentifier, RitualIdentifier, RopeOrChainIdentifier, SchweinetrommelzauberIdentifier, ScriptIdentifier, SermonIdentifier, SexPracticeIdentifier, SexSpecialAbilityIdentifier, SickleRitualIdentifier, SikaryanDrainSpecialAbilityIdentifier, SkillApplicationIdentifier, SkillGroupIdentifier, SkillIdentifier, SkillStyleSpecialAbilityIdentifier, SpellIdentifier, SpellSwordEnchantmentIdentifier, StaffEnchantmentIdentifier, StationeryIdentifier, TargetCategoryIdentifier, ThievesToolIdentifier, ToolOfTheTradeIdentifier, ToyEnchantmentIdentifier, TradeSecretIdentifier, TravelGearOrToolIdentifier, TrinkhornzauberIdentifier, VampiricGiftIdentifier, VehicleIdentifier, VisionIdentifier, WandEnchantmentIdentifier, WeaponAccessoryIdentifier, WeaponEnchantmentIdentifier, WeaponIdentifier, WorkingSupernaturalCreatureIdentifier, ZibiljaRitualIdentifier, } from "./_Identifier.js";
4
4
  export const ActivatableIdentifier = DB.Enum(import.meta.url, {
5
5
  name: "ActivatableIdentifier",
6
6
  values: () => ({
@@ -310,6 +310,7 @@ export const EquipmentIdentifier = DB.Enum(import.meta.url, {
310
310
  Animal: DB.EnumCase({ type: AnimalIdentifier() }),
311
311
  AnimalCare: DB.EnumCase({ type: AnimalCareIdentifier() }),
312
312
  Armor: DB.EnumCase({ type: ArmorIdentifier() }),
313
+ ArmorAccessory: DB.EnumCase({ type: ArmorAccessoryIdentifier() }),
313
314
  BandageOrRemedy: DB.EnumCase({ type: BandageOrRemedyIdentifier() }),
314
315
  Book: DB.EnumCase({ type: BookIdentifier() }),
315
316
  CeremonialItem: DB.EnumCase({ type: CeremonialItemIdentifier() }),
@@ -423,3 +423,27 @@ export declare const EnhancementPrerequisites: DB.TypeAlias<"EnhancementPrerequi
423
423
  }>, true>;
424
424
  }>, [T: DB.Param<"T", DB.Type>]>>>;
425
425
  }, [T: DB.Param<"T", DB.Type>]>>>, [T: DB.Param<"T", DB.Type>]>>, []>;
426
+ export declare const BookPrerequisites: DB.TypeAlias<"BookPrerequisites", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PlainPrerequisites", DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.Enum<"PrerequisitesElement", {
427
+ Single: DB.EnumCase<DB.TypeArgument<DB.Param<"T", DB.Type>>>;
428
+ Disjunction: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisitesDisjunction", DB.Object<{
429
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
430
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
431
+ Hide: DB.EnumCase<null>;
432
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
433
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
434
+ Standalone: DB.EnumCase<null>;
435
+ Connected: DB.EnumCase<null>;
436
+ }, []>>, false>;
437
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
438
+ replacement: DB.MemberDecl<DB.String, true>;
439
+ }>, true>;
440
+ }>, []>>>;
441
+ }, []>>, false>;
442
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
443
+ Group: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisiteGroup", DB.Object<{
444
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
445
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PrerequisiteGroupTranslation", {
446
+ text: DB.MemberDecl<DB.String, true>;
447
+ }>, true>;
448
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
449
+ }, [T: DB.Param<"T", DB.Type>]>>>, [T: DB.Param<"T", DB.Type>]>>, []>;