optolith-database-schema 0.21.0 → 0.21.1

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,20 @@
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.21.1](https://github.com/elyukai/optolith-database-schema/compare/v0.21.0...v0.21.1) (2025-11-27)
6
+
7
+
8
+ ### Features
9
+
10
+ * add trade secret option for diseases ([da69a79](https://github.com/elyukai/optolith-database-schema/commit/da69a793a65e7737505c4ff140f6be2132119d6c))
11
+ * add weight and complexity options to vehicles ([bfbf0c0](https://github.com/elyukai/optolith-database-schema/commit/bfbf0c017f0e7bd08bf0ebebe189a862796831ce)), closes [#59](https://github.com/elyukai/optolith-database-schema/issues/59)
12
+ * magical artifacts may define complexity and combat uses ([0a86d73](https://github.com/elyukai/optolith-database-schema/commit/0a86d7396b2fddd977e214ab8be283dd31353292)), closes [#62](https://github.com/elyukai/optolith-database-schema/issues/62)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * ranged weapons may have a range of 0 ([fb34438](https://github.com/elyukai/optolith-database-schema/commit/fb3443816195b3079362d07c9bb3a261f98609c8)), closes [#63](https://github.com/elyukai/optolith-database-schema/issues/63)
18
+
5
19
  ## [0.21.0](https://github.com/elyukai/optolith-database-schema/compare/v0.20.6...v0.21.0) (2025-11-21)
6
20
 
7
21
 
package/gen/types.d.ts CHANGED
@@ -19241,6 +19241,11 @@ export interface Disease {
19241
19241
  */
19242
19242
  cause: Cause[]
19243
19243
 
19244
+ /**
19245
+ * AP value and prerequisites of the disease’s trade secret.
19246
+ */
19247
+ trade_secret?: RecipeTradeSecret
19248
+
19244
19249
  /**
19245
19250
  * All translations for the entry, identified by IETF language tag (BCP47).
19246
19251
  */
@@ -19308,6 +19313,18 @@ export interface DiseaseTranslation {
19308
19313
  errata?: Errata
19309
19314
  }
19310
19315
 
19316
+ export interface RecipeTradeSecret {
19317
+ /**
19318
+ * The AP value of the trade secret.
19319
+ */
19320
+ ap_value: number
19321
+
19322
+ /**
19323
+ * The prerequisites of the trade secret, if any.
19324
+ */
19325
+ prerequisites?: PlainGeneralPrerequisites
19326
+ }
19327
+
19311
19328
  export interface Elixir {
19312
19329
  /**
19313
19330
  * Effect type(s) of an alchemical poison.
@@ -19428,18 +19445,6 @@ export type LaboratoryLevel =
19428
19445
  kind: "AlchemistsLaboratory"
19429
19446
  }
19430
19447
 
19431
- export interface RecipeTradeSecret {
19432
- /**
19433
- * The AP value of the trade secret.
19434
- */
19435
- ap_value: number
19436
-
19437
- /**
19438
- * The prerequisites of the trade secret, if any.
19439
- */
19440
- prerequisites?: PlainGeneralPrerequisites
19441
- }
19442
-
19443
19448
  export interface EquipmentOfBlessedOnes {
19444
19449
  /**
19445
19450
  * The cost in silverthalers.
@@ -20178,6 +20183,16 @@ export interface MagicalArtifact {
20178
20183
  */
20179
20184
  weight?: Weight
20180
20185
 
20186
+ /**
20187
+ * The complexity of crafting the item.
20188
+ */
20189
+ complexity?: Complexity
20190
+
20191
+ /**
20192
+ * 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.
20193
+ */
20194
+ combat_use?: CombatUse
20195
+
20181
20196
  /**
20182
20197
  * All translations for the entry, identified by IETF language tag (BCP47).
20183
20198
  */
@@ -21239,6 +21254,16 @@ export interface Vehicle {
21239
21254
  */
21240
21255
  cost: Cost
21241
21256
 
21257
+ /**
21258
+ * The weight in kg.
21259
+ */
21260
+ weight?: Weight
21261
+
21262
+ /**
21263
+ * The complexity of crafting the item.
21264
+ */
21265
+ complexity?: Complexity
21266
+
21242
21267
  /**
21243
21268
  * All translations for the entry, identified by IETF language tag (BCP47).
21244
21269
  */
@@ -1,12 +1,12 @@
1
- import { Entity, Object } from "tsondb/schema/def";
1
+ import { Entity, IncludeIdentifier, Object } from "tsondb/schema/def";
2
2
  export declare const Disease: Entity<"Disease", {
3
3
  level: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
4
- resistance: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Resistance", {
4
+ resistance: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Resistance", {
5
5
  Spirit: import("tsondb/schema/def").EnumCaseDecl<null>;
6
6
  Toughness: import("tsondb/schema/def").EnumCaseDecl<null>;
7
7
  LowerOfSpiritAndToughness: import("tsondb/schema/def").EnumCaseDecl<null>;
8
8
  }, []>>, true>;
9
- cause: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Cause", Object<{
9
+ cause: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Cause", Object<{
10
10
  chance: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
11
11
  translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"CauseTranslation", {
12
12
  name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
@@ -14,41 +14,68 @@ export declare const Disease: Entity<"Disease", {
14
14
  note: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
15
15
  }>, true>;
16
16
  }>, []>>>, true>;
17
- src: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRefs", import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRef", Object<{
17
+ trade_secret: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"RecipeTradeSecret", Object<{
18
+ ap_value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
19
+ prerequisites: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PlainGeneralPrerequisites", IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"PlainPrerequisites", import("tsondb/schema/def").ArrayType<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").EnumDecl<"PrerequisitesElement", {
20
+ Single: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
21
+ Disjunction: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"PrerequisitesDisjunction", Object<{
22
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>, true>;
23
+ display_option: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"DisplayOption", {
24
+ Hide: import("tsondb/schema/def").EnumCaseDecl<null>;
25
+ ReplaceWith: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ReplacementDisplayOption", Object<{
26
+ sentence_type: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"SentenceType", {
27
+ Standalone: import("tsondb/schema/def").EnumCaseDecl<null>;
28
+ Connected: import("tsondb/schema/def").EnumCaseDecl<null>;
29
+ }, []>>, false>;
30
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"ReplacementDisplayOptionTranslation", {
31
+ replacement: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
32
+ }>, true>;
33
+ }>, []>>>;
34
+ }, []>>, false>;
35
+ }>, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>>;
36
+ Group: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"PrerequisiteGroup", Object<{
37
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>, true>;
38
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"PrerequisiteGroupTranslation", {
39
+ text: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
40
+ }>, true>;
41
+ }>, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>>;
42
+ }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>>, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, []>>, false>;
43
+ }>, []>>, false>;
44
+ src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRef", Object<{
18
45
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
19
46
  occurrences: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
20
- initial: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"InitialOccurrence", Object<{
47
+ initial: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"InitialOccurrence", Object<{
21
48
  printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
22
- pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"PageRange", Object<{
23
- first_page: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Page", {
49
+ pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PageRange", Object<{
50
+ first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
24
51
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
25
52
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
26
53
  Numbered: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IntegerType>;
27
54
  }, []>>, true>;
28
- last_page: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Page", {
55
+ last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
29
56
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
30
57
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
31
58
  Numbered: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IntegerType>;
32
59
  }, []>>, false>;
33
60
  }>, []>>>, true>;
34
61
  }>, []>>, true>;
35
- revisions: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Revision", {
36
- Since: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Since", Object<{
62
+ revisions: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Revision", {
63
+ Since: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Since", Object<{
37
64
  printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
38
- pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"PageRange", Object<{
39
- first_page: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Page", {
65
+ pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PageRange", Object<{
66
+ first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
40
67
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
41
68
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
42
69
  Numbered: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IntegerType>;
43
70
  }, []>>, true>;
44
- last_page: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Page", {
71
+ last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
45
72
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
46
73
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
47
74
  Numbered: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IntegerType>;
48
75
  }, []>>, false>;
49
76
  }>, []>>>, true>;
50
77
  }>, []>>>;
51
- Deprecated: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Deprecation", Object<{
78
+ Deprecated: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Deprecation", Object<{
52
79
  printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
53
80
  }>, []>>>;
54
81
  }, []>>>, false>;
@@ -56,24 +83,24 @@ export declare const Disease: Entity<"Disease", {
56
83
  }>, []>>>, []>>, true>;
57
84
  translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"DiseaseTranslation", {
58
85
  name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
59
- alternative_names: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"AlternativeName", Object<{
86
+ alternative_names: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"AlternativeName", Object<{
60
87
  name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
61
88
  region: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
62
89
  }>, []>>>, false>;
63
90
  progress: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
64
91
  incubation_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
65
- damage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"Reduceable", Object<{
92
+ damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"Reduceable", Object<{
66
93
  default: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>>, true>;
67
94
  reduced: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>>, false>;
68
95
  }>, [Content: import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>]>>, true>;
69
- duration: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"Reduceable", Object<{
96
+ duration: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"Reduceable", Object<{
70
97
  default: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>>, true>;
71
98
  reduced: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>>, false>;
72
99
  }>, [Content: import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>]>>, true>;
73
100
  special: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
74
101
  treatment: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
75
102
  cure: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
76
- errata: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Errata", import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Erratum", Object<{
103
+ errata: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Errata", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Erratum", Object<{
77
104
  date: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").DateType, true>;
78
105
  description: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
79
106
  }>, []>>>, []>>, false>;
@@ -1,6 +1,7 @@
1
- import { Entity, Object, Required } from "tsondb/schema/def";
1
+ import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { NestedTranslationMap } from "./Locale.js";
3
3
  import { cause, DiseaseTranslation, level, resistance } from "./_DiseasePoison.js";
4
+ import { RecipeTradeSecret } from "./equipment/item/_Herbary.js";
4
5
  import { src } from "./source/_PublicationRef.js";
5
6
  export const Disease = Entity(import.meta.url, {
6
7
  name: "Disease",
@@ -9,6 +10,10 @@ export const Disease = Entity(import.meta.url, {
9
10
  level,
10
11
  resistance,
11
12
  cause,
13
+ trade_secret: Optional({
14
+ comment: "AP value and prerequisites of the disease’s trade secret.",
15
+ type: IncludeIdentifier(RecipeTradeSecret),
16
+ }),
12
17
  src,
13
18
  translations: NestedTranslationMap(Required, "Disease", DiseaseTranslation),
14
19
  }),
@@ -19,6 +19,108 @@ export declare const MagicalArtifact: Entity<"MagicalArtifact", {
19
19
  }>, []>>>;
20
20
  }, []>>, true>;
21
21
  weight: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Weight", import("tsondb/schema/def").FloatType, []>>, false>;
22
+ complexity: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Complexity", {
23
+ Primitive: import("tsondb/schema/def").EnumCaseDecl<null>;
24
+ Simple: import("tsondb/schema/def").EnumCaseDecl<null>;
25
+ Complex: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ComplexComplexity", Object<{
26
+ ap_value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
27
+ }>, []>>>;
28
+ }, []>>, false>;
29
+ combat_use: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"CombatUse", {
30
+ Weapon: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ImprovisedWeapon", Object<{
31
+ melee_uses: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
32
+ damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"MeleeDamage", Object<{
33
+ dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Dice", Object<{
34
+ number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
35
+ sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
36
+ }>, []>>, true>;
37
+ flat: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
38
+ }>, []>>, true>;
39
+ damage_threshold: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"PrimaryAttributeDamageThreshold", {
40
+ Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"DefaultPrimaryAttributeDamageThreshold", Object<{
41
+ threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
42
+ }>, []>>>;
43
+ List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PrimaryAttributeDamageThresholdList", Object<{
44
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"SinglePrimaryAttributeDamageThreshold", Object<{
45
+ attribute: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
46
+ threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
47
+ }>, []>>>, true>;
48
+ }>, []>>>;
49
+ }, []>>, false>;
50
+ attackModifier: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"AttackModifier", import("tsondb/schema/def").IntegerType, []>>, false>;
51
+ parryModifier: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ParryModifier", import("tsondb/schema/def").IntegerType, []>>, false>;
52
+ reach: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, false>;
53
+ length: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Length", import("tsondb/schema/def").IntegerType, []>>, false>;
54
+ size: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"ShieldSize", {
55
+ Small: import("tsondb/schema/def").EnumCaseDecl<null>;
56
+ Medium: import("tsondb/schema/def").EnumCaseDecl<null>;
57
+ Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"LargeShieldSize", Object<{
58
+ attack_penalty: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
59
+ }>, []>>>;
60
+ }, []>>, false>;
61
+ is_parrying_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
62
+ is_two_handed_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
63
+ is_improvised_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
64
+ }>, false>;
65
+ ranged_uses: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
66
+ damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RangedDamage", {
67
+ Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"DefaultRangedDamage", Object<{
68
+ dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Dice", Object<{
69
+ number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
70
+ sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
71
+ }>, []>>, true>;
72
+ flat: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
73
+ }>, []>>>;
74
+ NotApplicable: import("tsondb/schema/def").EnumCaseDecl<null>;
75
+ Special: import("tsondb/schema/def").EnumCaseDecl<null>;
76
+ }, []>>, true>;
77
+ reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ReloadTime", Object<{
78
+ value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
79
+ }>, []>>>, true>;
80
+ range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"RangeBrackets", Object<{
81
+ close: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
82
+ medium: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
83
+ far: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
84
+ }>, []>>, true>;
85
+ ammunition: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, false>;
86
+ length: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Length", import("tsondb/schema/def").IntegerType, []>>, false>;
87
+ is_improvised_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
88
+ }>, false>;
89
+ sanctified_by: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"SanctifiedBy", import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, []>>, false>;
90
+ restricted_to_cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RestrictedToCultures", {
91
+ CulturesOfRace: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").ReferenceIdentifierType>;
92
+ Cultures: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"RestrictedToSpecificCultures", Object<{
93
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
94
+ }>, []>>>;
95
+ }, []>>, false>;
96
+ restricted_to_traditions: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, false>;
97
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"ImprovisedWeaponTranslation", {
98
+ advantage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
99
+ disadvantage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
100
+ }>, false>;
101
+ }>, []>>>;
102
+ Armor: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"SecondaryArmor", Object<{
103
+ protection: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Protection", import("tsondb/schema/def").IntegerType, []>>, true>;
104
+ encumbrance: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Encumbrance", import("tsondb/schema/def").IntegerType, []>>, true>;
105
+ has_additional_penalties: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"HasAdditionalPenalties", import("tsondb/schema/def").BooleanType, []>>, true>;
106
+ armor_type: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
107
+ hit_zone: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"HitZone", {
108
+ Head: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"HeadHitZone", Object<{
109
+ combination_possibilities: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"HeadHitZoneCombinationPossibilities", Object<{
110
+ armors: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
111
+ protection: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
112
+ }>, []>>, false>;
113
+ }>, []>>>;
114
+ Torso: import("tsondb/schema/def").EnumCaseDecl<null>;
115
+ Arms: import("tsondb/schema/def").EnumCaseDecl<null>;
116
+ Legs: import("tsondb/schema/def").EnumCaseDecl<null>;
117
+ }, []>>, false>;
118
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"SecondaryArmorTranslation", {
119
+ advantage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
120
+ disadvantage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
121
+ }>, false>;
122
+ }>, []>>>;
123
+ }, []>>, false>;
22
124
  src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRef", Object<{
