@optolith/database-schema 0.81.0 → 0.83.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,34 @@
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.83.0](https://github.com/Optolith/database-schema/compare/v0.82.0...v0.83.0) (2026-10-06)
6
+
7
+ ### ⚠ BREAKING CHANGES
8
+
9
+ * different duration translation for diseases
10
+ * various plant schema improvements
11
+
12
+ ### Features
13
+
14
+ * additional text for reduceable effects ([71743e8](https://github.com/Optolith/database-schema/commit/71743e82039d7aa0523c7ded646ad8d3f145ceed))
15
+ * various plant schema improvements ([c4cb673](https://github.com/Optolith/database-schema/commit/c4cb673685d2ae817ae5705d6b8625d7e80cc60f))
16
+
17
+ ### Bug Fixes
18
+
19
+ * different duration translation for diseases ([ef682b2](https://github.com/Optolith/database-schema/commit/ef682b28fe358b13f69250ec09c5607154754b3b))
20
+
21
+ ## [0.82.0](https://github.com/Optolith/database-schema/compare/v0.81.0...v0.82.0) (2026-10-06)
22
+
23
+ ### ⚠ BREAKING CHANGES
24
+
25
+ * allow more weapon values for talismans
26
+ * allow multiple different talisman activation cost
27
+
28
+ ### Features
29
+
30
+ * allow more weapon values for talismans ([b109d0f](https://github.com/Optolith/database-schema/commit/b109d0f90f9f9cdfa0f8e33cbacde44b2a8563ee))
31
+ * allow multiple different talisman activation cost ([89e5d14](https://github.com/Optolith/database-schema/commit/89e5d14d2faefac220ad43765de0cba1359ece9e))
32
+
5
33
  ## [0.81.0](https://github.com/Optolith/database-schema/compare/v0.80.0...v0.81.0) (2026-10-06)
6
34
 
7
35
  ### ⚠ BREAKING CHANGES
package/gen/types.d.ts CHANGED
@@ -964,6 +964,7 @@ export type TypeAliasMap = {
964
964
  TalismanActivationCost: TalismanActivationCost
965
965
  TalismanActivationDuration: TalismanActivationDuration
966
966
  TalismanActivationDurationExpression: TalismanActivationDurationExpression
967
+ TalismanCombatUse: TalismanCombatUse
967
968
  TalismanDamage: TalismanDamage
968
969
  TalismanMeleeWeapon: TalismanMeleeWeapon
969
970
  TalismanRangedWeapon: TalismanRangedWeapon
@@ -2745,6 +2746,7 @@ export interface Locale {
2745
2746
  "Progress": string
2746
2747
  "Incubation Time": string
2747
2748
  "Damage": string
2749
+ "Duration (Disease)": string
2748
2750
  "Causes": string
2749
2751
  "Treatment": string
2750
2752
  "Antidote": string
@@ -5846,6 +5848,11 @@ export interface Reduceable<Content> {
5846
5848
  * The reduced value. In the source, it's the text after the slash. Some entries may not have a reduced value, i.e. there is no slash with text after it. If the text after the slash is a dash, include it here as well.
5847
5849
  */
5848
5850
  reduced?: Content
5851
+
5852
+ /**
5853
+ * An additional text that applies regardless of the effect being reduced or not.
5854
+ */
5855
+ additonal?: string
5849
5856
  }
5850
5857
 
5851
5858
  export interface Poison {
@@ -6382,6 +6389,9 @@ export type ExpressionBasedPoisonTimeExpressionValue =
6382
6389
  | {
6383
6390
  kind: "CircleOfDamnation"
6384
6391
  }
6392
+ | {
6393
+ kind: "QualityLevels"
6394
+ }
6385
6395
 
6386
6396
  export type PoisonTimeUnit =
6387
6397
  | {
@@ -26798,6 +26808,9 @@ export interface PlantOccurrenceTranslation {
26798
26808
  }
26799
26809
 
26800
26810
  export type PlantOccurrenceTier =
26811
+ | {
26812
+ kind: "AllBiomes"
26813
+ }
26801
26814
  | {
26802
26815
  kind: "Biomes"
26803
26816
  Biomes: Biome_ID[]
@@ -27496,21 +27509,7 @@ export interface Talisman {
27496
27509
  */
27497
27510
  ap_value?: number
27498
27511
 
27499
- combatUse?: {
27500
- /**
27501
- * A list of stat blocks for each close combat technique this talisman can be used with.
27502
- */
27503
- melee_uses?: {
27504
- [closeCombatTechniqueId: string]: MeleeTalismanUse
27505
- }
27506
-
27507
- /**
27508
- * A list of stat blocks for each ranged combat technique this talisman can be used with.
27509
- */
27510
- ranged_uses?: {
27511
- [rangedCombatTechniqueId: string]: RangedTalismanUse
27512
- }
27513
- }
27512
+ combatUse?: TalismanCombatUse
27514
27513
 
27515
27514
  /**
27516
27515
  * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
@@ -27530,10 +27529,6 @@ export interface Talisman {
27530
27529
  */
27531
27530
  export type Talisman_ID = string
27532
27531
 
27533
- export type MeleeTalismanUse = TalismanMeleeWeapon
27534
-
27535
- export type RangedTalismanUse = TalismanRangedWeapon
27536
-
27537
27532
  export interface TalismanTranslation {
27538
27533
  /**
27539
27534
  * The talisman’s name.
@@ -27569,7 +27564,7 @@ export interface TalismanActivation {
27569
27564
  /**
27570
27565
  * The cost to activate the talisman.
27571
27566
  */
27572
- cost: TalismanActivationCost
27567
+ cost: TalismanActivationCost[]
27573
27568
 
27574
27569
  /**
27575
27570
  * The duration of how long the talisman will be active.
@@ -27612,6 +27607,60 @@ export type TalismanActivationDurationExpressionValue =
27612
27607
  kind: "QualityLevels"
27613
27608
  }
27614
27609
 
27610
+ export interface TalismanCombatUse {
27611
+ /**
27612
+ * The weight in kg.
27613
+ */
27614
+ weight: Weight
27615
+
27616
+ /**
27617
+ * A list of stat blocks for each close combat technique this talisman can be used with.
27618
+ */
27619
+ meleeUses?: {
27620
+ [closeCombatTechniqueId: string]: MeleeTalismanUse
27621
+ }
27622
+
27623
+ /**
27624
+ * A list of stat blocks for each ranged combat technique this talisman can be used with.
27625
+ */
27626
+ rangedUses?: {
27627
+ [rangedCombatTechniqueId: string]: RangedTalismanUse
27628
+ }
27629
+
27630
+ /**
27631
+ * All translations for the entry, identified by IETF language tag (BCP47).
27632
+ */
27633
+ translations?: {
27634
+ [localeId: string]: TalismanCombatUseTranslation
27635
+ }
27636
+ }
27637
+
27638
+ export type MeleeTalismanUse = TalismanMeleeWeapon
27639
+
27640
+ export type RangedTalismanUse = TalismanRangedWeapon
27641
+
27642
+ export interface TalismanCombatUseTranslation {
27643
+ /**
27644
+ * Note text.
27645
+ */
27646
+ note?: string
27647
+
27648
+ /**
27649
+ * Special rules text.
27650
+ */
27651
+ rules?: string
27652
+
27653
+ /**
27654
+ * The weapon advantage text.
27655
+ */
27656
+ advantage?: string
27657
+
27658
+ /**
27659
+ * The weapon disadvantage text.
27660
+ */
27661
+ disadvantage?: string
27662
+ }
27663
+
27615
27664
  export type TalismanMeleeWeapon = GenMeleeWeapon<TalismanDamage>
27616
27665
 
27617
27666
  export type TalismanDamage = MathOperation<TalismanDamageOption>
@@ -79,10 +79,12 @@ export declare const AnimalDisease: DB.Entity<"AnimalDisease", {
79
79
  damage: DB.MemberDecl<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"Reduceable", DB.Object<{
80
80
  default: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, true>;
81
81
  reduced: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, false>;
82
+ additonal: DB.MemberDecl<DB.String, false>;
82
83
  }>, [Content: DB.Param<"Content", DB.Type>]>>, true>;
83
84
  duration: DB.MemberDecl<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"Reduceable", DB.Object<{
84
85
  default: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, true>;
85
86
  reduced: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, false>;
87
+ additonal: DB.MemberDecl<DB.String, false>;
86
88
  }>, [Content: DB.Param<"Content", DB.Type>]>>, true>;
87
89
  special: DB.MemberDecl<DB.String, false>;
88
90
  treatment: DB.MemberDecl<DB.String, true>;
@@ -141,10 +141,12 @@ export declare const Disease: DB.Entity<"Disease", {
141
141
  damage: DB.MemberDecl<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"Reduceable", DB.Object<{
142
142
  default: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, true>;
143
143
  reduced: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, false>;
144
+ additonal: DB.MemberDecl<DB.String, false>;
144
145
  }>, [Content: DB.Param<"Content", DB.Type>]>>, true>;
145
146
  duration: DB.MemberDecl<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"Reduceable", DB.Object<{
146
147
  default: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, true>;
147
148
  reduced: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, false>;
149
+ additonal: DB.MemberDecl<DB.String, false>;
148
150
  }>, [Content: DB.Param<"Content", DB.Type>]>>, true>;
149
151
  special: DB.MemberDecl<DB.String, false>;
150
152
  treatment: DB.MemberDecl<DB.String, true>;
@@ -1607,6 +1607,7 @@ export declare const Locale: DB.Entity<"Locale", {
1607
1607
  Progress: null;
1608
1608
  "Incubation Time": null;
1609
1609
  Damage: null;
1610
+ "Duration (Disease)": null;
1610
1611
  Causes: null;
1611
1612
  Treatment: null;
1612
1613
  Antidote: null;
@@ -1654,6 +1654,7 @@ export const Locale = DB.Entity(import.meta.url, {
1654
1654
  "Progress": null,
1655
1655
  "Incubation Time": null,
1656
1656
  "Damage": null,
1657
+ "Duration (Disease)": null,
1657
1658
  "Causes": null,
1658
1659
  "Treatment": null,
1659
1660
  "Antidote": null,
@@ -10,10 +10,10 @@ export declare const Talisman: DB.Entity<"Talisman", {
10
10
  PowerfulTalisman: DB.EnumCase<null>;
11
11
  }, []>>, false>;
12
12
  activation: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"TalismanActivation", DB.Object<{
13
- cost: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"TalismanActivationCost", DB.Object<{
13
+ cost: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"TalismanActivationCost", DB.Object<{
14
14
  value: DB.MemberDecl<DB.Integer, true>;
15
15
  unit: DB.MemberDecl<DB.ReferenceIdentifier, true>;
16
- }>, []>>, true>;
16
+ }>, []>>>, true>;
17
17
  duration: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"TalismanActivationDuration", DB.Object<{
18
18
  value: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"TalismanActivationDurationExpression", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], MathOperation>, []>>, true>;
19
19
  unit: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DurationUnit", {
@@ -42,8 +42,9 @@ export declare const Talisman: DB.Entity<"Talisman", {
42
42
  }>, []>>, true>;
43
43
  }>, []>>, false>;
44
44
  ap_value: DB.MemberDecl<DB.Integer, false>;
45
- combatUse: DB.MemberDecl<DB.Object<{
46
- melee_uses: DB.MemberDecl<DB.NestedEntityMap<string, {
45
+ combatUse: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"TalismanCombatUse", DB.Object<{
46
+ weight: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Weight", DB.Float, []>>, true>;
47
+ meleeUses: DB.MemberDecl<DB.NestedEntityMap<string, {
47
48
  damage: DB.MemberDecl<DB.TypeArgument<DB.Param<"Damage", DB.Type>>, true>;
48
49
  damage_threshold: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"PrimaryAttributeDamageThreshold", {
49
50
  Default: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"DefaultPrimaryAttributeDamageThreshold", DB.Object<{
@@ -71,7 +72,7 @@ export declare const Talisman: DB.Entity<"Talisman", {
71
72
  is_two_handed_weapon: DB.MemberDecl<DB.Boolean, true>;
72
73
  is_improvised_weapon: DB.MemberDecl<DB.Boolean, true>;
73
74
  }>, false>;
74
- ranged_uses: DB.MemberDecl<DB.NestedEntityMap<string, {
75
+ rangedUses: DB.MemberDecl<DB.NestedEntityMap<string, {
75
76
  damage: DB.MemberDecl<DB.TypeArgument<DB.Param<"Damage", DB.Type>>, true>;
76
77
  reload_time: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"ReloadTime", DB.Object<{
77
78
  value: DB.MemberDecl<DB.Integer, true>;
@@ -88,7 +89,13 @@ export declare const Talisman: DB.Entity<"Talisman", {
88
89
  length: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Length", DB.Integer, []>>, false>;
89
90
  is_improvised_weapon: DB.MemberDecl<DB.Boolean, true>;
90
91
  }>, false>;
91
- }>, false>;
92
+ translations: DB.MemberDecl<DB.NestedEntityMap<"TalismanCombatUseTranslation", {
93
+ note: DB.MemberDecl<DB.String, false>;
94
+ rules: DB.MemberDecl<DB.String, false>;
95
+ advantage: DB.MemberDecl<DB.String, false>;
96
+ disadvantage: DB.MemberDecl<DB.String, false>;
97
+ }>, false>;
98
+ }>, []>>, false>;
92
99
  src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
93
100
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
94
101
  occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
@@ -4,6 +4,7 @@ import { Dice } from "./_Dice.js";
4
4
  import { BlessedTraditionIdentifier, DerivedCharacteristicIdentifier } from "./_Identifier.js";
5
5
  import { MathOperation } from "./_MathExpression.js";
6
6
  import { CloseCombatTechnique, RangedCombatTechnique } from "./CombatTechnique.js";
7
+ import { Weight } from "./equipment/item/_Item.js";
7
8
  import { GenMeleeWeapon } from "./equipment/item/_MeleeWeapon.js";
8
9
  import { GenRangedWeapon } from "./equipment/item/_RangedWeapon.js";
9
10
  import { checkWeaponCombatTechniqueIntegrity } from "./equipment/item/_Weapon.js";
@@ -31,28 +32,7 @@ export const Talisman = DB.Entity(import.meta.url, {
31
32
  type: DB.Integer({ minimum: 5, multipleOf: 5 }),
32
33
  }),
33
34
  combatUse: DB.Optional({
34
- type: DB.Object({
35
- melee_uses: DB.Optional({
36
- comment: "A list of stat blocks for each close combat technique this talisman can be used with.",
37
- type: DB.NestedEntityMap({
38
- name: "MeleeTalismanUse",
39
- namePlural: "MeleeTalismanUses",
40
- secondaryEntity: CloseCombatTechnique,
41
- type: DB.IncludeIdentifier(TalismanMeleeWeapon),
42
- minProperties: 1,
43
- }),
44
- }),
45
- ranged_uses: DB.Optional({
46
- comment: "A list of stat blocks for each ranged combat technique this talisman can be used with.",
47
- type: DB.NestedEntityMap({
48
- name: "RangedTalismanUse",
49
- namePlural: "RangedTalismanUses",
50
- secondaryEntity: RangedCombatTechnique,
51
- type: DB.IncludeIdentifier(TalismanRangedWeapon),
52
- minProperties: 1,
53
- }),
54
- }),
55
- }, { minProperties: 1 }),
35
+ type: DB.IncludeIdentifier(TalismanCombatUse),
56
36
  }),
57
37
  src,
58
38
  translations: NestedTranslationMap(DB.Required, "Talisman", DB.Object({
@@ -84,6 +64,53 @@ export const Talisman = DB.Entity(import.meta.url, {
84
64
  })
85
65
  : [],
86
66
  });
67
+ const TalismanCombatUse = DB.TypeAlias(import.meta.url, {
68
+ name: "TalismanCombatUse",
69
+ type: () => DB.Object({
70
+ weight: DB.Required({
71
+ comment: "The weight in kg.",
72
+ type: DB.IncludeIdentifier(Weight),
73
+ }),
74
+ meleeUses: DB.Optional({
75
+ comment: "A list of stat blocks for each close combat technique this talisman can be used with.",
76
+ type: DB.NestedEntityMap({
77
+ name: "MeleeTalismanUse",
78
+ namePlural: "MeleeTalismanUses",
79
+ secondaryEntity: CloseCombatTechnique,
80
+ type: DB.IncludeIdentifier(TalismanMeleeWeapon),
81
+ minProperties: 1,
82
+ }),
83
+ }),
84
+ rangedUses: DB.Optional({
85
+ comment: "A list of stat blocks for each ranged combat technique this talisman can be used with.",
86
+ type: DB.NestedEntityMap({
87
+ name: "RangedTalismanUse",
88
+ namePlural: "RangedTalismanUses",
89
+ secondaryEntity: RangedCombatTechnique,
90
+ type: DB.IncludeIdentifier(TalismanRangedWeapon),
91
+ minProperties: 1,
92
+ }),
93
+ }),
94
+ translations: NestedTranslationMap(DB.Optional, "TalismanCombatUse", DB.Object({
95
+ note: DB.Optional({
96
+ comment: "Note text.",
97
+ type: DB.String({ minLength: 1, markdown: "block" }),
98
+ }),
99
+ rules: DB.Optional({
100
+ comment: "Special rules text.",
101
+ type: DB.String({ minLength: 1, markdown: "block" }),
102
+ }),
103
+ advantage: DB.Optional({
104
+ comment: "The weapon advantage text.",
105
+ type: DB.String({ minLength: 1, markdown: "block" }),
106
+ }),
107
+ disadvantage: DB.Optional({
108
+ comment: "The weapon disadvantage text.",
109
+ type: DB.String({ minLength: 1, markdown: "block" }),
110
+ }),
111
+ }, { minProperties: 1 })),
112
+ }),
113
+ });
87
114
  const TalismanMeleeWeapon = DB.TypeAlias(import.meta.url, {
88
115
  name: "TalismanMeleeWeapon",
89
116
  type: () => DB.GenIncludeIdentifier(GenMeleeWeapon, [DB.IncludeIdentifier(TalismanDamage)]),
@@ -119,7 +146,7 @@ const TalismanActivation = DB.TypeAlias(import.meta.url, {
119
146
  type: () => DB.Object({
120
147
  cost: DB.Required({
121
148
  comment: "The cost to activate the talisman.",
122
- type: DB.IncludeIdentifier(TalismanActivationCost),
149
+ type: DB.Array(DB.IncludeIdentifier(TalismanActivationCost), { minItems: 1 }),
123
150
  }),
124
151
  duration: DB.Required({
125
152
  comment: "The duration of how long the talisman will be active.",
@@ -38,6 +38,7 @@ export declare const cause: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.T
38
38
  export declare const Reduceable: DB.TypeAlias<"Reduceable", DB.Object<{
39
39
  default: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, true>;
40
40
  reduced: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, false>;
41
+ additonal: DB.MemberDecl<DB.String, false>;
41
42
  }>, [Content: DB.Param<"Content", DB.Type>]>;
42
43
  export declare const DiseaseTranslation: DB.Object<{
43
44
  name: DB.MemberDecl<DB.String, true>;
@@ -51,10 +52,12 @@ export declare const DiseaseTranslation: DB.Object<{
51
52
  damage: DB.MemberDecl<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"Reduceable", DB.Object<{
52
53
  default: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, true>;
53
54
  reduced: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, false>;
55
+ additonal: DB.MemberDecl<DB.String, false>;
54
56
  }>, [Content: DB.Param<"Content", DB.Type>]>>, true>;
55
57
  duration: DB.MemberDecl<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"Reduceable", DB.Object<{
56
58
  default: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, true>;
57
59
  reduced: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, false>;
60
+ additonal: DB.MemberDecl<DB.String, false>;
58
61
  }>, [Content: DB.Param<"Content", DB.Type>]>>, true>;
59
62
  special: DB.MemberDecl<DB.String, false>;
60
63
  treatment: DB.MemberDecl<DB.String, true>;
@@ -100,6 +100,10 @@ This streamlines the wording for diseases and poison by using a unified wording
100
100
  comment: "The reduced value. In the source, it's the text after the slash. Some entries may not have a reduced value, i.e. there is no slash with text after it. If the text after the slash is a dash, include it here as well.",
101
101
  type: DB.TypeArgument(Content),
102
102
  }),
103
+ additonal: DB.Optional({
104
+ comment: "An additional text that applies regardless of the effect being reduced or not.",
105
+ type: DB.String({ minLength: 1, markdown: "inline" }),
106
+ }),
103
107
  }),
104
108
  });
105
109
  export const DiseaseTranslation = DB.Object({
@@ -12,6 +12,7 @@ export declare const Plant: DB.Entity<"Plant", {
12
12
  occurences: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PlantOccurences", DB.Object<{
13
13
  items: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PlantOccurrence", DB.Object<{
14
14
  regions: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"PlantOccurrenceTier", {
15
+ AllBiomes: DB.EnumCase<null>;
15
16
  Biomes: DB.EnumCase<DB.Array<DB.ReferenceIdentifier>>;
16
17
  SubBiomes: DB.EnumCase<DB.Array<DB.ReferenceIdentifier>>;
17
18
  BotanicRegions: DB.EnumCase<DB.Array<DB.ReferenceIdentifier>>;
@@ -123,6 +123,7 @@ const PlantOccurrence = DB.TypeAlias(import.meta.url, {
123
123
  const PlantOccurrenceTier = DB.Enum(import.meta.url, {
124
124
  name: "PlantOccurrenceTier",
125
125
  values: () => ({
126
+ AllBiomes: DB.EnumCase({ type: null }),
126
127
  Biomes: DB.EnumCase({
127
128
  type: DB.Array(BiomeIdentifier(), { minItems: 1 }),
128
129
  }),
@@ -316,6 +316,7 @@ export declare const Poison: DB.Entity<"Poison", {
316
316
  duration: DB.MemberDecl<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"Reduceable", DB.Object<{
317
317
  default: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, true>;
318
318
  reduced: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, false>;
319
+ additonal: DB.MemberDecl<DB.String, false>;
319
320
  }>, [Content: DB.Param<"Content", DB.Type>]>>, true>;
320
321
  value: DB.MemberDecl<DB.Integer, false>;
321
322
  cost: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"PoisonCost", {
@@ -394,6 +395,7 @@ export declare const Poison: DB.Entity<"Poison", {
394
395
  effect: DB.MemberDecl<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"Reduceable", DB.Object<{
395
396
  default: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, true>;
396
397
  reduced: DB.MemberDecl<DB.TypeArgument<DB.Param<"Content", DB.Type>>, false>;
398
+ additonal: DB.MemberDecl<DB.String, false>;
397
399
  }>, [Content: DB.Param<"Content", DB.Type>]>>, true>;
398
400
  notes: DB.MemberDecl<DB.String, false>;
399
401
  errata: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Errata", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"Erratum", DB.Object<{
@@ -429,6 +431,7 @@ export declare const ExpressionBasedPoisonTimeExpressionValue: DB.Enum<"Expressi
429
431
  sides: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"DieType", DB.Integer, []>>, true>;
430
432
  }>, []>>>;
431
433
  CircleOfDamnation: DB.EnumCase<null>;
434
+ QualityLevels: DB.EnumCase<null>;
432
435
  }, []>;
433
436
  export declare const IndefinitePoisonTime: DB.TypeAlias<"IndefinitePoisonTime", DB.Object<{
434
437
  translations: DB.MemberDecl<DB.NestedEntityMap<"IndefinitePoisonTimeTranslation", {
@@ -175,6 +175,7 @@ export const ExpressionBasedPoisonTimeExpressionValue = DB.Enum(import.meta.url,
175
175
  Constant: DB.EnumCase({ type: DB.Integer({ minimum: 1 }) }),
176
176
  Dice: DB.EnumCase({ type: DB.IncludeIdentifier(Dice) }),
177
177
  CircleOfDamnation: DB.EnumCase({ type: null }),
178
+ QualityLevels: DB.EnumCase({ type: null }),
178
179
  }),
179
180
  });
180
181
  const PoisonTimeUnit = DB.Enum(import.meta.url, {
@@ -18,6 +18,10 @@ export const BotanicRegion = DB.Entity(import.meta.url, {
18
18
  }),
19
19
  parentReferenceKey: "parent",
20
20
  instanceDisplayName: {},
21
+ instanceDisplayNameCustomizer: ({ instance, instanceDisplayName, instanceDisplayNameLocaleId, getDisplayNameForInstanceId, }) => ({
22
+ name: `${getDisplayNameForInstanceId("SubBiome", instance.parent)?.name ?? ""} — ${instanceDisplayName}`,
23
+ localeId: instanceDisplayNameLocaleId,
24
+ }),
21
25
  uniqueConstraints: [
22
26
  [
23
27
  {
@@ -22,10 +22,19 @@ export const SubBiome = DB.Entity(import.meta.url, {
22
22
  }),
23
23
  parentReferenceKey: "parent",
24
24
  instanceDisplayName: {},
25
+ instanceDisplayNameCustomizer: ({ instance, instanceDisplayName, instanceDisplayNameLocaleId, getDisplayNameForInstanceId, }) => ({
26
+ name: `${getDisplayNameForInstanceId("Biome", instance.parent)?.name ?? ""} — ${instanceDisplayName}`,
27
+ localeId: instanceDisplayNameLocaleId,
28
+ }),
25
29
  uniqueConstraints: [
26
- {
27
- entityMapKeyPath: "translations",
28
- keyPathInEntityMap: "name",
29
- },
30
+ [
31
+ {
32
+ keyPath: "parent",
33
+ },
34
+ {
35
+ entityMapKeyPath: "translations",
36
+ keyPathInEntityMap: "name",
37
+ },
38
+ ],
30
39
  ],
31
40
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optolith/database-schema",
3
- "version": "0.81.0",
3
+ "version": "0.83.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",