optolith-database-schema 0.33.0 → 0.34.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,19 @@
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.34.0](https://github.com/elyukai/optolith-database-schema/compare/v0.33.0...v0.34.0) (2026-03-08)
6
+
7
+
8
+ ### ⚠ BREAKING CHANGES
9
+
10
+ * define attribute and skill group colors
11
+ * atomic specification of how an optional rule influences game complexity
12
+
13
+ ### Features
14
+
15
+ * atomic specification of how an optional rule influences game complexity ([b2f1c5d](https://github.com/elyukai/optolith-database-schema/commit/b2f1c5dfd64777cb083da4bb1964ad4a3e219e8b))
16
+ * define attribute and skill group colors ([8aedafb](https://github.com/elyukai/optolith-database-schema/commit/8aedafb8136439fa9a1011ea94ee2f301f0d6f64))
17
+
5
18
  ## [0.33.0](https://github.com/elyukai/optolith-database-schema/compare/v0.32.0...v0.33.0) (2026-02-25)
6
19
 
7
20
 
package/gen/types.d.ts CHANGED
@@ -225,6 +225,7 @@ export type EnumMap = {
225
225
  ArcaneEnergyCostByLevelStyle: ArcaneEnergyCostByLevelStyle
226
226
  ArcaneTraditionPrerequisiteGroup: ArcaneTraditionPrerequisiteGroup
227
227
  ArmorComplexity: ArmorComplexity
228
+ AttributeColor: AttributeColor
228
229
  AutomaticEntryAction: AutomaticEntryAction
229
230
  AutomaticEntryTarget: AutomaticEntryTarget
230
231
  AutomaticEntryTargetSelectionList: AutomaticEntryTargetSelectionList
@@ -258,6 +259,7 @@ export type EnumMap = {
258
259
  CommonProfessionConstraintsOperation: CommonProfessionConstraintsOperation
259
260
  CommonProfessions: CommonProfessions
260
261
  Complexity: Complexity
262
+ ComplexityInfluence: ComplexityInfluence
261
263
  ContentNode: ContentNode
262
264
  CoreRuleDerivableContentIdentifier: CoreRuleDerivableContentIdentifier
263
265
  Cost: Cost
@@ -296,6 +298,7 @@ export type EnumMap = {
296
298
  GeodeRitualDuration: GeodeRitualDuration
297
299
  GeodeRitualPrerequisiteGroup: GeodeRitualPrerequisiteGroup
298
300
  GeodeRitualRange: GeodeRitualRange
301
+ GradientColor: GradientColor
299
302
  HitZone: HitZone
300
303
  ImprovementCost: ImprovementCost
301
304
  IndefiniteArcaneEnergyCostModifierArithmetic: IndefiniteArcaneEnergyCostModifierArithmetic
@@ -3667,6 +3670,11 @@ export interface Attribute {
3667
3670
  */
3668
3671
  position: number
3669
3672
 
3673
+ /**
3674
+ * The display color of the attribute.
3675
+ */
3676
+ color: AttributeColor
3677
+
3670
3678
  /**
3671
3679
  * All translations for the entry, identified by IETF language tag (BCP47).
3672
3680
  */
@@ -3697,6 +3705,35 @@ export interface AttributeTranslation {
3697
3705
  description: string
3698
3706
  }
3699
3707
 
3708
+ /**
3709
+ * A display color for an attribute.
3710
+ */
3711
+ export type AttributeColor =
3712
+ | {
3713
+ kind: "Red"
3714
+ }
3715
+ | {
3716
+ kind: "Purple"
3717
+ }
3718
+ | {
3719
+ kind: "Green"
3720
+ }
3721
+ | {
3722
+ kind: "Black"
3723
+ }
3724
+ | {
3725
+ kind: "Yellow"
3726
+ }
3727
+ | {
3728
+ kind: "Blue"
3729
+ }
3730
+ | {
3731
+ kind: "White"
3732
+ }
3733
+ | {
3734
+ kind: "Orange"
3735
+ }
3736
+
3700
3737
  /**
3701
3738
  * The skill’s applications
3702
3739
  */
@@ -3783,6 +3820,11 @@ export interface SkillGroup {
3783
3820
  */
3784
3821
  check: SkillCheck
3785
3822
 
3823
+ /**
3824
+ * The display color of the skill group.
3825
+ */
3826
+ color: GradientColor
3827
+
3786
3828
  /**
3787
3829
  * All translations for the entry, identified by IETF language tag (BCP47).
3788
3830
  */
@@ -3808,6 +3850,29 @@ export interface SkillGroupTranslation {
3808
3850
  longName: string
3809
3851
  }
3810
3852
 
3853
+ /**
3854
+ * A display color for entries that have a certain color as a gradient in the header of their box in the official publications.
3855
+ */
3856
+ export type GradientColor =
3857
+ | {
3858
+ kind: "TribalTeal"
3859
+ }
3860
+ | {
3861
+ kind: "OldRed"
3862
+ }
3863
+ | {
3864
+ kind: "Verdigris"
3865
+ }
3866
+ | {
3867
+ kind: "Gaia"
3868
+ }
3869
+ | {
3870
+ kind: "SanMarino"
3871
+ }
3872
+ | {
3873
+ kind: "LightHarvestGold"
3874
+ }
3875
+
3811
3876
  /**
3812
3877
  * The publications where you can find the entry.
3813
3878
  */
@@ -7065,6 +7130,11 @@ export interface OptionalRule {
7065
7130
  */
7066
7131
  isMissingImplementation: boolean
7067
7132
 
7133
+ /**
7134
+ * How this optional rule influences the complexity of the game.
7135
+ */
7136
+ complexityInfluence: ComplexityInfluence
7137
+
7068
7138
  prerequisites?: RulePrerequisites
7069
7139
 
7070
7140
  /**
@@ -7104,6 +7174,20 @@ export interface OptionalRuleTranslation {
7104
7174
  errata?: Errata
7105
7175
  }
7106
7176
 
7177
+ /**
7178
+ * How this optional rule influences the complexity of the game.
7179
+ */
7180
+ export type ComplexityInfluence =
7181
+ | {
7182
+ kind: "Less"
7183
+ }
7184
+ | {
7185
+ kind: "Unchanged"
7186
+ }
7187
+ | {
7188
+ kind: "More"
7189
+ }
7190
+
7107
7191
  /**
7108
7192
  * The effect description may be either a plain text or a text that is divided by a list of effects for each quality level. It may also be a list for each two quality levels.
7109
7193
  */
@@ -1,6 +1,16 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  export declare const Attribute: DB.Entity<"Attribute", {
3
3
  position: DB.MemberDecl<DB.Integer, true>;
4
+ color: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"AttributeColor", {
5
+ Red: DB.EnumCase<null>;
6
+ Purple: DB.EnumCase<null>;
7
+ Green: DB.EnumCase<null>;
8
+ Black: DB.EnumCase<null>;
9
+ Yellow: DB.EnumCase<null>;
10
+ Blue: DB.EnumCase<null>;
11
+ White: DB.EnumCase<null>;
12
+ Orange: DB.EnumCase<null>;
13
+ }, []>>, true>;
4
14
  translations: DB.MemberDecl<DB.NestedEntityMap<"AttributeTranslation", {
5
15
  name: DB.MemberDecl<DB.String, true>;
6
16
  abbreviation: DB.MemberDecl<DB.String, true>;
@@ -1,5 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  import { NestedTranslationMap } from "./Locale.js";
3
+ import { AttributeColor } from "./_Color.js";
3
4
  export const Attribute = DB.Entity(import.meta.url, {
4
5
  name: "Attribute",
5
6
  namePlural: "Attributes",
@@ -9,6 +10,10 @@ export const Attribute = DB.Entity(import.meta.url, {
9
10
  comment: "The position of the attribute in lists. This has to be a unique value.",
10
11
  type: DB.Integer({ minimum: 0 }),
11
12
  }),
13
+ color: DB.Required({
14
+ comment: "The display color of the attribute.",
15
+ type: DB.IncludeIdentifier(AttributeColor),
16
+ }),
12
17
  translations: NestedTranslationMap(DB.Required, "Attribute", DB.Object({
13
18
  name: DB.Required({
14
19
  comment: "The attribute’s name.",
@@ -2,6 +2,14 @@ import * as DB from "tsondb/schema/dsl";
2
2
  export declare const SkillGroup: DB.Entity<"SkillGroup", {
3
3
  position: DB.MemberDecl<DB.Integer, true>;
4
4
  check: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"SkillCheck", DB.Array<DB.ReferenceIdentifier>, []>>, true>;
5
+ color: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"GradientColor", {
6
+ TribalTeal: DB.EnumCase<null>;
7
+ OldRed: DB.EnumCase<null>;
8
+ Verdigris: DB.EnumCase<null>;
9
+ Gaia: DB.EnumCase<null>;
10
+ SanMarino: DB.EnumCase<null>;
11
+ LightHarvestGold: DB.EnumCase<null>;
12
+ }, []>>, true>;
5
13
  translations: DB.MemberDecl<DB.NestedEntityMap<"SkillGroupTranslation", {
6
14
  name: DB.MemberDecl<DB.String, true>;
7
15
  longName: DB.MemberDecl<DB.String, true>;
@@ -1,4 +1,5 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
+ import { GradientColor } from "./_Color.js";
2
3
  import { SkillCheck } from "./_SkillCheck.js";
3
4
  import { NestedTranslationMap } from "./Locale.js";
4
5
  export const SkillGroup = DB.Entity(import.meta.url, {
@@ -13,6 +14,10 @@ export const SkillGroup = DB.Entity(import.meta.url, {
13
14
  comment: "The skill group’s skill check attributes",
14
15
  type: DB.IncludeIdentifier(SkillCheck),
15
16
  }),
17
+ color: DB.Required({
18
+ comment: "The display color of the skill group.",
19
+ type: DB.IncludeIdentifier(GradientColor),
20
+ }),
16
21
  translations: NestedTranslationMap(DB.Required, "SkillGroup", DB.Object({
17
22
  name: DB.Required({
18
23
  comment: "The skill group’s name.",
@@ -0,0 +1,19 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export declare const AttributeColor: DB.Enum<"AttributeColor", {
3
+ Red: DB.EnumCase<null>;
4
+ Purple: DB.EnumCase<null>;
5
+ Green: DB.EnumCase<null>;
6
+ Black: DB.EnumCase<null>;
7
+ Yellow: DB.EnumCase<null>;
8
+ Blue: DB.EnumCase<null>;
9
+ White: DB.EnumCase<null>;
10
+ Orange: DB.EnumCase<null>;
11
+ }, []>;
12
+ export declare const GradientColor: DB.Enum<"GradientColor", {
13
+ TribalTeal: DB.EnumCase<null>;
14
+ OldRed: DB.EnumCase<null>;
15
+ Verdigris: DB.EnumCase<null>;
16
+ Gaia: DB.EnumCase<null>;
17
+ SanMarino: DB.EnumCase<null>;
18
+ LightHarvestGold: DB.EnumCase<null>;
19
+ }, []>;
@@ -0,0 +1,27 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export const AttributeColor = DB.Enum(import.meta.url, {
3
+ name: "AttributeColor",
4
+ comment: "A display color for an attribute.",
5
+ values: () => ({
6
+ Red: DB.EnumCase({ type: null }),
7
+ Purple: DB.EnumCase({ type: null }),
8
+ Green: DB.EnumCase({ type: null }),
9
+ Black: DB.EnumCase({ type: null }),
10
+ Yellow: DB.EnumCase({ type: null }),
11
+ Blue: DB.EnumCase({ type: null }),
12
+ White: DB.EnumCase({ type: null }),
13
+ Orange: DB.EnumCase({ type: null }),
14
+ }),
15
+ });
16
+ export const GradientColor = DB.Enum(import.meta.url, {
17
+ name: "GradientColor",
18
+ comment: "A display color for entries that have a certain color as a gradient in the header of their box in the official publications.",
19
+ values: () => ({
20
+ TribalTeal: DB.EnumCase({ type: null }), // HEX #507471 / CMYK 55 13 33 48
21
+ OldRed: DB.EnumCase({ type: null }), // HEX #8c3537 / CMYK 51 91 81 6
22
+ Verdigris: DB.EnumCase({ type: null }), // HEX #5b6235 / CMYK 70 53 91 17
23
+ Gaia: DB.EnumCase({ type: null }), // HEX #62934b / CMYK 64 17 82 13
24
+ SanMarino: DB.EnumCase({ type: null }), // HEX #4f70a8 / CMYK 75 53 10 2
25
+ LightHarvestGold: DB.EnumCase({ type: null }), // HEX #dbb578 / CMYK 9 26 56 9
26
+ }),
27
+ });
@@ -1,6 +1,11 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  export declare const OptionalRule: DB.Entity<"OptionalRule", {
3
3
  isMissingImplementation: DB.MemberDecl<DB.Boolean, true>;
4
+ complexityInfluence: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ComplexityInfluence", {
5
+ Less: DB.EnumCase<null>;
6
+ Unchanged: DB.EnumCase<null>;
7
+ More: DB.EnumCase<null>;
8
+ }, []>>, true>;
4
9
  prerequisites: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RulePrerequisites", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PlainPrerequisites", DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.Enum<"PrerequisitesElement", {
5
10
  Single: DB.EnumCase<DB.TypeArgument<DB.Param<"T", DB.Type>>>;
6
11
  Disjunction: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisitesDisjunction", DB.Object<{
@@ -11,6 +11,10 @@ export const OptionalRule = DB.Entity(import.meta.url, {
11
11
  comment: "Has the optional rule not been implemented in Optolith yet? This is also true if the optional rule does not (currently) apply to any Optolith feature.",
12
12
  type: DB.Boolean(),
13
13
  }),
14
+ complexityInfluence: DB.Required({
15
+ comment: "How this optional rule influences the complexity of the game.",
16
+ type: DB.IncludeIdentifier(ComplexityInfluence),
17
+ }),
14
18
  prerequisites: DB.Optional({
15
19
  type: DB.IncludeIdentifier(RulePrerequisites),
16
20
  }),
@@ -41,3 +45,15 @@ export const OptionalRule = DB.Entity(import.meta.url, {
41
45
  },
42
46
  ],
43
47
  });
48
+ const ComplexityInfluence = DB.Enum(import.meta.url, {
49
+ name: "ComplexityInfluence",
50
+ comment: "How this optional rule influences the complexity of the game.",
51
+ values: () => ({
52
+ Less: DB.EnumCase({ comment: "The optional rule makes the game less complex.", type: null }),
53
+ Unchanged: DB.EnumCase({
54
+ comment: "The optional rule does not change the complexity of the game.",
55
+ type: null,
56
+ }),
57
+ More: DB.EnumCase({ comment: "The optional rule makes the game more complex.", type: null }),
58
+ }),
59
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "optolith-database-schema",
3
- "version": "0.33.0",
3
+ "version": "0.34.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",