23
125
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
24
126
  occurrences: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
@@ -1,6 +1,6 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
- import { Cost, DefaultItemTranslations, Weight } from "./_Item.js";
3
+ import { CombatUse, Complexity, Cost, DefaultItemTranslations, Weight } from "./_Item.js";
4
4
  export const MagicalArtifact = Entity(import.meta.url, {
5
5
  name: "MagicalArtifact",
6
6
  namePlural: "MagicalArtifacts",
@@ -13,6 +13,14 @@ export const MagicalArtifact = Entity(import.meta.url, {
13
13
  comment: "The weight in kg.",
14
14
  type: IncludeIdentifier(Weight),
15
15
  }),
16
+ complexity: Optional({
17
+ comment: "The complexity of crafting the item.",
18
+ type: IncludeIdentifier(Complexity),
19
+ }),
20
+ combat_use: Optional({
21
+ comment: "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.",
22
+ type: IncludeIdentifier(CombatUse),
23
+ }),
16
24
  src,
17
25
  translations: DefaultItemTranslations("MagicalArtifact"),
18
26
  }),
@@ -18,6 +18,14 @@ export declare const Vehicle: Entity<"Vehicle", {
18
18
  }>, false>;
19
19
  }>, []>>>;
20
20
  }, []>>, true>;
21
+ weight: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Weight", import("tsondb/schema/def").FloatType, []>>, false>;
22
+ complexity: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Complexity", {
23
+ Primitive: import("tsondb/schema/def").EnumCaseDecl<null>;
24
+ Simple: import("tsondb/schema/def").EnumCaseDecl<null>;
25
+ Complex: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ComplexComplexity", Object<{
26
+ ap_value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
27
+ }>, []>>>;
28
+ }, []>>, false>;
21
29
  src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRef", Object<{
22
30
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
23
31
  occurrences: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
@@ -1,6 +1,6 @@
1
- import { Entity, IncludeIdentifier, Object, Required } from "tsondb/schema/def";
1
+ import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
- import { Cost, DefaultItemTranslations } from "./_Item.js";
3
+ import { Complexity, Cost, DefaultItemTranslations, Weight } from "./_Item.js";
4
4
  export const Vehicle = Entity(import.meta.url, {
5
5
  name: "Vehicle",
6
6
  namePlural: "Vehicles",
@@ -9,6 +9,14 @@ export const Vehicle = Entity(import.meta.url, {
9
9
  comment: "The cost in silverthalers.",
10
10
  type: IncludeIdentifier(Cost),
11
11
  }),
12
+ weight: Optional({
13
+ comment: "The weight in kg.",
14
+ type: IncludeIdentifier(Weight),
15
+ }),
16
+ complexity: Optional({
17
+ comment: "The complexity of crafting the item.",
18
+ type: IncludeIdentifier(Complexity),
19
+ }),
12
20
  src,
13
21
  translations: DefaultItemTranslations("Vehicle"),
14
22
  }),
@@ -65,15 +65,15 @@ const RangeBrackets = TypeAlias(import.meta.url, {
65
65
  type: () => Object({
66
66
  close: Required({
67
67
  comment: "The close range bracket for the weapon. Distance in m.",
68
- type: Integer({ minimum: 1 }),
68
+ type: Integer({ minimum: 0 }),
69
69
  }),
70
70
  medium: Required({
71
71
  comment: "The medium range bracket for the weapon. Distance in m.",
72
- type: Integer({ minimum: 1 }),
72
+ type: Integer({ minimum: 0 }),
73
73
  }),
74
74
  far: Required({
75
75
  comment: "The far range bracket for the weapon. Distance in m.",
76
- type: Integer({ minimum: 1 }),
76
+ type: Integer({ minimum: 0 }),
77
77
  }),
78
78
  }),
79
79
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "optolith-database-schema",
3
- "version": "0.21.0",
3
+ "version": "0.21.1",
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",
@@ -38,11 +38,11 @@
38
38
  "license": "MPL-2.0",
39
39
  "dependencies": {
40
40
  "@optolith/helpers": "^0.2.2",
41
- "tsondb": "^0.12.2",
41
+ "tsondb": "^0.12.5",
42
42
  "yaml": "^2.8.1"
43
43
  },
44
44
  "devDependencies": {
45
- "@types/node": "^24.8.1",
45
+ "@types/node": "^24.10.1",
46
46
  "commit-and-tag-version": "^12.6.0",
47
47
  "typescript": "^5.9.3"
48
48
  },