style: remove line breaks in documentation paragraphs

This commit is contained in:
Lukas Obermann
2024-11-16 16:58:45 +01:00
parent 4236fa3804
commit f865a34058
408 changed files with 1832 additions and 3660 deletions
@@ -24,12 +24,10 @@ public struct Advantage: LocalizableEntity {
public let apValue: AdventurePointsValue
/// Does this advantage count towards the maximum of AP to be spent on
/// advantages?
/// Does this advantage count towards the maximum of AP to be spent on advantages?
public let hasMaximumSpentInfluence: Bool
/// Does this advantage exclusively applies to arcane spellworks and not
/// to magical actions and magical applications?
/// Does this advantage exclusively applies to arcane spellworks and not to magical actions and magical applications?
public let isExclusiveToArcaneSpellworks: Bool
public let src: PublicationRefs
@@ -68,9 +66,7 @@ public struct AdvantageTranslation: EntitySubtype {
public let apValue: AdventurePointsValueReplacement?
/// A string that gets appended to the default AP Value text with a preceding
/// space. This always happens if present, even if the generated AP Value text
/// is replaced.
/// A string that gets appended to the default AP Value text with a preceding space. This always happens if present, even if the generated AP Value text is replaced.
public let apValueAppend: AdventurePointsValueAppend?
public let errata: Errata?
@@ -14,27 +14,20 @@ public struct AnimalDisease: LocalizableEntity {
/// The animal disease's level.
public let level: Int
/// Depending on the disease, apply Spirit or Toughness as a penalty to the
/// disease roll. It may also happen that the lower of both is applied as a
/// penalty.
/// Depending on the disease, apply Spirit or Toughness as a penalty to the disease roll. It may also happen that the lower of both is applied as a penalty.
public let resistance: Resistance
/// What causes the disease? The GM rolls 1D20 to see if a character gets
/// infected. If the infection check succeeds, the GM makes a disease check to
/// determine the severity of the infection.
/// What causes the disease? The GM rolls 1D20 to see if a character gets infected. If the infection check succeeds, the GM makes a disease check to determine the severity of the infection.
public let cause: [Cause]
/// The animal types this disease applies to.
///
/// If no animal types are given, the animal disease applies to all animal
/// types.
/// If no animal types are given, the animal disease applies to all animal types.
public let animalTypes: [AnimalTypeReference]
/// If and at which chance the disease can be communicated to intelligent
/// creatures.
/// If and at which chance the disease can be communicated to intelligent creatures.
///
/// If no causes are given, the disease is not communicable to intelligent
/// creatures.
/// If no causes are given, the disease is not communicable to intelligent creatures.
public let communicabilityToIntelligentCreatures: [Cause]
public let src: PublicationRefs
@@ -19,8 +19,7 @@ public struct AspectTranslation: EntitySubtype {
/// The aspect name.
public let name: NonEmptyString
/// The aspect's name appended to the simple name (not `name_in_library`)
/// of the special ability *Master of (Aspect)*.
/// The aspect's name appended to the simple name (not `name_in_library`) of the special ability *Master of (Aspect)*.
public let masterOfAspectSuffix: NonEmptyString?
private enum CodingKeys: String, CodingKey {
@@ -20,10 +20,7 @@ public struct Cantrip: LocalizableEntity {
/// The associated property.
public let property: PropertyReference
/// A note specifying the dissemination of the cantrip in different traditions.
/// Sometimes a cantrip is exclusively available to one or more specific
/// traditions, but usually one the academies and traditions are listed the
/// cantrip is most commonly teached in.
/// A note specifying the dissemination of the cantrip in different traditions. Sometimes a cantrip is exclusively available to one or more specific traditions, but usually one the academies and traditions are listed the cantrip is most commonly teached in.
public let note: CantripNote?
public let src: PublicationRefs
@@ -23,9 +23,7 @@ public struct Ceremony: LocalizableEntity {
/// The target category the kind of creature or object the skill affects.
public let target: AffectedTargetCategories
/// The tradition(s) the ceremony is available for. Note that general aspects
/// do not have an associated tradition and thus need to be defined in a
/// special way.
/// The tradition(s) the ceremony is available for. Note that general aspects do not have an associated tradition and thus need to be defined in a special way.
public let traditions: [SkillTradition]
/// States which column is used to improve the skill.
@@ -59,14 +57,10 @@ public struct CeremonyTranslation: EntitySubtype {
/// The name of the ceremony.
public let name: NonEmptyString
/// A compressed name of the ceremony for use in small areas (e.g. on
/// character sheet). Should only be defined if the `name` does not fit on
/// character sheet.
/// A compressed name of the ceremony for use in small areas (e.g. on character sheet). Should only be defined if the `name` does not fit on character sheet.
public let nameCompressed: NonEmptyString?
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -11,8 +11,7 @@ public struct CloseCombatTechnique: LocalizableEntity {
/// The close combat technique's identifier. An unique, increasing integer.
public let id: Int
/// Special rules for the combat technique that apply to all weapons in this
/// category.
/// Special rules for the combat technique that apply to all weapons in this category.
public let special: CloseCombatTechniqueSpecialRules
/// The primary attribute(s).
@@ -39,8 +38,7 @@ public struct CloseCombatTechnique: LocalizableEntity {
}
}
/// Special rules for the combat technique that apply to all weapons in this
/// category.
/// Special rules for the combat technique that apply to all weapons in this category.
public struct CloseCombatTechniqueSpecialRules: EntitySubtype {
/// Is parrying possible with this combat technique?
public let canParry: Bool
@@ -11,8 +11,7 @@ public struct RangedCombatTechnique: LocalizableEntity {
/// The ranged combat technique's identifier. An unique, increasing integer.
public let id: Int
/// Special rules for the combat technique that apply to all weapons in this
/// category.
/// Special rules for the combat technique that apply to all weapons in this category.
public let special: RangedCombatTechniqueSpecialRules
/// The primary attribute(s).
@@ -39,8 +38,7 @@ public struct RangedCombatTechnique: LocalizableEntity {
}
}
/// Special rules for the combat technique that apply to all weapons in this
/// category.
/// Special rules for the combat technique that apply to all weapons in this category.
public struct RangedCombatTechniqueSpecialRules: EntitySubtype {
public let hasAmmunition: Bool
@@ -7,8 +7,7 @@
import DiscriminatedEnum
/// Continents are mostly referenced to in languages and scripts that occur on a
/// specific continent.
/// Continents are mostly referenced to in languages and scripts that occur on a specific continent.
public struct Continent: LocalizableEntity {
/// The continent's identifier. An unique, increasing integer.
public let id: Int
@@ -14,8 +14,7 @@ public struct Culture: LocalizableEntity {
/// A list of native languages (usually it is only one).
public let language: [LanguageReference]
/// A list of native scripts (usually it is only one). If the culture does not
/// use any script, leave this field empty.
/// A list of native scripts (usually it is only one). If the culture does not use any script, leave this field empty.
public let script: [ScriptReference]?
/// If the area knowledge has a fixed value or can be adjusted.
@@ -24,10 +23,7 @@ public struct Culture: LocalizableEntity {
/// A list of possible social status in the respective culture.
public let socialStatus: [SocialStatusReference]
/// A list of professions that are typical for the culture, as well as
/// professions that are rarely practiced or encountered in the culture. The
/// list is either defined by group (as multiple lists) or plain (as a single
/// list).
/// A list of professions that are typical for the culture, as well as professions that are rarely practiced or encountered in the culture. The list is either defined by group (as multiple lists) or plain (as a single list).
public let commonProfessions: CommonProfessions
/// A list of common advantages.
@@ -86,46 +82,34 @@ public struct AreaKnowledge: EntitySubtype {
}
}
/// The "weight" difference compared to other professions or profession variants.
/// Some professions or profession variants are simply more common (Mostly), but
/// sometimes only specific elements are used (Only).
/// The "weight" difference compared to other professions or profession variants. Some professions or profession variants are simply more common (Mostly), but sometimes only specific elements are used (Only).
public enum CommonnessWeight: String, EntitySubtype {
case mostly = "Mostly"
case only = "Only"
}
/// Some professions or profession variants are more common than others. There
/// may be cultures where some professions or profession variants are not
/// represented at all.
/// Some professions or profession variants are more common than others. There may be cultures where some professions or profession variants are not represented at all.
public struct Weighted<ProfessionOrVariant: EntitySubtype>: EntitySubtype {
/// The list of more common professions or profession variants.
public let elements: [ProfessionOrVariant]
/// The "weight" difference compared to other professions or profession
/// variants. Some professions or profession variants are simply more common
/// The "weight" difference compared to other professions or profession variants. Some professions or profession variants are simply more common
/// (Mostly), but sometimes only specific elements are used (Only).
public let weight: CommonnessWeight
}
/// This defines how the list of constraints should be offset against the
/// list of all mundane professions: Either only the professions are kept
/// that intersect with the constraints (include) or only the professions
/// are kept that are different from the constraints (exclude).
/// This defines how the list of constraints should be offset against the list of all mundane professions: Either only the professions are kept that intersect with the constraints (include) or only the professions are kept that are different from the constraints (exclude).
public enum CommonProfessionConstraintsOperation: String, EntitySubtype {
case intersection = "Intersection"
case difference = "Difference"
}
/// A list of professions. The filter specifies how the list is applied to
/// all mundane professions.
/// A list of professions. The filter specifies how the list is applied to all mundane professions.
public struct CommonProfessionConstraints<Constraint: EntitySubtype>: EntitySubtype {
/// The list of constraints.
public let constraints: [Constraint]
/// This defines how the list of constraints should be offset against the
/// list of all mundane professions: Either only the professions are kept
/// that intersect with the constraints (include) or only the professions
/// are kept that are different from the constraints (exclude).
/// This defines how the list of constraints should be offset against the list of all mundane professions: Either only the professions are kept that intersect with the constraints (include) or only the professions are kept that are different from the constraints (exclude).
public let operation: CommonProfessionConstraintsOperation
}
@@ -139,12 +123,10 @@ public struct ProfessionConstraint: EntitySubtype {
/// The profession's identifier.
public let id: ProfessionIdentifier
/// Some profession variants are more common than others. There may be
/// cultures where some variants are not represented at all.
/// Some profession variants are more common than others. There may be cultures where some variants are not represented at all.
public let weightedVariants: Weighted<ProfessionVariantReference>?
/// Some professions may be found in a culture, but are not that
/// common.
/// Some professions may be found in a culture, but are not that common.
public let rarity: Rarity?
private enum CodingKeys: String, CodingKey {
@@ -165,8 +147,7 @@ public struct MagicalTraditionConstraint: EntitySubtype {
/// The magical tradition's identifier.
public let id: MagicalTraditionIdentifier
/// Some professions are more common than others. There may be cultures
/// where some professions are not represented at all.
/// Some professions are more common than others. There may be cultures where some professions are not represented at all.
public let weightedProfessions: Weighted<ProfessionReference>?
/// Some traditions may be found in a culture, but are not that common.
@@ -183,8 +164,7 @@ public struct BlessedTraditionConstraint: EntitySubtype {
/// The magical tradition's identifier.
public let id: BlessedTraditionIdentifier
/// Some professions are more common than others. There may be cultures
/// where some professions are not represented at all.
/// Some professions are more common than others. There may be cultures where some professions are not represented at all.
public let weightedProfessions: Weighted<ProfessionReference>?
/// Some traditions may be found in a culture, but are not that common.
@@ -226,10 +206,7 @@ public struct GroupedCommonProfessions: EntitySubtype {
public let blessed: CommonProfessionConstraints<BlessedCommonProfessionConstraint>?
}
/// A list of professions that are typical for the culture, as well as
/// professions that are rarely practiced or encountered in the culture. The
/// list is either defined by group (as multiple lists) or plain (as a single
/// list).
/// A list of professions that are typical for the culture, as well as professions that are rarely practiced or encountered in the culture. The list is either defined by group (as multiple lists) or plain (as a single list).
@DiscriminatedEnum
public enum CommonProfessions: EntitySubtype {
case plain(PlainCommonProfessions)
@@ -242,8 +219,7 @@ public struct CulturalPackageItem: EntitySubtype {
/// The skill's identifier.
public let id: SkillIdentifier
/// The skill points for the respective skill you get for buying the cultural
/// package.
/// The skill points for the respective skill you get for buying the cultural package.
public let points: Int
}
@@ -288,8 +264,7 @@ public struct AreaKnowledgeTranslation: EntitySubtype {
/// The full description without examples in parenthesis.
public let description: String
/// A shorter version of the description, used in input fields and other UI
/// elements where the space might be to small to use the full description.
/// A shorter version of the description, used in input fields and other UI elements where the space might be to small to use the full description.
public let abbreviated: String
/// Examples of areas, if applicable.
@@ -302,12 +277,10 @@ public struct AreaKnowledgeExample: EntitySubtype {
/// Structured description of common names.
public struct CommonNames: EntitySubtype {
/// First names can be gender-neutral, but they can also be for a specific
/// binary sex. They are sorted into groups.
/// First names can be gender-neutral, but they can also be for a specific binary sex. They are sorted into groups.
public let firstNameGroups: [CommonNameGroup]?
/// Last names can be gender-neutral, like family names, but they can also be
/// for a specific binary sex. They are sorted into groups.
/// Last names can be gender-neutral, like family names, but they can also be for a specific binary sex. They are sorted into groups.
public let lastNameGroups: [CommonNameGroup]?
/// Special naming rules.
@@ -20,12 +20,10 @@ public struct Disadvantage: LocalizableEntity {
public let apValue: AdventurePointsValue
/// Does this disadvantage count towards the maximum of AP to be spent on
/// disadvantages?
/// Does this disadvantage count towards the maximum of AP to be spent on disadvantages?
public let hasMaximumSpentInfluence: Bool
/// Does this disadvantage exclusively applies to arcane spellworks and not
/// to magical actions and magical applications?
/// Does this disadvantage exclusively applies to arcane spellworks and not to magical actions and magical applications?
public let isExclusiveToArcaneSpellworks: Bool
public let src: PublicationRefs
@@ -60,9 +58,7 @@ public struct DisadvantageTranslation: EntitySubtype {
/// The range.
public let range: String?
/// A string that gets appended to the default AP Value text with a preceding
/// space. This always happens if present, even if the generated AP Value text
/// is replaced.
/// A string that gets appended to the default AP Value text with a preceding space. This always happens if present, even if the generated AP Value text is replaced.
public let apValueAppend: AdventurePointsValueAppend?
public let errata: Errata?
@@ -14,14 +14,10 @@ public struct Disease: LocalizableEntity {
/// The disease's level.
public let level: Int
/// Depending on the disease, apply Spirit or Toughness as a penalty to the
/// disease roll. It may also happen that the lower of both is applied as a
/// penalty.
/// Depending on the disease, apply Spirit or Toughness as a penalty to the disease roll. It may also happen that the lower of both is applied as a penalty.
public let resistance: Resistance
/// What causes the disease? The GM rolls 1D20 to see if a character gets
/// infected. If the infection check succeeds, the GM makes a disease check to
/// determine the severity of the infection.
/// What causes the disease? The GM rolls 1D20 to see if a character gets infected. If the infection check succeeds, the GM makes a disease check to determine the severity of the infection.
public let cause: [Cause]
public let src: PublicationRefs
@@ -11,11 +11,9 @@ public struct FamiliarsTrick: LocalizableEntity {
/// The familiar's trick's identifier. An unique, increasing integer.
public let id: Int
/// The animal types this trick is available to. Either it is available to all
/// or only a list of specific animal types.
/// The animal types this trick is available to. Either it is available to all or only a list of specific animal types.
///
/// If no animal types are given, the animal disease applies to all animal
/// types.
/// If no animal types are given, the animal disease applies to all animal types.
public let animalTypes: [AnimalTypeReference]
/// Measurable parameters of a familiar's trick.
@@ -24,8 +22,7 @@ public struct FamiliarsTrick: LocalizableEntity {
/// The property of the trick.
public let property: FamiliarsTrickProperty
/// The AP value the familiar has to pay for. It may also be that a specific is
/// known by all familiar by default. In the latter case the field is not set.
/// The AP value the familiar has to pay for. It may also be that a specific is known by all familiar by default. In the latter case the field is not set.
public let apValue: Int?
public let src: PublicationRefs
@@ -120,8 +117,7 @@ public struct FamiliarsTrickFixedOneTimeCost: EntitySubtype {
}
public struct FamiliarsTrickFixedOneTimeCostTranslation: EntitySubtype {
/// The cost have to be per a specific countable entity, e.g. `8 KP
/// per person`.
/// The cost have to be per a specific countable entity, e.g. `8 KP per person`.
public let per: ResponsiveTextOptional?
}
@@ -7,9 +7,7 @@
import DiscriminatedEnum
/// This is a curriculum of a specified academy, containing the guideline,
/// elective and restricted spellworks as well as the lesson packages of that
/// academy.
/// This is a curriculum of a specified academy, containing the guideline, elective and restricted spellworks as well as the lesson packages of that academy.
public struct Curriculum: LocalizableEntity {
/// The curriculum's identifier. An unique, increasing integer.
public let id: Int
@@ -63,17 +61,11 @@ public struct SpecificElectiveSpellworks: EntitySubtype {
public struct ElectiveSpellwork: EntitySubtype {
public let id: SpellworkIdentifier
/// The elective spellwork may only take effect if a certain condition is met.
/// The condition may be related to professions or profession variants, but it
/// is designed so that it can work without a specific profession, as multiple
/// may belong to an institute, but with referencing other entities instead.
/// The elective spellwork may only take effect if a certain condition is met. The condition may be related to professions or profession variants, but it is designed so that it can work without a specific profession, as multiple may belong to an institute, but with referencing other entities instead.
public let restriction: ElectiveSpellworkRestriction?
}
/// The elective spellwork may only take effect if a certain condition is met.
/// The condition may be related to professions or profession variants, but it is
/// designed so that it can work without a specific profession, as multiple may
/// belong to an institute, but with referencing other entities instead.
/// The elective spellwork may only take effect if a certain condition is met. The condition may be related to professions or profession variants, but it is designed so that it can work without a specific profession, as multiple may belong to an institute, but with referencing other entities instead.
@DiscriminatedEnum
public enum ElectiveSpellworkRestriction: EntitySubtype {
case element(ElectiveSpellworkElementRestriction)
@@ -103,9 +95,7 @@ public struct RestrictedProperty: EntitySubtype {
/// Exclude specific spellworks from the restriction.
public let exclude: [SpellworkIdentifier]?
/// Spellworks from this property up to a certain number are allowed.
/// Spellworks excluded from this restriction definition using `exclude` do
/// not contribute to the maximum.
/// Spellworks from this property up to a certain number are allowed. Spellworks excluded from this restriction definition using `exclude` do not contribute to the maximum.
public let maximum: Double?
}
@@ -116,10 +106,7 @@ public struct LessonPackage: EntitySubtype {
/// The lesson package's identifier. An unique, increasing integer.
public let id: Int
/// The spell values difference of the lesson package. This field reflects the
/// changes (difference) to the field of the same name in the profession
/// package. If a spell gets to SR 0 because of this, it will be removed
/// completely.
/// The spell values difference of the lesson package. This field reflects the changes (difference) to the field of the same name in the profession package. If a spell gets to SR 0 because of this, it will be removed completely.
public let spellworkChanges: [SpellworkChange]?
public let skills: [AbilityAdjustment]?
@@ -145,8 +132,7 @@ public struct LessonPackageTranslation: EntitySubtype {
/// The name of the lesson package.
public let name: NonEmptyString
/// The spell values difference of the lesson package. Use this field to
/// specify a text that is displayed instead of the generated
/// The spell values difference of the lesson package. Use this field to specify a text that is displayed instead of the generated
/// `spellwork_changes` list. The field is displayed even if no list is
/// present.
public let spellworkChanges: NonEmptyString?
@@ -167,8 +153,7 @@ public enum AbilityAdjustment: EntitySubtype {
public struct CombatTechniqueAdjustment: EntitySubtype {
public let id: CombatTechniqueIdentifier
/// The combat technique points that will be added to the current combat
/// technique rating.
/// The combat technique points that will be added to the current combat technique rating.
public let points: Int
}
@@ -183,12 +168,9 @@ public struct SkillAdjustment: EntitySubtype {
public struct SpellworkAdjustment: EntitySubtype {
public let id: SpellworkIdentifier
/// The skill points that will be added to the current skill rating. If a
/// spell gets to a skill rating of 0 because of this, it will be removed
/// completely.
/// The skill points that will be added to the current skill rating. If a spell gets to a skill rating of 0 because of this, it will be removed completely.
public let points: Int
/// The target tradition. If the target spell is not from the Guild Mage
/// tradition, specify the tradition identifier here.
/// The target tradition. If the target spell is not from the Guild Mage tradition, specify the tradition identifier here.
public let tradition: MagicalTraditionIdentifier?
}
@@ -23,9 +23,7 @@ public struct LiturgicalChant: LocalizableEntity {
/// The target category the kind of creature or object the skill affects.
public let target: AffectedTargetCategories
/// The tradition(s) the liturgical chant is available for. Note that general
/// aspects do not have an associated tradition and thus need to be defined in
/// a special way.
/// The tradition(s) the liturgical chant is available for. Note that general aspects do not have an associated tradition and thus need to be defined in a special way.
public let traditions: [SkillTradition]
/// States which column is used to improve the skill.
@@ -59,14 +57,10 @@ public struct LiturgicalChantTranslation: EntitySubtype {
/// The name of the liturgical chant.
public let name: NonEmptyString
/// A compressed name of the liturgical chant for use in small areas (e.g.
/// on character sheet). Should only be defined if the `name` does not fit
/// on character sheet.
/// A compressed name of the liturgical chant for use in small areas (e.g. on character sheet). Should only be defined if the `name` does not fit on character sheet.
public let nameCompressed: NonEmptyString?
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -17,8 +17,7 @@ public struct Locale: Entity {
/// Region in which the language is spoken in it's language.
public let region: String
/// The language is not (fully) implemented and thus needs to be excluded from
/// stable releases.
/// The language is not (fully) implemented and thus needs to be excluded from stable releases.
public let isMissingImplementation: Bool?
private enum CodingKeys: String, CodingKey {
@@ -7,9 +7,7 @@
import DiscriminatedEnum
/// Meta Conditions are rule elements that work like conditions in the sense that
/// they have four levels with different effects, but which are not explicitly
/// listed as conditions.
/// Meta Conditions are rule elements that work like conditions in the sense that they have four levels with different effects, but which are not explicitly listed as conditions.
public struct MetaCondition: LocalizableEntity {
/// The meta condition's identifier. An unique, increasing integer.
public let id: Int
@@ -17,36 +17,28 @@ public struct Patron: LocalizableEntity {
/// The patron-specific skills.
public let skills: [SkillReference]
/// The patron is only available to a certain set of cultures. It may be
/// available to all, it may be available to only specific ones (intersection)
/// and it may be available to all except specific ones to the listed cultures
/// The patron is only available to a certain set of cultures. It may be available to all, it may be available to only specific ones (intersection) and it may be available to all except specific ones to the listed cultures
/// (difference).
public let culture: PatronCulture
/// The list of cultures where patrons from this category can be the primary
/// patron of.
/// The list of cultures where patrons from this category can be the primary patron of.
public let primaryPatronCultures: [CultureReference]?
/// The patron-specific powers. Used by animist power Animal Powers IIII and
/// should only be present on animal patrons.
/// The patron-specific powers. Used by animist power Animal Powers IIII and should only be present on animal patrons.
public let powers: AnimalPowers?
/// The patron-specific AE cost. Used by several animist forces for animal
/// patrons.
/// The patron-specific AE cost. Used by several animist forces for animal patrons.
public let aeCost: Int?
/// The patron-specific improvement cost. Used by several animist forces for
/// animal patrons.
/// The patron-specific improvement cost. Used by several animist forces for animal patrons.
public let improvementCost: ImprovementCost?
/// The patron may grant common advantages that are taken into account during
/// character creation.
/// The patron may grant common advantages that are taken into account during character creation.
///
/// *Source:* Geisterwald & Knochenklippen, p. 6-7
public let commonAdvantages: [AdvantageReference]?
/// The patron may grant common disadvantages that are taken into account
/// during character creation.
/// The patron may grant common disadvantages that are taken into account during character creation.
///
/// *Source:* Geisterwald & Knochenklippen, p. 6-7
public let commonDisadvantages: [DisadvantageReference]?
@@ -80,19 +72,14 @@ public struct PatronTranslation: EntitySubtype {
public let name: NonEmptyString
}
/// The patron cultures the patron is or is not part of. If the patron is part of
/// all patron cultures, the set should be empty and the operation should be
/// difference.
/// The patron cultures the patron is or is not part of. If the patron is part of all patron cultures, the set should be empty and the operation should be difference.
public struct PatronCulture: EntitySubtype {
public let set: [CultureReference]
public let operation: PatronCultureOperation
}
/// The set operation to combine the set of all patron cultures with the
/// specified set of patron cultures: If they should intersect, the patron is
/// only part of the given cultures. If they should differ, the patron is only
/// part of the cultures that are not given.
/// The set operation to combine the set of all patron cultures with the specified set of patron cultures: If they should intersect, the patron is only part of the given cultures. If they should differ, the patron is only part of the cultures that are not given.
public enum PatronCultureOperation: String, EntitySubtype {
case intersection = "Intersection"
case difference = "Difference"
@@ -11,8 +11,7 @@ public struct PatronCategory: LocalizableEntity {
/// The patron category's identifier. An unique, increasing integer.
public let id: Int
/// The list of cultures where patrons from this category can be the primary
/// patron of.
/// The list of cultures where patrons from this category can be the primary patron of.
public let primaryPatronCultures: [CultureReference]
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -7,9 +7,7 @@
import DiscriminatedEnum
/// A personality trait describes character aspects of a person from a certain
/// region. Higher trait levels only cover a part of the region covered by
/// lower-level traits.
/// A personality trait describes character aspects of a person from a certain region. Higher trait levels only cover a part of the region covered by lower-level traits.
public struct PersonalityTrait: LocalizableEntity {
/// The personality trait's identifier. An unique, increasing integer.
public let id: Int
@@ -41,8 +39,7 @@ public struct PersonalityTraitTranslation: EntitySubtype {
/// The name of the personality trait.
public let name: NonEmptyString
/// The effects of the personality trait. They should be sorted like they
/// are in the book.
/// The effects of the personality trait. They should be sorted like they are in the book.
public let effects: [PersonalityTraitEffect]
public let errata: Errata?
@@ -14,17 +14,9 @@ public struct Profession: Entity {
/// The profession group.
public let group: ProfessionGroup
/// A list of professions representing the same profession but with (slightly)
/// different stats. For example, there may be a profession in a regional
/// sourcebook or in the core rules and a profession in an extension rulebook
/// like Magic of Aventuria, where the profession is basically called the same
/// and almost has the same values, but the version from Magic of Aventuria
/// features a spell style special ability that does not exist in the core
/// rules or regional sourcebook.
/// A list of professions representing the same profession but with (slightly) different stats. For example, there may be a profession in a regional sourcebook or in the core rules and a profession in an extension rulebook like Magic of Aventuria, where the profession is basically called the same and almost has the same values, but the version from Magic of Aventuria features a spell style special ability that does not exist in the core rules or regional sourcebook.
///
/// The profession representation may feature different values for different
/// explicitly mentioned experience levels. In most cases, there is only one
/// stats package, which targets the experience level *Experienced*.
/// The profession representation may feature different values for different explicitly mentioned experience levels. In most cases, there is only one stats package, which targets the experience level *Experienced*.
public let versions: [ProfessionVersion]
}
@@ -53,8 +45,7 @@ public enum ProfessionVersion: EntitySubtype {
}
public struct ExperiencedProfessionPackage: EntitySubtype {
/// The profession representation variant's identifier. An unique, increasing
/// integer.
/// The profession representation variant's identifier. An unique, increasing integer.
public let id: Int
public let package: ProfessionPackage
@@ -66,8 +57,7 @@ public struct ExperiencedProfessionPackage: EntitySubtype {
}
public struct ProfessionPackagesForDifferentExperienceLevels: EntitySubtype {
/// The profession representation variant's identifier. An unique, increasing
/// integer.
/// The profession representation variant's identifier. An unique, increasing integer.
public let id: Int
public let packagesMap: [ExperienceLevelDynamicProfessionPackage]
@@ -86,8 +76,7 @@ public struct ProfessionPackagesForDifferentExperienceLevels: EntitySubtype {
}
public struct ExperienceLevelDynamicProfessionPackage: EntitySubtype {
/// The experience level this profession targets. The experience level
/// must be unique for this representation.
/// The experience level this profession targets. The experience level must be unique for this representation.
public let experienceLevelId: Int
public let package: ProfessionPackage
@@ -102,32 +91,25 @@ public struct ProfessionPackage: EntitySubtype {
/// What does the professional package cost in adventure points?
public let apValue: Int
/// Which prerequisites must be met to buy the stat block? For example, a
/// character might need the advantage Spellcaster or Blessed. Note: the AP
/// cost for a profession package does not include these prerequisites.
/// Which prerequisites must be met to buy the stat block? For example, a character might need the advantage Spellcaster or Blessed. Note: the AP cost for a profession package does not include these prerequisites.
public let prerequisites: ProfessionPrerequisites?
/// In some areas, the profession package grants a loose set of stats where the
/// player must choose between different options for the profession package.
/// In some areas, the profession package grants a loose set of stats where the player must choose between different options for the profession package.
public let options: ProfessionPackageOptions?
/// Any special abilities the profession receives from the package.
public let specialAbilities: [ProfessionSpecialAbility]?
/// Provides ratings for the combat techniques that the hero receives from the
/// package.
/// Provides ratings for the combat techniques that the hero receives from the package.
public let combatTechniques: [CombatTechniqueRating]?
/// The skill ratings the package grants to the hero.
public let skills: [SkillRating]?
/// The skill ratings a magical profession receives for spells; these spells
/// are considered activated. Spells from an unfamiliar Tradition, if any, are
/// identified as such.
/// The skill ratings a magical profession receives for spells; these spells are considered activated. Spells from an unfamiliar Tradition, if any, are identified as such.
public let spells: [SpellRating]?
/// Clerical professions receive these liturgical chants at the listed skill
/// ratings. These liturgical chants are considered activated.
/// Clerical professions receive these liturgical chants at the listed skill ratings. These liturgical chants are considered activated.
public let liturgicalChants: [LiturgicalChantRating]?
/// Typical advantages for the profession.
@@ -136,19 +118,13 @@ public struct ProfessionPackage: EntitySubtype {
/// Typical disadvantages for the profession.
public let suggestedDisadvantages: [CommonnessRatedAdvantageDisadvantage<DisadvantageIdentifier>]?
/// These advantages do not fit well with this profession; to be checked with
/// the GM before taking any of them.
/// These advantages do not fit well with this profession; to be checked with the GM before taking any of them.
public let unsuitableAdvantages: [CommonnessRatedAdvantageDisadvantage<AdvantageIdentifier>]?
/// These disadvantages do not fit well with this profession; to be checked
/// with the GM before taking any of them.
/// These disadvantages do not fit well with this profession; to be checked with the GM before taking any of them.
public let unsuitableDisadvantages: [CommonnessRatedAdvantageDisadvantage<DisadvantageIdentifier>]?
/// Provides examples of variants for the profession, which may include changes
/// to AP values and additional or modified skill ratings, special abilities,
/// or combat techniques, as compared to the basic profession. Usually picking
/// a variant is optional, but there are some rare exceptions where picking a
/// variant is required.
/// Provides examples of variants for the profession, which may include changes to AP values and additional or modified skill ratings, special abilities, or combat techniques, as compared to the basic profession. Usually picking a variant is optional, but there are some rare exceptions where picking a variant is required.
public let variants: ProfessionVariants?
private enum CodingKeys: String, CodingKey {
@@ -172,9 +148,7 @@ public struct ProfessionTranslation: EntitySubtype {
/// Name of the basic profession.
public let name: ProfessionName
/// A name addition of the profession. This will contain texts like name of
/// the academy or the witch circle. It is enclosed in parenthesis, but the
/// database entry must not contain parenthesis.
/// A name addition of the profession. This will contain texts like name of the academy or the witch circle. It is enclosed in parenthesis, but the database entry must not contain parenthesis.
public let specification: ProfessionName?
/// Typical advantages for the profession.
@@ -183,12 +157,10 @@ public struct ProfessionTranslation: EntitySubtype {
/// Typical disadvantages for the profession.
public let suggestedDisadvantages: NonEmptyString?
/// These advantages do not fit well with this profession; to be checked with
/// the GM before taking any of them.
/// These advantages do not fit well with this profession; to be checked with the GM before taking any of them.
public let unsuitableAdvantages: NonEmptyString?
/// These disadvantages do not fit well with this profession; to be checked
/// with the GM before taking any of them.
/// These disadvantages do not fit well with this profession; to be checked with the GM before taking any of them.
public let unsuitableDisadvantages: NonEmptyString?
public let errata: Errata?
@@ -204,11 +176,7 @@ public struct ProfessionTranslation: EntitySubtype {
}
}
/// Provides examples of variants for the profession, which may include changes
/// to AP values and additional or modified skill ratings, special abilities, or
/// combat techniques, as compared to the basic profession. Usually picking a
/// variant is optional, but there are some rare exceptions where picking a
/// variant is required.
/// Provides examples of variants for the profession, which may include changes to AP values and additional or modified skill ratings, special abilities, or combat techniques, as compared to the basic profession. Usually picking a variant is optional, but there are some rare exceptions where picking a variant is required.
public struct ProfessionVariants: EntitySubtype {
/// If the selection of a profession variant is required.
public let isSelectionRequired: Bool
@@ -229,9 +197,7 @@ public struct ProfessionVariant: EntitySubtype {
/// The AP value you have to pay for the package variant.
public let apValue: Int
/// Which prerequisites must be met to buy the stat block? For example, a
/// character might need the advantage Spellcaster or Blessed. Note: the AP
/// cost for a profession package does not include these prerequisites.
/// Which prerequisites must be met to buy the stat block? For example, a character might need the advantage Spellcaster or Blessed. Note: the AP cost for a profession package does not include these prerequisites.
public let prerequisites: ProfessionPrerequisites?
public let options: ProfessionVariantPackageOptions?
@@ -239,20 +205,16 @@ public struct ProfessionVariant: EntitySubtype {
/// Any special abilities the profession receives from the package variant.
public let specialAbilities: [VariantSpecialAbility]?
/// Provides ratings for the combat techniques that the hero receives from the
/// package variant.
/// Provides ratings for the combat techniques that the hero receives from the package variant.
public let combatTechniques: [CombatTechniqueRating]?
/// The skill ratings the package variant grants to the hero.
public let skills: [SkillRating]?
/// The skill ratings a magical profession variant receives for spells; these
/// spells are considered activated. Spells from an unfamiliar Tradition, if
/// any, are identified as such.
/// The skill ratings a magical profession variant receives for spells; these spells are considered activated. Spells from an unfamiliar Tradition, if any, are identified as such.
public let spells: [SpellRating]?
/// Clerical professions receive these liturgical chants at the listed skill
/// ratings. These liturgical chants are considered activated.
/// Clerical professions receive these liturgical chants at the listed skill ratings. These liturgical chants are considered activated.
public let liturgicalChants: [LiturgicalChantRating]?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -310,8 +272,7 @@ public struct SpecialAbilityDefinition: EntitySubtype {
/// The level of the received special ability.
public let level: Int?
/// Received select options. Order is important. Typically, you only need the
/// first array index, though.
/// Received select options. Order is important. Typically, you only need the first array index, though.
public let options: [RequirableSelectOptionIdentifier]?
}
@@ -325,21 +286,18 @@ public struct FixedVariantSpecialAbility: EntitySubtype {
/// The identifier of the combat technique to provide the rating for.
public let id: SpecialAbilityIdentifier
/// if set to `false`, if the selection is granted by the basic package, it
/// is removed.
/// if set to `false`, if the selection is granted by the basic package, it is removed.
public let active: Bool?
/// The level of the received special ability.
public let level: Int?
/// Received select options. Order is important. Typically, you only need the
/// first array index, though.
/// Received select options. Order is important. Typically, you only need the first array index, though.
public let options: [RequirableSelectOptionIdentifier]?
}
public struct VariantSpecialAbilitySelection: EntitySubtype {
/// if set to `false`, if the selection is granted by the basic package, it
/// is removed.
/// if set to `false`, if the selection is granted by the basic package, it is removed.
public let active: Bool?
public let options: [SpecialAbilityDefinition]
@@ -349,8 +307,7 @@ public struct CombatTechniqueRating: EntitySubtype {
/// The identifier of the combat technique to provide the rating for.
public let id: CombatTechniqueIdentifier
/// The rating bonus provided for the combat technique. If used in a profession
/// variant, it can also be used to lower the bonus of the base profession.
/// The rating bonus provided for the combat technique. If used in a profession variant, it can also be used to lower the bonus of the base profession.
///
/// **Note:** This is a rating *bonus*, so it will be *added* to the default
/// value of 6.
@@ -361,19 +318,15 @@ public struct SkillRating: EntitySubtype {
/// The identifier of the skill to provide the rating for.
public let id: SkillIdentifier
/// The rating bonus provided for the skill. If used in a profession variant,
/// it can also be used to lower the bonus of the base profession
/// The rating bonus provided for the skill. If used in a profession variant, it can also be used to lower the bonus of the base profession
public let rating: Int
}
public struct SpellRating: EntitySubtype {
/// The identifier(s) of the spell(s) to choose from to provide the rating for.
/// If multiple spells are provided, they must all have the same improvement
/// cost.
/// The identifier(s) of the spell(s) to choose from to provide the rating for. If multiple spells are provided, they must all have the same improvement cost.
public let id: [ProfessionSpellIdentifier]
/// The rating bonus provided for the (selected) spell. If used in a profession
/// variant, it can also be used to lower the bonus of the base profession.
/// The rating bonus provided for the (selected) spell. If used in a profession variant, it can also be used to lower the bonus of the base profession.
public let rating: Int
}
@@ -387,11 +340,7 @@ public struct ProfessionSpellworkIdentifier: EntitySubtype {
/// The identifier of the spell to provide the rating for.
public let id: SpellworkIdentifier
/// If the spell is not part of the magical tradition required by the
/// package, this references the magical tradition it is part of. It can also
/// be used to define the target magical tradition of a spell if multiple
/// magical traditions are required and the spell is available to multiple
/// of them.
/// If the spell is not part of the magical tradition required by the package, this references the magical tradition it is part of. It can also be used to define the target magical tradition of a spell if multiple magical traditions are required and the spell is available to multiple of them.
public let tradition: MagicalTraditionReference?
}
@@ -401,19 +350,14 @@ public struct ProfessionMagicalActionIdentifier: EntitySubtype {
}
public struct LiturgicalChantRating: EntitySubtype {
/// The identifier(s) of the liturgical chant(s) to choose from to provide
/// the rating for. If multiple liturgical chants are provided, they must all
/// have the same improvement cost.
/// The identifier(s) of the liturgical chant(s) to choose from to provide the rating for. If multiple liturgical chants are provided, they must all have the same improvement cost.
public let id: [LiturgyIdentifier]
/// The rating bonus provided for the selected liturgical chant. If used in a
/// profession variant, it can also be used to lower the bonus of the base
/// profession.
/// The rating bonus provided for the selected liturgical chant. If used in a profession variant, it can also be used to lower the bonus of the base profession.
public let rating: Int
}
/// In some areas, the profession package grants a loose set of stats where the
/// player must choose between different options for the profession package.
/// In some areas, the profession package grants a loose set of stats where the player must choose between different options for the profession package.
public struct ProfessionPackageOptions: EntitySubtype {
public let skillSpecialization: SkillSpecializationOptions?
@@ -440,9 +384,7 @@ public struct ProfessionPackageOptions: EntitySubtype {
}
}
/// In some areas, the profession package grants a loose set of stats where the
/// player must choose between different options for the profession package. The
/// variant may override or remove those options.
/// In some areas, the profession package grants a loose set of stats where the player must choose between different options for the profession package. The variant may override or remove those options.
public struct ProfessionVariantPackageOptions: EntitySubtype {
public let skillSpecialization: VariantOptionAction<SkillSpecializationOptions>?
@@ -475,9 +417,7 @@ public enum VariantOptionAction<T: EntitySubtype>: EntitySubtype {
case override(T)
}
/// Select an application from a skill or from one of a list of skills where you
/// get a skill specialization for. You can also specify a skill groups from
/// which you can choose a skill.
/// Select an application from a skill or from one of a list of skills where you get a skill specialization for. You can also specify a skill groups from which you can choose a skill.
@DiscriminatedEnum
public enum SkillSpecializationOptions: EntitySubtype {
case single(SingleSkillSpecializationOption)
@@ -503,13 +443,10 @@ public struct LanguagesScriptsOptions: EntitySubtype {
/// Select one or more combat techniques you get a CtR bonus for.
public struct CombatTechniquesOptions: EntitySubtype {
/// Specify the number of combat techniques that can be selected so that they
/// get increased to a specific CtR. There can be multiple selections with
/// different CtRs.
/// Specify the number of combat techniques that can be selected so that they get increased to a specific CtR. There can be multiple selections with different CtRs.
public let fixed: [RatingForCombatTechniquesNumber]
/// Define if after the fixed selections the remaining unselected combat
/// techniques will receive a certain rating bonus as well.
/// Define if after the fixed selections the remaining unselected combat techniques will receive a certain rating bonus as well.
public let restRating: Int?
/// The list of combat techniques to choose from.
@@ -11,8 +11,7 @@ public struct Property: LocalizableEntity {
/// The property's identifier. An unique, increasing integer.
public let id: Int
/// The property check's attributes. Only the properties from the Core Rules
/// have defined property checks.
/// The property check's attributes. Only the properties from the Core Rules have defined property checks.
public let check: SkillCheck?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -18,13 +18,10 @@ public struct Race: LocalizableEntity {
/// The races base values.
public let baseValues: BaseValues
/// Describes how to raise or lower maximum attribute values during character
/// creation.
/// Describes how to raise or lower maximum attribute values during character creation.
public let attributeAdjustments: AttributeAdjustments
/// A list of automatically applied advantages. This does only work for
/// advantages with no further configuration such as level or special
/// selection.
/// A list of automatically applied advantages. This does only work for advantages with no further configuration such as level or special selection.
public let automaticAdvantages: [AdvantageReference]?
/// A list of strongly recommended advantages.
@@ -36,13 +33,10 @@ public struct Race: LocalizableEntity {
/// Configuration for random weight generation.
public let weight: RandomWeightGeneration
/// Defines the starting ages for the race. It depends on the selected
/// experience level.
/// Defines the starting ages for the race. It depends on the selected experience level.
public let startingAge: [StartingAgeConfigForExperienceLevel]
/// A list of available race variants where one has to be selected. If no
/// variants are to be selected, a single variant with no name has to be provided
/// which will be used as the missing values for the base race.
/// A list of available race variants where one has to be selected. If no variants are to be selected, a single variant with no name has to be provided which will be used as the missing values for the base race.
public let variants: RaceVariants
public let src: PublicationRefs
@@ -88,18 +82,14 @@ public struct BaseValues: EntitySubtype {
}
}
/// Describes how to raise or lower maximum attribute values during character
/// creation.
/// Describes how to raise or lower maximum attribute values during character creation.
public struct AttributeAdjustments: EntitySubtype {
/// The values by which the maximum of the respective attribute is modified.
public let fixed: [FixedAttributeAdjustment]?
/// An array of attribute maximum modifiers, where the attribute they apply to
/// is selected from a list of options.
/// An array of attribute maximum modifiers, where the attribute they apply to is selected from a list of options.
///
/// The array only permits a single entry because no race specified more than
/// one selectable attribute adjustment so far. But the schema allows for
/// multiple entries to be future-proof.
/// The array only permits a single entry because no race specified more than one selectable attribute adjustment so far. But the schema allows for multiple entries to be future-proof.
public let selectable: [SelectableAttributeAdjustment]?
}
@@ -113,9 +103,7 @@ public struct FixedAttributeAdjustment: EntitySubtype {
public let value: Int
}
/// A value that will be added to the current maximum of the selected attribute
/// that has been chosen from the listed attributes (negative values will lower
/// the maximum).
/// A value that will be added to the current maximum of the selected attribute that has been chosen from the listed attributes (negative values will lower the maximum).
public struct SelectableAttributeAdjustment: EntitySubtype {
/// A list of attributes the player has to choose from.
public let list: [AttributeReference]
@@ -142,9 +130,7 @@ public struct WeightDice: EntitySubtype {
/// Number of sides on every die. Example: 6 in 2D6.
public let sides: DieType
/// The strategy how to offset the randomly generated values against the
/// base value. Either they are all added or subtracted or even results are
/// added and odd results are subtracted.
/// The strategy how to offset the randomly generated values against the base value. Either they are all added or subtracted or even results are added and odd results are subtracted.
public let offsetStrategy: WeightDiceOffsetStrategy
private enum CodingKeys: String, CodingKey {
@@ -154,9 +140,7 @@ public struct WeightDice: EntitySubtype {
}
}
/// The strategy how to offset the randomly generated values against the
/// base value. Either they are all added or subtracted or even results are
/// added and odd results are subtracted.
/// The strategy how to offset the randomly generated values against the base value. Either they are all added or subtracted or even results are added and odd results are subtracted.
public enum WeightDiceOffsetStrategy: String, EntitySubtype {
case add = "Add"
case subtract = "Subtract"
@@ -170,14 +154,11 @@ public struct StartingAgeConfigForExperienceLevel: EntitySubtype {
/// The base value for the selected experience level.
public let base: Int
/// The random value for the selected experience level. It is going to be
/// added to the base value.
/// The random value for the selected experience level. It is going to be added to the base value.
public let random: Dice
}
/// A list of available race variants where one has to be selected. If no
/// variants are to be selected, a single variant with no name has to be provided
/// which will be used as the missing values for the base race.
/// A list of available race variants where one has to be selected. If no variants are to be selected, a single variant with no name has to be provided which will be used as the missing values for the base race.
public typealias RaceVariants = [RaceVariant]
public struct RaceVariant: EntitySubtype {
@@ -199,12 +180,10 @@ public struct RaceVariant: EntitySubtype {
/// A list of uncommon disadvantages.
public let uncommonDisadvantages: [CommonnessRatedAdvantageDisadvantage<DisadvantageIdentifier>]?
/// An array containing 20 (numeric) hair color identifiers. The array also
/// represents the 20-sided die for a random hair color.
/// An array containing 20 (numeric) hair color identifiers. The array also represents the 20-sided die for a random hair color.
public let hairColor: [HairColorReference]
/// An array containing 20 (numeric) eye color identifiers. The array also
/// represents the 20-sided die for a random eye color.
/// An array containing 20 (numeric) eye color identifiers. The array also represents the 20-sided die for a random eye color.
public let eyeColor: [EyeColorReference]
/// Configuration for random height generation.
@@ -237,9 +216,7 @@ public struct Height: EntitySubtype {
}
public struct RaceVariantTranslation: EntitySubtype {
/// The race variant's name. If left empty, it defaults to the base race name.
/// This can be used if the race has no (visible) variants so that a single
/// variant has to be provided.
/// The race variant's name. If left empty, it defaults to the base race name. This can be used if the race has no (visible) variants so that a single variant has to be provided.
public let name: NonEmptyString?
/// The respective common advantages text from the source book.
@@ -276,8 +253,7 @@ public struct RaceTranslation: EntitySubtype {
/// The respective strongly recommended advantages text from the source book.
public let stronglyRecommendedAdvantages: NonEmptyString?
/// The respective strongly recommended disadvantages text from the source
/// book.
/// The respective strongly recommended disadvantages text from the source book.
public let stronglyRecommendedDisadvantages: NonEmptyString?
public let errata: Errata?
@@ -26,9 +26,7 @@ public struct Ritual: LocalizableEntity {
/// The associated property.
public let property: PropertyReference
/// The tradition(s) the ritual is available for. It may be *generally*
/// available to all traditions or it may be only familiar in specific
/// traditions.
/// The tradition(s) the ritual is available for. It may be *generally* available to all traditions or it may be only familiar in specific traditions.
public let traditions: Traditions
/// States which column is used to improve the skill.
@@ -63,9 +61,7 @@ public struct RitualTranslation: EntitySubtype {
/// The name of the ritual.
public let name: String
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -27,8 +27,7 @@ public struct SexPracticeTranslation: EntitySubtype {
/// How long a round of this sex practice takes.
public let duration: NonEmptyString
/// Prerequisites of participants and environment. Do not specify if the
/// sex practice has no prerequisites.
/// Prerequisites of participants and environment. Do not specify if the sex practice has no prerequisites.
public let prerequisites: NonEmptyString?
/// Effects of a failed *Seduction* check.
@@ -14,9 +14,7 @@ public struct Skill: LocalizableEntity {
/// Lists the linked three attributes used to make a skill check.
public let check: SkillCheck
/// Lists applications for the skill, if any. This does not necessarily include
/// all possible applications. There may also be new applications that could be
/// purchased via certain advantages or special abilities.
/// Lists applications for the skill, if any. This does not necessarily include all possible applications. There may also be new applications that could be purchased via certain advantages or special abilities.
public let applications: Applications
/// Indicates whether encumbrance gives a penalty for checks with the skill.
@@ -49,18 +47,13 @@ public struct SkillTranslation: EntitySubtype {
/// The name of the skill.
public let name: NonEmptyString
/// If there are options available that can not be put into a selection
/// list (like different cults), provide the label text for the input
/// element here. Otherwise leave empty.
/// If there are options available that can not be put into a selection list (like different cults), provide the label text for the input element here. Otherwise leave empty.
public let applicationsInputLabel: NonEmptyString?
/// The text listing the certain circumstances in which the encumbrance may
/// count. This text must be used if `encumbrance` is set to `"Maybe"`,
/// otherwise it is ignored if defined.
/// The text listing the certain circumstances in which the encumbrance may count. This text must be used if `encumbrance` is set to `"Maybe"`, otherwise it is ignored if defined.
public let encumbranceDescription: NonEmptyString?
/// Mentions any tools from the equipment list that are necessary to employ
/// the skill.
/// Mentions any tools from the equipment list that are necessary to employ the skill.
public let tools: NonEmptyMarkdown?
/// Gives examples of the effects that various QL might provide.
@@ -90,8 +83,7 @@ public struct SkillTranslation: EntitySubtype {
}
}
/// A category. All available entries from the specified category will be
/// included as separate applications.
/// A category. All available entries from the specified category will be included as separate applications.
public enum ApplicationCategory: String, EntitySubtype {
case blessedTraditions = "BlessedTraditions"
case diseases = "Diseases"
@@ -69,17 +69,14 @@ public enum SlowSkillCastingTimeUnit: String, EntitySubtype {
}
public struct SkillModificationLevelTranslation: EntitySubtype {
/// Configuration for this level for fast skills (spells, liturgical chants).
/// Values set here override the default generated text.
/// Configuration for this level for fast skills (spells, liturgical chants). Values set here override the default generated text.
public let fast: LevelTypeConfigTranslation?
/// Configuration for this level for slow skills (rituals, ceremonies). Values
/// set here override the default generated text.
/// Configuration for this level for slow skills (rituals, ceremonies). Values set here override the default generated text.
public let slow: LevelTypeConfigTranslation?
}
/// Configuration translation of a type for a level. Values set here override the
/// default generated text.
/// Configuration translation of a type for a level. Values set here override the default generated text.
public struct LevelTypeConfigTranslation: EntitySubtype {
public let range: NonEmptyString
}
@@ -26,9 +26,7 @@ public struct Spell: LocalizableEntity {
/// The associated property.
public let property: PropertyReference
/// The tradition(s) the spell is available for. It may be *generally*
/// available to all traditions or it may be only familiar in specific
/// traditions.
/// The tradition(s) the spell is available for. It may be *generally* available to all traditions or it may be only familiar in specific traditions.
public let traditions: Traditions
/// States which column is used to improve the skill.
@@ -63,9 +61,7 @@ public struct SpellTranslation: EntitySubtype {
/// The name of the spell.
public let name: NonEmptyString
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -13,15 +13,13 @@ public typealias Id = Int
/// The name of the activatable entry.
public typealias Name = String
/// The full name of the entry as stated in the sources. Only use when `name`
/// needs to be different from full name for text generation purposes.
/// The full name of the entry as stated in the sources. Only use when `name` needs to be different from full name for text generation purposes.
public typealias NameInLibrary = String
/// Number of available levels.
public typealias Levels = Int
/// The number stating how often you can buy the entry. The **default** depends on
/// the entry type:
/// The number stating how often you can buy the entry. The **default** depends on the entry type:
///
/// - **Advantage:** `1` in all cases (as specified in the **Core Rules**)
/// - **Disadvantage:** `1` in all cases (as specified in the **Core Rules**)
@@ -31,31 +29,14 @@ public typealias Levels = Int
/// The maximum is only set if it differs from the defaults specified above.
public typealias Maximum = Int
/// Definitions for possible options for the activatable entry. They can either
/// be derived from entry categories or be defined explicitly. Both can happen as
/// well, but if there is an explicitly defined select option and a derived
/// select option has the same identifier (which may only happen if skill or
/// combat technique identifiers are used for explicit select options), the
/// explicit definition overwrites the derived option.
/// Definitions for possible options for the activatable entry. They can either be derived from entry categories or be defined explicitly. Both can happen as well, but if there is an explicitly defined select option and a derived select option has the same identifier (which may only happen if skill or combat technique identifiers are used for explicit select options), the explicit definition overwrites the derived option.
///
/// Note that this is only a full definition of options for simple logic that can
/// be made explicit using the more detailed configuration for both derived
/// categories and explicit options. There are quite a few entries whose option
/// logic cannot be fully represented here, so that it needs to be implemented
/// manually.
/// Note that this is only a full definition of options for simple logic that can be made explicit using the more detailed configuration for both derived categories and explicit options. There are quite a few entries whose option logic cannot be fully represented here, so that it needs to be implemented manually.
public struct SelectOptions: EntitySubtype {
/// An entry category with optional further configuration. All available
/// entries from the specified categories will be included as separate select
/// options. You can also specify a set of groups that should only be
/// included. Groups not mentioned will be excluded then.
/// An entry category with optional further configuration. All available entries from the specified categories will be included as separate select options. You can also specify a set of groups that should only be included. Groups not mentioned will be excluded then.
public let derived: SelectOptionCategory?
/// A list of explicit select options. If the identifier has a specific type,
/// its entry is the base of this select option, where values defined here
/// override values from the base. Define the `src` property if the options
/// are not derived from the rules text of the advantage/disadvantage/special
/// ability but instead are listed in a separate block and/or on a separate
/// page.
/// A list of explicit select options. If the identifier has a specific type, its entry is the base of this select option, where values defined here override values from the base. Define the `src` property if the options are not derived from the rules text of the advantage/disadvantage/special ability but instead are listed in a separate block and/or on a separate page.
public let explicit: [ExplicitSelectOption]?
}
@@ -70,28 +51,18 @@ public struct ExplicitGeneralSelectOption: EntitySubtype {
/// The option's identifier. An unique, increasing integer.
public let id: Int
/// Sometimes, professions use specific text selections that are not
/// contained in described lists. This ensures you can use them for
/// professions only. They are not going to be displayed as options to the
/// user.
/// Sometimes, professions use specific text selections that are not contained in described lists. This ensures you can use them for professions only. They are not going to be displayed as options to the user.
public let professionOnly: Bool?
/// Registers new applications, which get enabled once this entry is
/// activated with its respective select option. It specifies an entry-unique
/// identifier and the skill it belongs to. A translation can be left out if
/// its name equals the name of the origin select option.
/// Registers new applications, which get enabled once this entry is activated with its respective select option. It specifies an entry-unique identifier and the skill it belongs to. A translation can be left out if its name equals the name of the origin select option.
public let skillApplications: SkillApplications?
/// Registers uses, which get enabled once this entry is activated with its
/// respective select option. It specifies an entry-unique identifier and the
/// skill it belongs to. A translation can be left out if its name equals the
/// name of the origin select option.
/// Registers uses, which get enabled once this entry is activated with its respective select option. It specifies an entry-unique identifier and the skill it belongs to. A translation can be left out if its name equals the name of the origin select option.
public let skillUses: SkillUses?
public let prerequisites: GeneralPrerequisites?
/// Specific binding cost for the select option. Only has an effect if the
/// associated entry supports binding costs.
/// Specific binding cost for the select option. Only has an effect if the associated entry supports binding costs.
public let bindingCost: Int?
/// Specific AP cost for the select option.
@@ -119,12 +90,10 @@ public struct ExplicitGeneralSelectOptionTranslation: EntitySubtype {
/// The name of the select option.
public let name: String
/// The name of the select option when displayed in a generated
/// profession text.
/// The name of the select option when displayed in a generated profession text.
public let nameInProfession: String?
/// The description of the select option. Useful for Bad Habits, Trade
/// Secrets and other entries where a description is available.
/// The description of the select option. Useful for Bad Habits, Trade Secrets and other entries where a description is available.
public let description: String?
public let errata: Errata?
@@ -141,22 +110,15 @@ public struct ExplicitSkillSelectOption: EntitySubtype {
/// The skill's identifier. An unique, increasing integer.
public let id: SkillIdentifier
/// Registers new applications, which get enabled once this entry is
/// activated with its respective select option. It specifies an entry-unique
/// identifier and the skill it belongs to. A translation can be left out if
/// its name equals the name of the origin select option.
/// Registers new applications, which get enabled once this entry is activated with its respective select option. It specifies an entry-unique identifier and the skill it belongs to. A translation can be left out if its name equals the name of the origin select option.
public let skillApplications: [SkillApplicationOrUse]?
/// Registers uses, which get enabled once this entry is activated with its
/// respective select option. It specifies an entry-unique identifier and the
/// skill it belongs to. A translation can be left out if its name equals the
/// name of the origin select option.
/// Registers uses, which get enabled once this entry is activated with its respective select option. It specifies an entry-unique identifier and the skill it belongs to. A translation can be left out if its name equals the name of the origin select option.
public let skillUses: [SkillApplicationOrUse]?
public let prerequisites: GeneralPrerequisites?
/// Specific binding cost for the select option. Only has an effect if the
/// associated entry supports binding costs.
/// Specific binding cost for the select option. Only has an effect if the associated entry supports binding costs.
public let bindingCost: Int?
/// Specific AP cost for the select option.
@@ -189,8 +151,7 @@ public struct ExplicitCombatTechniqueSelectOption: EntitySubtype {
public let prerequisites: GeneralPrerequisites?
/// Specific binding cost for the select option. Only has an effect if the
/// associated entry supports binding costs.
/// Specific binding cost for the select option. Only has an effect if the associated entry supports binding costs.
public let bindingCost: Int?
/// Specific AP cost for the select option.
@@ -228,17 +189,13 @@ public enum CombatSpecialAbilityUsageType: String, EntitySubtype {
case specialManeuver = "SpecialManeuver"
}
/// The definition of if the combat special ability can be used when armed or
/// when unarmed.
/// The definition of if the combat special ability can be used when armed or when unarmed.
public enum CombatSpecialAbilityType: String, EntitySubtype {
case armed = "Armed"
case unarmed = "Unarmed"
}
/// Registers new skill applications, which get enabled once this entry is
/// activated. It specifies an entry-unique identifier and the skill it belongs
/// to. A translation can be left out if its name equals the name of the origin
/// activatable entry.
/// Registers new skill applications, which get enabled once this entry is activated. It specifies an entry-unique identifier and the skill it belongs to. A translation can be left out if its name equals the name of the origin activatable entry.
public typealias SkillApplications = [SkillApplication]
public struct SkillApplication: EntitySubtype {
@@ -262,9 +219,7 @@ public struct SkillApplicationAssociatedSkills: EntitySubtype {
/// The skills this application belongs to.
public let list: [SkillReference]
/// If an application applies to multiple skills, it may need to ensure the
/// respective skill is on a certain skill rating if the activatable entry
/// cannot ensure this prerequisite.
/// If an application applies to multiple skills, it may need to ensure the respective skill is on a certain skill rating if the activatable entry cannot ensure this prerequisite.
public let requiredSkillRating: Int?
private enum CodingKeys: String, CodingKey {
@@ -278,9 +233,7 @@ public struct SkillApplicationTranslation: EntitySubtype {
public let name: NonEmptyString
}
/// Registers uses, which get enabled once this entry is activated. It specifies
/// an entry-unique identifier and the skill it belongs to. A translation can be
/// left out if its name equals the name of the origin activatable entry.
/// Registers uses, which get enabled once this entry is activated. It specifies an entry-unique identifier and the skill it belongs to. A translation can be left out if its name equals the name of the origin activatable entry.
public typealias SkillUses = [SkillUse]
public struct SkillUse: EntitySubtype {
@@ -398,13 +351,10 @@ public struct PenaltySelectionOptionsRange: EntitySubtype {
}
public struct PenaltyByLevel: EntitySubtype {
/// A continuous range of penalties for each level. The first element is the
/// penalty for the first level, the second element is the penalty for the
/// second level, and so on.
/// A continuous range of penalties for each level. The first element is the penalty for the first level, the second element is the penalty for the second level, and so on.
public let levels: [PenaltyByLevelLevel]
/// The combat-related special ability of which the level defines the penalty
/// instead.
/// The combat-related special ability of which the level defines the penalty instead.
public let external: PenaltyByExternalLevel?
}
@@ -413,21 +363,14 @@ public struct PenaltyByLevelLevel: EntitySubtype {
public let value: Int
}
/// The combat-related special ability of which the level defines the penalty
/// instead.
/// The combat-related special ability of which the level defines the penalty instead.
public struct PenaltyByExternalLevel: EntitySubtype {
/// The identifier of the combat-related special ability of which the level
/// defines the penalty instead.
/// The identifier of the combat-related special ability of which the level defines the penalty instead.
public let id: CombatRelatedSpecialAbilityIdentifier
}
public struct PenaltyByAttack: EntitySubtype {
/// A list of penalties for subsequent attacks. The first element is the
/// penalty for the first attack, the second element is the penalty for the
/// second attack, and so on. The order of the first element may be changed
/// using `initial_order`, so that e.g. if set to `2`, the first element is
/// the penalty for the second attack, the second element is the penalty for
/// the third attack, and so on.
/// A list of penalties for subsequent attacks. The first element is the penalty for the first attack, the second element is the penalty for the second attack, and so on. The order of the first element may be changed using `initial_order`, so that e.g. if set to `2`, the first element is the penalty for the second attack, the second element is the penalty for the third attack, and so on.
public let list: [PenaltyByAttackOrderItem]
/// The order of the first element in the `list` of penalties.
@@ -483,9 +426,7 @@ public struct FixedArcaneEnergyCost: EntitySubtype {
/// Specified if the AE cost `value` has to be paid for each time interval.
public let interval: DurationUnitValue?
/// The AE cost are per level of the enchantment. It may either be displayed
/// in a compressed way (e.g. `1 AE per level`) or in a verbose way (e.g. `1
/// AE for level I; 2 AE for level II`).
/// The AE cost are per level of the enchantment. It may either be displayed in a compressed way (e.g. `1 AE per level`) or in a verbose way (e.g. `1 AE for level I; 2 AE for level II`).
public let perLevel: FixedArcaneEnergyCostPerLevel?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -500,9 +441,7 @@ public struct FixedArcaneEnergyCost: EntitySubtype {
}
}
/// The AE cost are per level of the enchantment. It may either be displayed
/// in a compressed way (e.g. `1 AE per level`) or in a verbose way (e.g. `1
/// AE for level I; 2 AE for level II`).
/// The AE cost are per level of the enchantment. It may either be displayed in a compressed way (e.g. `1 AE per level`) or in a verbose way (e.g. `1 AE for level I; 2 AE for level II`).
public enum FixedArcaneEnergyCostPerLevel: String, EntitySubtype {
case compressed = "Compressed"
case verbose = "Verbose"
@@ -517,8 +456,7 @@ public struct ArcaneEnergyCostPerCountable: EntitySubtype {
/// The AE cost value that has to be per a specific countable entity.
public let value: Int
/// If defined, in addition to the cost per entity you have to pay a flat
/// amount, regardless of the entity count.
/// If defined, in addition to the cost per entity you have to pay a flat amount, regardless of the entity count.
public let baseValue: Int?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -532,8 +470,7 @@ public struct ArcaneEnergyCostPerCountable: EntitySubtype {
}
public struct ArcaneEnergyCostPerCountableTranslation: EntitySubtype {
/// The cost have to be per a specific countable entity, e.g. `8 AE per
/// person`.
/// The cost have to be per a specific countable entity, e.g. `8 AE per person`.
public let per: ResponsiveText
/// A note, appended to the generated string in parenthesis.
@@ -549,8 +486,7 @@ public struct IntervalArcaneEnergyCost: EntitySubtype {
}
public struct ActivationAndHalfIntervalArcaneEnergyCost: EntitySubtype {
/// The AE cost value that has to be payed for activation. Half of this value
/// has to be payed each interval.
/// The AE cost value that has to be payed for activation. Half of this value has to be payed each interval.
public let value: Int
/// The time interval for which the AE cost `value` has to be paid.
@@ -558,8 +494,7 @@ public struct ActivationAndHalfIntervalArcaneEnergyCost: EntitySubtype {
}
public struct IndefiniteArcaneEnergyCost: EntitySubtype {
/// Specified if the indefinite AP cost description needs to be modified by a
/// certain value.
/// Specified if the indefinite AP cost description needs to be modified by a certain value.
public let modifier: IndefiniteArcaneEnergyCostModifier?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -584,8 +519,7 @@ public struct IndefiniteArcaneEnergyCostTranslation: EntitySubtype {
}
public struct ArcaneEnergyCostDisjunction: EntitySubtype {
/// Specified if the selected AE cost option has to be paid for each time
/// interval.
/// Specified if the selected AE cost option has to be paid for each time interval.
public let interval: ArcaneEnergyCostDisjunctionInterval?
/// The possible AE cost values.
@@ -603,8 +537,7 @@ public struct ArcaneEnergyCostDisjunctionInterval: EntitySubtype {
/// **not** as a part of the first interval that has to be payed, so that
/// the first interval payment needs to be done after the activation.
///
/// This works different than other sustained spells, since for them the
/// end of the cast usually already counts as part of the first interval.
/// This works different than other sustained spells, since for them the end of the cast usually already counts as part of the first interval.
public let afterActivation: Bool
private enum CodingKeys: String, CodingKey {
@@ -659,9 +592,7 @@ public struct VolumePerLevel: EntitySubtype {
}
public struct VolumeByLevel: EntitySubtype {
/// The volume points for each level. The first element is the volume points
/// for the first level, the second element is the volume points for the
/// second level, and so on.
/// The volume points for each level. The first element is the volume points for the first level, the second element is the volume points for the second level, and so on.
public let list: [VolumeByLevelItem]
}
@@ -670,9 +601,7 @@ public struct VolumeByLevelItem: EntitySubtype {
public let points: Int
}
/// A content that is `3/4/5 Points for Chimera, Daimonid, Golems, Undead /
/// Fairies, Ghosts / Demons, Elementals` may be respresented as the following
/// map:
/// A content that is `3/4/5 Points for Chimera, Daimonid, Golems, Undead / Fairies, Ghosts / Demons, Elementals` may be respresented as the following map:
///
/// ```yaml
/// options:
@@ -708,9 +637,7 @@ public struct VolumeByLevelItem: EntitySubtype {
/// label_standalone: "Demons/Elementals"
/// ```
///
/// This will generate the exact same string as seen above. The associated
/// options are not present in the example, but they link to the options the
/// volume specification is meant for.
/// This will generate the exact same string as seen above. The associated options are not present in the example, but they link to the options the volume specification is meant for.
public struct VolumeMap: EntitySubtype {
/// The possible costs and associated labels.
public let options: [VolumeMapOption]
@@ -726,10 +653,7 @@ public struct VolumeMapTranslation: EntitySubtype {
/// Place a string after the grouped map option labels.
public let listAppend: String?
/// If the string from the book cannot be generated using the default
/// generation technique, use this string. All options still need to be
/// inserted propertly, since it may be used by in-game tools to provide a
/// selection to players.
/// If the string from the book cannot be generated using the default generation technique, use this string. All options still need to be inserted propertly, since it may be used by in-game tools to provide a selection to players.
public let replacement: String?
private enum CodingKeys: String, CodingKey {
@@ -765,8 +689,7 @@ public struct VolumeMapOptionTranslation: EntitySubtype {
/// The description of the option for cost string generation.
public let label: NonEmptyString
/// The description of the option if used standalone. Only used if
/// different from `label`.
/// The description of the option if used standalone. Only used if different from `label`.
public let labelStandalone: NonEmptyString?
private enum CodingKeys: String, CodingKey {
@@ -792,8 +715,7 @@ public enum BindingCost: EntitySubtype {
public struct FixedBindingCost: EntitySubtype {
/// The permanent AE cost.
///
/// If the enchantment has multiple levels, it is only applied for the first
/// level.
/// If the enchantment has multiple levels, it is only applied for the first level.
public let permanentValue: Int
private enum CodingKeys: String, CodingKey {
@@ -810,9 +732,7 @@ public struct BindingCostPerLevel: EntitySubtype {
}
}
/// A content that is `2/4/8 permanent AE for spell-swords with the combat
/// technique Daggers, Swords, or Two-Handed Swords` may be respresented as the
/// following map:
/// A content that is `2/4/8 permanent AE for spell-swords with the combat technique Daggers, Swords, or Two-Handed Swords` may be respresented as the following map:
///
/// ```yaml
/// options:
@@ -850,10 +770,7 @@ public struct BindingCostMapTranslation: EntitySubtype {
/// Place a string after the grouped map option labels.
public let listAppend: NonEmptyString?
/// If the string from the book cannot be generated using the default
/// generation technique, use this string. All options still need to be
/// inserted propertly, since it may be used by in-game tools to provide a
/// selection to players.
/// If the string from the book cannot be generated using the default generation technique, use this string. All options still need to be inserted propertly, since it may be used by in-game tools to provide a selection to players.
public let replacement: NonEmptyString?
private enum CodingKeys: String, CodingKey {
@@ -880,8 +797,7 @@ public struct BindingCostMapOptionTranslation: EntitySubtype {
/// The description of the option for cost string generation.
public let label: NonEmptyString
/// The description of the option if used standalone. Only used if
/// different from `label`.
/// The description of the option if used standalone. Only used if different from `label`.
public let labelStandalone: NonEmptyString?
private enum CodingKeys: String, CodingKey {
@@ -895,8 +811,7 @@ public struct BindingCostDerivedFromSelection: EntitySubtype {
public let fallback: Int
}
/// The magic property's identifier. `DependingOnProperty` can only be used if
/// the special ability has an option to select a property.
/// The magic property's identifier. `DependingOnProperty` can only be used if the special ability has an option to select a property.
@DiscriminatedEnum
public enum PropertyDeclaration: EntitySubtype {
case dependingOnSelection
@@ -919,8 +834,7 @@ public struct RestrictAdvancedSpecialAbilityOptions<Identifier: EntitySubtype>:
/// The advanced special abilitys identifier.
public let id: Identifier
/// Specify the select option(s) that only are allowed for the referenced
/// advanced special ability; others are disallowed.
/// Specify the select option(s) that only are allowed for the referenced advanced special ability; others are disallowed.
public let option: [AdvancedSpecialAbilityRestrictedOptionIdentifier]
}
@@ -928,8 +842,7 @@ public struct OneOfAdvancedSpecialAbilityOptions<Identifier: EntitySubtype>: Ent
/// The possible advanced special abilities.
public let options: [AdvancedSpecialAbilityReference<Identifier>]
/// Do have to choose the advanced special ability when buying the style
/// special ability? Otherwise the decision can be made later.
/// Do have to choose the advanced special ability when buying the style special ability? Otherwise the decision can be made later.
public let isSelectionRequiredOnPurchase: Bool
public let displayOption: DisplayOption?
@@ -957,8 +870,7 @@ public struct AdvancedSpecialAbilityDerivedFromExternalOption<Identifier: Entity
}
}
/// Mapping from an option of the external entry to an allowed advanced special
/// ability.
/// Mapping from an option of the external entry to an allowed advanced special ability.
public struct AdvancedSpecialAbilityDerivedFromExternalOptionMapping<Identifier: EntitySubtype>: EntitySubtype {
/// The select option's identifier.
public let fromOption: PatronIdentifier
@@ -976,15 +888,10 @@ public typealias AdvancedSpecialAbilityDerivedExternalEntryId = MagicalTradition
public typealias AdvancedSpecialAbilityDerivedExternalEntryOptionId = PatronIdentifier
/// The Advanced Special Abilities for the respective Style Special Ability.
/// Sometimes, only a specific select option or a set of select options of an
/// entry is allowed, which can be modelled by the option property. It can also
/// be that you can choose from a set of special abilities, but then you can't
/// specify an option.
/// The Advanced Special Abilities for the respective Style Special Ability. Sometimes, only a specific select option or a set of select options of an entry is allowed, which can be modelled by the option property. It can also be that you can choose from a set of special abilities, but then you can't specify an option.
public typealias AdvancedSpecialAbilities<Identifier: EntitySubtype> = [AdvancedSpecialAbility<Identifier>]
/// The prerequisites text. It is only used if the text cannot be generated from
/// the given information.
/// The prerequisites text. It is only used if the text cannot be generated from the given information.
public typealias PrerequisitesReplacement = NonEmptyMarkdown
@DiscriminatedEnum
@@ -1084,26 +991,20 @@ public enum AdventurePointsValue: EntitySubtype {
case indefinite
}
/// A fixed adventure points value. If the entry has levels, this is the cost per
/// level as well.
/// A fixed adventure points value. If the entry has levels, this is the cost per level as well.
public typealias FixedAdventurePointsValue = AdventurePointsSingleValue
/// An entry with levels may have different costs for each level. The length of
/// the list must match the amount of levels the special ability has.
/// An entry with levels may have different costs for each level. The length of the list must match the amount of levels the special ability has.
public typealias AdventurePointsValueByLevel = [AdventurePointsSingleValue]
/// The adventure points value is derived from the selection of the special
/// ability. Its display value may be able to be derived from the given
/// information for the select options. If that is not the case or the generated
/// text would not match the original one, a replacement text can be provided.
/// The adventure points value is derived from the selection of the special ability. Its display value may be able to be derived from the given information for the select options. If that is not the case or the generated text would not match the original one, a replacement text can be provided.
public struct AdventurePointsDerivedFromSelection: EntitySubtype {
/// All translations for the entry, identified by IETF language tag (BCP47).
public let translations: LocaleMap<AdventurePointsDerivedFromSelectionTranslation>?
}
public struct AdventurePointsDerivedFromSelectionTranslation: EntitySubtype {
/// A replacement for the generated text if it would not match the original
/// one.
/// A replacement for the generated text if it would not match the original one.
public let replacement: NonEmptyMarkdown?
}
@@ -1113,11 +1014,8 @@ public typealias AdventurePointsSingleValue = Int
/// A string that is used as a label for an input field.
public typealias Input = NonEmptyString
/// The AP value. It is only used if the text cannot be generated from the given
/// information.
/// The AP value. It is only used if the text cannot be generated from the given information.
public typealias AdventurePointsValueReplacement = NonEmptyMarkdown
/// A string that gets appended to the default AP Value text with a preceding
/// space. This always happens if present, even if the generated AP Value text is
/// replaced.
/// A string that gets appended to the default AP Value text with a preceding space. This always happens if present, even if the generated AP Value text is replaced.
public typealias AdventurePointsValueAppend = NonEmptyMarkdown
@@ -33,8 +33,7 @@ public enum SelectOptionCategory: EntitySubtype {
}
public struct BlessedTraditionsSelectOptionCategory: EntitySubtype {
/// Should the principles (code) of the tradition be required to select the
/// respective tradition?
/// Should the principles (code) of the tradition be required to select the respective tradition?
public let requirePrinciples: Bool?
private enum CodingKeys: String, CodingKey {
@@ -51,8 +50,7 @@ public struct PropertiesSelectOptionCategory: EntitySubtype {
/// Does each property require it's corresponding property knowledge?
public let requireKnowledge: Bool?
/// Require a minimum number of spellworks of the respective property to be
/// on a minimum skill rating.
/// Require a minimum number of spellworks of the respective property to be on a minimum skill rating.
public let requireMinimumSpellworksOn: RequiredMinimumSkillsToBeOnSkillRating?
private enum CodingKeys: String, CodingKey {
@@ -65,14 +63,10 @@ public struct AspectSelectOptionCategory: EntitySubtype {
/// Does each aspect require it's corresponding aspect knowledge?
public let requireKnowledge: Bool?
/// The generated name should be the *Master of (Aspect)* suffix for this
/// aspect instead of the aspect's name. If an aspect does not provide a
/// suffix (such as the General aspect), it is automatically excluded from
/// the list.
/// The generated name should be the *Master of (Aspect)* suffix for this aspect instead of the aspect's name. If an aspect does not provide a suffix (such as the General aspect), it is automatically excluded from the list.
public let useMasterOfSuffixAsName: Bool?
/// Require a minimum number of liturgies of the respective aspect to be on a
/// minimum skill rating.
/// Require a minimum number of liturgies of the respective aspect to be on a minimum skill rating.
public let requireMinimumLiturgiesOn: RequiredMinimumSkillsToBeOnSkillRating?
private enum CodingKeys: String, CodingKey {
@@ -82,15 +76,12 @@ public struct AspectSelectOptionCategory: EntitySubtype {
}
}
/// Require a minimum number of spellworks/liturgies of the respective
/// property/aspect to be on a minimum skill rating.
/// Require a minimum number of spellworks/liturgies of the respective property/aspect to be on a minimum skill rating.
public struct RequiredMinimumSkillsToBeOnSkillRating: EntitySubtype {
/// The minimum number of liturgies that need to be on the defined minimum
/// skill rating.
/// The minimum number of liturgies that need to be on the defined minimum skill rating.
public let number: Int
/// The minimum skill rating the defined minimum number of liturgies need
/// to be on.
/// The minimum skill rating the defined minimum number of liturgies need to be on.
public let rating: Int
}
@@ -139,22 +130,13 @@ public struct SkillSelectOptionCategoryCategory: EntitySubtype {
/// Only include entries of the specified groups.
public let groups: [SkillGroupReference]?
/// Only include (`Intersection`) or exclude (`Difference`) specific
/// skills.
/// Only include (`Intersection`) or exclude (`Difference`) specific skills.
public let specific: SpecificFromSkillSelectOptionCategoryCategory<SkillReference>?
/// Registers new applications, which get enabled once this entry is
/// activated with its respective select option. It specifies an
/// entry-unique identifier, the skill it belongs to is derived from the
/// select option automatically. A translation can be left out if its
/// name equals the name of the origin entry.
/// Registers new applications, which get enabled once this entry is activated with its respective select option. It specifies an entry-unique identifier, the skill it belongs to is derived from the select option automatically. A translation can be left out if its name equals the name of the origin entry.
public let skillApplications: [SkillApplicationOrUse]?
/// Registers uses, which get enabled once this entry is activated with
/// its respective select option. It specifies an entry-unique
/// identifier, the skill it belongs to is derived from the select option
/// automatically. A translation can be left out if its name equals the
/// name of the origin entry.
/// Registers uses, which get enabled once this entry is activated with its respective select option. It specifies an entry-unique identifier, the skill it belongs to is derived from the select option automatically. A translation can be left out if its name equals the name of the origin entry.
public let skillUses: [SkillApplicationOrUse]?
/// Generate prerequisites for each entry of the category.
@@ -201,8 +183,7 @@ public struct SkillApplicationOrUse: EntitySubtype {
}
public struct SkillApplicationOrUseTranslation: EntitySubtype {
/// The name of the application or use if different from the activatable
/// entry's name.
/// The name of the application or use if different from the activatable entry's name.
public let name: String
}
@@ -273,8 +254,7 @@ public struct SelectOptionsFixedAdventurePointsValue<Identifier: EntitySubtype>:
/// A mapping of skill identifiers to their specific AP values.
public let map: [SelectOptionsFixedAdventurePointsValueMapping<Identifier>]
/// The default value of an entry. Used as a fallback if no value is
/// found in `list`.
/// The default value of an entry. Used as a fallback if no value is found in `list`.
public let `default`: Int
}
@@ -22,18 +22,14 @@ public struct ModifiableCastingTime: EntitySubtype {
}
}
/// The casting time may have two different values: One for use in normal time,
/// i. e. actions, combat rounds and others, and one for use during lovemaking,
/// which is a rule set from Aventurian Intimacy.
/// The casting time may have two different values: One for use in normal time, i. e. actions, combat rounds and others, and one for use during lovemaking, which is a rule set from Aventurian Intimacy.
///
/// There must always be at least one casting time value.
public struct CastingTimeIncludingLovemaking<NonModifiable: EntitySubtype>: EntitySubtype {
/// The default casting time definition.
public let `default`: CastingTime<NonModifiable>?
/// The casting time during lovemaking. In Aventurian Intimacy, you may only
/// use an activatable skill during lovemaking if it has a casting time used
/// during lovemaking.
/// The casting time during lovemaking. In Aventurian Intimacy, you may only use an activatable skill during lovemaking if it has a casting time used during lovemaking.
public let duringLovemaking: CastingTimeDuringLovemaking?
private enum CodingKeys: String, CodingKey {
@@ -42,9 +38,7 @@ public struct CastingTimeIncludingLovemaking<NonModifiable: EntitySubtype>: Enti
}
}
/// The casting time during lovemaking. In Aventurian Intimacy, you may only use
/// an activatable skill during lovemaking if it has a casting time used during
/// lovemaking.
/// The casting time during lovemaking. In Aventurian Intimacy, you may only use an activatable skill during lovemaking if it has a casting time used during lovemaking.
public struct CastingTimeDuringLovemaking: EntitySubtype {
/// The (unitless) casting time value.
public let value: Int
@@ -56,8 +56,7 @@ public struct NonModifiableOneTimeCost: EntitySubtype {
/// The part of the cost value that has to be spent permanently.
public let permanentValue: Int?
/// The cost have to be per a specific countable entity, e.g. `8 KP per
/// person`.
/// The cost have to be per a specific countable entity, e.g. `8 KP per person`.
public let per: NonModifiableOneTimeCostPerCountable?
/// All translations for the entry, identified by IETF language tag
@@ -74,8 +73,7 @@ public struct NonModifiableOneTimeCost: EntitySubtype {
}
public struct NonModifiableOneTimeCostPerCountable: EntitySubtype {
/// If defined, the minimum total AE that have to be spent casting the
/// skill.
/// If defined, the minimum total AE that have to be spent casting the skill.
public let minimumTotal: Double?
/// All translations for the entry, identified by IETF language tag
@@ -108,8 +106,7 @@ public struct IndefiniteOneTimeCostTranslation: EntitySubtype {
public let description: ResponsiveText
}
/// A content that is `2/4/8/16 AE for an item the size of a
/// cup/chest/door/castle gate` may be respresented as the following map:
/// A content that is `2/4/8/16 AE for an item the size of a cup/chest/door/castle gate` may be respresented as the following map:
///
/// ```yaml
/// options:
@@ -124,8 +121,7 @@ public struct IndefiniteOneTimeCostTranslation: EntitySubtype {
/// for_append: "an item the size of a"
/// ```
///
/// This will generate the exact same string as seen above given it is set
/// for a spellwork and thus `AE` is used.
/// This will generate the exact same string as seen above given it is set for a spellwork and thus `AE` is used.
public struct CostMap: EntitySubtype {
/// The possible costs and associated labels.
public let options: [CostMapOption]
@@ -155,8 +151,7 @@ public struct CostMapOptionTranslation: EntitySubtype {
/// The description of the option for cost string generation.
public let label: NonEmptyString
/// The description of the option if used standalone. Only used if
/// different from `label`.
/// The description of the option if used standalone. Only used if different from `label`.
public let labelStandalone: NonEmptyString?
private enum CodingKeys: String, CodingKey {
@@ -172,10 +167,7 @@ public struct CostMapTranslation: EntitySubtype {
/// Place a string after the grouped map option labels.
public let listAppend: NonEmptyString?
/// If the string from the book cannot be generated using the default
/// generation technique, use this string. All options still need to be
/// inserted propertly, since it may be used by in-game tools to provide a
/// selection to players.
/// If the string from the book cannot be generated using the default generation technique, use this string. All options still need to be inserted propertly, since it may be used by in-game tools to provide a selection to players.
public let replacement: NonEmptyString?
private enum CodingKeys: String, CodingKey {
@@ -211,8 +203,7 @@ public struct NonModifiableSustainedCost: EntitySubtype {
/// The AE cost value.
public let value: Int
/// The cost have to be per a specific countable entity, e.g. `8 KP per
/// person per 5 minutes`.
/// The cost have to be per a specific countable entity, e.g. `8 KP per person per 5 minutes`.
public let per: NonModifiableSustainedCostPerCountable?
/// The sustain interval.
@@ -227,8 +218,7 @@ public struct NonModifiableSustainedCost: EntitySubtype {
}
public struct NonModifiableSustainedCostPerCountable: EntitySubtype {
/// If defined, the minimum total AE that have to be spent casting the
/// skill.
/// If defined, the minimum total AE that have to be spent casting the skill.
public let minimumTotal: Double?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -7,9 +7,7 @@
import DiscriminatedEnum
/// 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.
/// 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.
@DiscriminatedEnum
public enum ActivatableSkillEffect: EntitySubtype {
case plain(ActivatableSkillPlainEffect)
@@ -23,16 +21,13 @@ public struct ActivatableSkillPlainEffect: EntitySubtype {
}
public struct ActivatableSkillEffectForEachQualityLevel: EntitySubtype {
/// The effect description before the list of effects for each quality
/// level.
/// The effect description before the list of effects for each quality level.
public let textBefore: NonEmptyMarkdown
/// The list of effects for each quality level. The first element
/// represents QL 1, the second element QL 2, and so on.
/// The list of effects for each quality level. The first element represents QL 1, the second element QL 2, and so on.
public let qualityLevels: [NonEmptyMarkdown]
/// The effect description after the list of effects for each quality
/// level.
/// The effect description after the list of effects for each quality level.
public let textAfter: NonEmptyMarkdown?
private enum CodingKeys: String, CodingKey {
@@ -43,17 +38,13 @@ public struct ActivatableSkillEffectForEachQualityLevel: EntitySubtype {
}
public struct ActivatableSkillEffectForEachTwoQualityLevels: EntitySubtype {
/// The effect description before the list of effects for each quality
/// level.
/// The effect description before the list of effects for each quality level.
public let textBefore: NonEmptyMarkdown
/// The list of effects for each two quality levels. The first element
/// represents QL 12, the second element QL 34 and the third element QL
/// 56.
/// The list of effects for each two quality levels. The first element represents QL 12, the second element QL 34 and the third element QL 56.
public let qualityLevels: [NonEmptyMarkdown]
/// The effect description after the list of effects for each quality
/// level.
/// The effect description after the list of effects for each quality level.
public let textAfter: NonEmptyMarkdown?
private enum CodingKeys: String, CodingKey {
@@ -90,13 +90,10 @@ public struct CheckResultBasedRange: EntitySubtype {
}
public struct RangeTranslation: EntitySubtype {
/// A note, appended to the generated string in parenthesis. If the
/// generated is modified using `replacement`, the note is appended to
/// the modifier string.
/// A note, appended to the generated string in parenthesis. If the generated is modified using `replacement`, the note is appended to the modifier string.
public let note: ResponsiveTextOptional?
/// A replacement string. If `note` is provided, it is appended to the
/// replaced string.
/// A replacement string. If `note` is provided, it is appended to the replaced string.
public let replacement: ResponsiveTextReplace?
}
@@ -9,8 +9,7 @@ import DiscriminatedEnum
/// The target category the kind of creature or object the skill affects.
///
/// If no target categories are given, the skill applies to all target
/// categories.
/// If no target categories are given, the skill applies to all target categories.
public typealias AffectedTargetCategories = [SpecificAffectedTargetCategory]
public struct SpecificAffectedTargetCategory: EntitySubtype {
@@ -17,8 +17,6 @@ public struct SkillTraditionWithAspects: EntitySubtype {
/// The blessed tradition.
public let tradition: BlessedTraditionReference
/// The aspect(s) from the tradition the ceremony belongs to. Note that not
/// all traditions have aspects. Traditions with aspects must have at least one
/// aspect specified.
/// The aspect(s) from the tradition the ceremony belongs to. Note that not all traditions have aspects. Traditions with aspects must have at least one aspect specified.
public let aspects: [AspectReference]?
}
@@ -7,18 +7,14 @@
import DiscriminatedEnum
/// Depending on the disease, apply Spirit or Toughness as a penalty to the
/// disease roll. It may also happen that the lower of both is applied as a
/// penalty.
/// Depending on the disease, apply Spirit or Toughness as a penalty to the disease roll. It may also happen that the lower of both is applied as a penalty.
public enum Resistance: String, EntitySubtype {
case spirit = "Spirit"
case toughness = "Toughness"
case lowerOfSpiritAndToughness = "LowerOfSpiritAndToughness"
}
/// What causes the disease? The GM rolls 1D20 to see if a character gets
/// infected. If the infection check succeeds, the GM makes a disease check to
/// determine the severity of the infection.
/// What causes the disease? The GM rolls 1D20 to see if a character gets infected. If the infection check succeeds, the GM makes a disease check to determine the severity of the infection.
public struct Cause: EntitySubtype {
/// The chance to get infected by this cause, in percent.
public let chance: Int?
@@ -31,9 +27,7 @@ public struct CauseTranslation: EntitySubtype {
/// The name of the cause.
public let name: String
/// The chance to get infected by this cause. If present for this
/// language, this overrides the universal `chance` field; they cannot be
/// used at the same time.
/// The chance to get infected by this cause. If present for this language, this overrides the universal `chance` field; they cannot be used at the same time.
public let chance: NonEmptyString?
/// An additional note about this cause.
@@ -53,12 +47,10 @@ public struct DiseaseTranslation: EntitySubtype {
/// After infection, how much time passes before symptoms appear?
public let incubationTime: NonEmptyString
/// The damage caused by the disease. If the disease check fails, apply the
/// lessened effects.
/// The damage caused by the disease. If the disease check fails, apply the lessened effects.
public let damage: Reduceable<NonEmptyMarkdown>
/// The duration of the disease. If the disease check fails, use the
/// lessened duration.
/// The duration of the disease. If the disease check fails, use the lessened duration.
public let duration: Reduceable<NonEmptyMarkdown>
/// Special information about the disease.
@@ -86,16 +78,13 @@ public struct DiseaseTranslation: EntitySubtype {
}
}
/// An effect or other parameter that may be reduced by a failed disease check
/// for lessening or a degraded poison.
/// An effect or other parameter that may be reduced by a failed disease check for lessening or a degraded poison.
///
/// This streamlines the wording for diseases and poison by using a unified
/// wording for *lessened* (disease) and *degraded* (poison).
/// This streamlines the wording for diseases and poison by using a unified wording for *lessened* (disease) and *degraded* (poison).
public struct Reduceable<Content: EntitySubtype>: EntitySubtype {
/// The default value. In the source, it's the text before the slash.
public let `default`: Content
/// The reduced value. In the source, it's the text after the slash. Some
/// entries may not have a reduced value.
/// The reduced value. In the source, it's the text after the slash. Some entries may not have a reduced value.
public let reduced: Content?
}
@@ -17,8 +17,7 @@ public struct Enhancement: EntitySubtype {
/// The skill rating required to learn this enhancement.
public let skillRating: Int
/// The value to multiply with the numeric representation of the associated
/// skill's improvement cost to form the final AP cost of this enhancement.
/// The value to multiply with the numeric representation of the associated skill's improvement cost to form the final AP cost of this enhancement.
public let adventurePointsModifier: Int
public let prerequisites: EnhancementPrerequisites?
@@ -7,14 +7,7 @@
import DiscriminatedEnum
/// The item can be present in multiple pluralization categories; this object
/// unifies handling of them. Not all of the options must be present, however,
/// every possible category for that language should be defined. This means, that
/// different languages may have a different amount of properties defined here.
/// More information on pluralization and the Intl.PluralRules API on
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules,
/// https://unicode-org.github.io/cldr/ldml/tr35-numbers.html#Language_Plural_Rules and
/// http://cldr.unicode.org/index/cldr-spec/plural-rules.
/// The item can be present in multiple pluralization categories; this object unifies handling of them. Not all of the options must be present, however, every possible category for that language should be defined. This means, that different languages may have a different amount of properties defined here. More information on pluralization and the Intl.PluralRules API on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules, https://unicode-org.github.io/cldr/ldml/tr35-numbers.html#Language_Plural_Rules and http://cldr.unicode.org/index/cldr-spec/plural-rules.
///
/// From the third link:
///
@@ -23,16 +23,14 @@ public struct InfluenceTranslation: EntitySubtype {
/// The influence name.
public let name: NonEmptyString
/// The effects of the influence. They should be sorted like they are in
/// the book.
/// The effects of the influence. They should be sorted like they are in the book.
public let effects: [InfluenceEffect]
public let errata: Errata?
}
public struct InfluenceEffect: EntitySubtype {
/// An optional label that is displayed and placed before the actual
/// text.
/// An optional label that is displayed and placed before the actual text.
public let label: NonEmptyString?
/// The effect text.
@@ -7,9 +7,7 @@
import DiscriminatedEnum
/// A prerequisite group has no influence on validation logic. It serves as a
/// single unit for displaying purposes, where the source uses a prerequisites
/// item that cannot be represented as a single prerequisite.
/// A prerequisite group has no influence on validation logic. It serves as a single unit for displaying purposes, where the source uses a prerequisites item that cannot be represented as a single prerequisite.
public struct PrerequisiteGroup<T: EntitySubtype>: EntitySubtype {
public let list: [T]
@@ -7,8 +7,7 @@
import DiscriminatedEnum
/// A text from the source that can be also displayed in small areas using a
/// compressed version.
/// A text from the source that can be also displayed in small areas using a compressed version.
public struct ResponsiveText: EntitySubtype {
/// The full text from the source.
public let full: NonEmptyString
@@ -17,29 +16,20 @@ public struct ResponsiveText: EntitySubtype {
public let compressed: NonEmptyString
}
/// A text from the source that can be also displayed in small areas using a
/// compressed version. It is used as a replacement for a generated text while
/// the generated text is still provided and should be used.
/// A text from the source that can be also displayed in small areas using a compressed version. It is used as a replacement for a generated text while the generated text is still provided and should be used.
public struct ResponsiveTextReplace: EntitySubtype {
/// The full replacement string. It must contain `$1`, which is going to be
/// replaced with the generated string, so additional information can be
/// provided without duplicating concrete numeric values.
/// The full replacement string. It must contain `$1`, which is going to be replaced with the generated string, so additional information can be provided without duplicating concrete numeric values.
public let full: String
/// A compressed replacement string for use in small areas (e.g. on character
/// sheet). It must contain `$1`, which is going to be replaced with the
/// generated string, so additional information can be provided without
/// duplicating concrete numeric values.
/// A compressed replacement string for use in small areas (e.g. on character sheet). It must contain `$1`, which is going to be replaced with the generated string, so additional information can be provided without duplicating concrete numeric values.
public let compressed: String
}
/// A text from the source that can be also displayed in small areas using a
/// compressed version, if available.
/// A text from the source that can be also displayed in small areas using a compressed version, if available.
public struct ResponsiveTextOptional: EntitySubtype {
/// The full text from the source.
public let full: NonEmptyString
/// A compressed text for use in small areas (e.g. on character sheet). If this
/// is not present, it should not appear in those areas.
/// A compressed text for use in small areas (e.g. on character sheet). If this is not present, it should not appear in those areas.
public let compressed: NonEmptyString?
}
@@ -7,9 +7,7 @@
import DiscriminatedEnum
/// The tradition(s) the ritual is available for. It may be *generally*
/// available to all traditions or it may be only familiar in specific
/// traditions.
/// The tradition(s) the ritual is available for. It may be *generally* available to all traditions or it may be only familiar in specific traditions.
@DiscriminatedEnum
public enum Traditions: EntitySubtype {
case general
@@ -11,9 +11,7 @@ public struct EquipmentPackage: LocalizableEntity {
/// The equipment package's identifier. An unique, increasing integer.
public let id: Int
/// All items in the package. You have to provide the item (template)
/// identifier and you can optionally provide the number of how often an item
/// is included in the package.
/// All items in the package. You have to provide the item (template) identifier and you can optionally provide the number of how often an item is included in the package.
public let items: [EquipmentPackageItem]
public let src: PublicationRefs
@@ -145,8 +145,7 @@ public enum HitZone: EntitySubtype {
}
public struct HeadHitZone: EntitySubtype {
/// In some cases, multiple armors for the same hit zone can be combined.
/// They're listed at the item that can be combined with others.
/// In some cases, multiple armors for the same hit zone can be combined. They're listed at the item that can be combined with others.
public let combinationPossibilities: HeadHitZoneCombinationPossibilities?
private enum CodingKeys: String, CodingKey {
@@ -158,7 +157,6 @@ public struct HeadHitZoneCombinationPossibilities: EntitySubtype {
/// A list of armors that can be combined with this armor.
public let armors: [ArmorReference]
/// The PRO value that is added to the PRO value of the other armor instead
/// of adding the normale PRO value.
/// The PRO value that is added to the PRO value of the other armor instead of adding the normale PRO value.
public let protection: Int?
}
@@ -17,12 +17,10 @@ public struct BandageOrRemedy: LocalizableEntity {
/// The complexity of crafting the item.
public let complexity: Complexity?
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints?
/// 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.
/// 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.
public let combatUse: CombatUse?
public let src: PublicationRefs
@@ -17,8 +17,7 @@ public struct Book: LocalizableEntity {
/// The complexity of crafting the item.
public let complexity: Complexity
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints
public let src: PublicationRefs
@@ -17,15 +17,13 @@ public struct CeremonialItem: LocalizableEntity {
/// The complexity of crafting the item.
public let complexity: Complexity?
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints
/// The deity associated with the equipment item.
public let associatedTradition: BlessedTraditionReference
/// 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.
/// 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.
public let combatUse: CombatUse?
public let src: PublicationRefs
@@ -17,8 +17,7 @@ public struct Elixir: LocalizableEntity {
/// The laboratory level needed to brew the elixir.
public let laboratory: LaboratoryLevel
/// The brewing difficulty, which represents the challenge of creating an
/// elixir.
/// The brewing difficulty, which represents the challenge of creating an elixir.
public let brewingDifficulty: Int
/// AP value and prerequisites of the elixir recipes trade secret.
@@ -53,8 +52,7 @@ public struct ElixirTranslation: EntitySubtype {
/// Prerequsites for the brewing process, if any.
public let brewingProcessPrerequisites: NonEmptyMarkdown?
/// The list of effects for each quality level. The first element
/// represents QL 1, the second element QL 2, and so on.
/// The list of effects for each quality level. The first element represents QL 1, the second element QL 2, and so on.
public let qualityLevels: [NonEmptyMarkdown]
public let errata: Errata?
@@ -11,8 +11,7 @@ public struct EquipmentOfBlessedOnes: LocalizableEntity {
/// The cost in silverthalers.
public let cost: Cost
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints
/// The deity associated with the equipment item.
@@ -17,16 +17,13 @@ public struct IlluminationLightSource: LocalizableEntity {
/// The complexity of crafting the item.
public let complexity: Complexity?
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints
/// The burning time is the time how long the light source can be lit. After
/// that time you have to use a new light source.
/// The burning time is the time how long the light source can be lit. After that time you have to use a new light source.
public let burningTime: BurningTime
/// 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.
/// 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.
public let combatUse: CombatUse?
public let src: PublicationRefs
@@ -17,8 +17,7 @@ public struct Jewelry: LocalizableEntity {
/// The complexity of crafting the item.
public let complexity: Complexity
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints
public let src: PublicationRefs
@@ -17,12 +17,10 @@ public struct LuxuryGood: LocalizableEntity {
/// The complexity of crafting the item.
public let complexity: Complexity?
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints?
/// 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.
/// 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.
public let combatUse: CombatUse?
public let src: PublicationRefs
@@ -17,8 +17,7 @@ public struct MusicalInstrument: LocalizableEntity {
/// The complexity of crafting the item.
public let complexity: Complexity?
/// 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.
/// 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.
public let combatUse: CombatUse?
public let src: PublicationRefs
@@ -134,8 +134,7 @@ public struct AlchemicalPoison: EntitySubtype {
/// The laboratory level needed to brew the elixir.
public let laboratory: LaboratoryLevel
/// The brewing difficulty, which represents the challenge of creating an
/// elixir.
/// The brewing difficulty, which represents the challenge of creating an elixir.
public let brewingDifficulty: Int
/// AP value and prerequisites of the elixir recipes trade secret.
@@ -226,13 +225,10 @@ public struct DemonicPoisonTranslation: EntitySubtype {
}
public struct Intoxicant: EntitySubtype {
/// Whether the use of the intoxicant is legal or not, usually from the
/// perspective of most middle-Aventurian an northern-Aventurian nations.
/// Whether the use of the intoxicant is legal or not, usually from the perspective of most middle-Aventurian an northern-Aventurian nations.
public let legality: IntoxicantLegality
/// The chance of getting addicted after an ingestion in addition to the
/// maximum interval at which it, while addicted, must be ingested to not
/// suffer from withdrawal symptoms.
/// The chance of getting addicted after an ingestion in addition to the maximum interval at which it, while addicted, must be ingested to not suffer from withdrawal symptoms.
public let addiction: IntoxicantAddiction?
/// All translations for the entry, identified by IETF language tag
@@ -240,8 +236,7 @@ public struct Intoxicant: EntitySubtype {
public let translations: LocaleMap<IntoxicantTranslation>
}
/// Whether the use of the intoxicant is legal or not, usually from the
/// perspective of most middle-Aventurian an northern-Aventurian nations.
/// Whether the use of the intoxicant is legal or not, usually from the perspective of most middle-Aventurian an northern-Aventurian nations.
public struct IntoxicantLegality: EntitySubtype {
public let isLegal: Bool
@@ -250,20 +245,16 @@ public struct IntoxicantLegality: EntitySubtype {
}
}
/// The chance of getting addicted after an ingestion in addition to the maximum
/// interval at which it, while addicted, must be ingested to not suffer from
/// withdrawal symptoms.
/// The chance of getting addicted after an ingestion in addition to the maximum interval at which it, while addicted, must be ingested to not suffer from withdrawal symptoms.
public struct IntoxicantAddiction: EntitySubtype {
/// The chance of getting addicted after an ingestion.
public let chance: Double
/// The maximum interval at which it, while addicted, must be ingested to not
/// suffer from withdrawal symptoms.
/// The maximum interval at which it, while addicted, must be ingested to not suffer from withdrawal symptoms.
public let interval: IntoxicantAddictionInterval
}
/// The maximum interval at which it, while addicted, must be ingested to not
/// suffer from withdrawal symptoms.
/// The maximum interval at which it, while addicted, must be ingested to not suffer from withdrawal symptoms.
@DiscriminatedEnum
public enum IntoxicantAddictionInterval: EntitySubtype {
case constant(ConstantIntoxicantAddictionInterval)
@@ -284,12 +275,10 @@ public struct IntoxicantTranslation: EntitySubtype {
/// How to ingest the intoxicant.
public let ingestion: NonEmptyString
/// The intoxicants side effects that always happen, no matter whether the
/// intoxicant has the default or the reduced effect.
/// The intoxicants side effects that always happen, no matter whether the intoxicant has the default or the reduced effect.
public let sideEffect: NonEmptyMarkdown?
/// What happens if the intoxicant has been overdosed, that is, it has been
/// ingested another time within the duration.
/// What happens if the intoxicant has been overdosed, that is, it has been ingested another time within the duration.
public let overdose: NonEmptyMarkdown
/// Special information about the intoxicant.
@@ -17,8 +17,7 @@ public struct ToolOfTheTrade: LocalizableEntity {
/// The complexity of crafting the item.
public let complexity: Complexity?
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints?
/// Additional information if the item is a laboratory.
@@ -17,24 +17,19 @@ public struct Weapon: LocalizableEntity {
/// The complexity of crafting the item.
public let complexity: Complexity
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints?
/// A list of stat blocks for each combat technique this weapon can be used
/// with.
/// A list of stat blocks for each combat technique this weapon can be used with.
public let uses: [WeaponUse]
/// If the weapon is sanctified by a god and thus restricted to it's Blessed
/// Ones.
/// If the weapon is sanctified by a god and thus restricted to it's Blessed Ones.
public let sanctifiedBy: SanctifiedBy?
/// Define if during character creation this weapon can only be bought by
/// characters of a specific race or culture.
/// Define if during character creation this weapon can only be bought by characters of a specific race or culture.
public let restrictedToCultures: RestrictedToCultures?
/// Define if during character creation this weapon can only be bought by
/// characters of specific magical or blessed traditions.
/// Define if during character creation this weapon can only be bought by characters of specific magical or blessed traditions.
public let restrictedToTraditions: [MagicalTraditionReference]?
public let src: PublicationRefs
@@ -89,20 +84,16 @@ public struct WeaponTranslation: EntitySubtype {
}
public struct SecondaryWeapon: EntitySubtype {
/// A list of stat blocks for each combat technique this weapon can be used
/// with.
/// A list of stat blocks for each combat technique this weapon can be used with.
public let uses: [WeaponUse]
/// If the weapon is sanctified by a god and thus restricted to it's Blessed
/// Ones.
/// If the weapon is sanctified by a god and thus restricted to it's Blessed Ones.
public let sanctifiedBy: SanctifiedBy?
/// Define if during character creation this weapon can only be bought by
/// characters of a specific race or culture.
/// Define if during character creation this weapon can only be bought by characters of a specific race or culture.
public let restrictedToCultures: RestrictedToCultures?
/// Define if during character creation this weapon can only be bought by
/// characters of specific magical or blessed traditions.
/// Define if during character creation this weapon can only be bought by characters of specific magical or blessed traditions.
public let restrictedToTraditions: [MagicalTraditionReference]?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -138,12 +129,10 @@ public enum WeaponUseValues: EntitySubtype {
case ranged(RangedWeapon)
}
/// If the weapon is sanctified by a god and thus restricted to it's Blessed
/// Ones.
/// If the weapon is sanctified by a god and thus restricted to it's Blessed Ones.
public typealias SanctifiedBy = [BlessedTraditionReference]
/// Define if during character creation this weapon can only be bought by
/// characters of a specific race or culture.
/// Define if during character creation this weapon can only be bought by characters of a specific race or culture.
@DiscriminatedEnum
public enum RestrictedToCultures: EntitySubtype {
case culturesOfRace(RaceReference)
@@ -17,12 +17,10 @@ public struct DefaultItem: EntitySubtype {
/// The complexity of crafting the item.
public let complexity: Complexity?
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public let structurePoints: StructurePoints
/// 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.
/// 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.
public let combatUse: CombatUse?
public let src: PublicationRefs
@@ -41,8 +39,7 @@ public struct DefaultItem: EntitySubtype {
}
}
/// 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.
/// 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.
@DiscriminatedEnum
public enum CombatUse: EntitySubtype {
case weapon(SecondaryWeapon)
@@ -73,8 +70,7 @@ public struct DefaultItemTranslation: EntitySubtype {
}
}
/// The structure points of the item. Use an array if the item consists of
/// multiple components that have individual structure points.
/// The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.
public typealias StructurePoints = [StructurePointsComponent]
public struct StructurePointsComponent: EntitySubtype {
@@ -13,8 +13,7 @@ public typealias AttackModifier = Int
/// The PA modifier.
public typealias ParryModifier = Int
/// The damage of a weapon consists of a random part using dice and an optional
/// flat part.
/// The damage of a weapon consists of a random part using dice and an optional flat part.
public struct MeleeDamage: EntitySubtype {
/// How many dice of which type are rolled to get the damage.
public let dice: Dice
@@ -44,8 +43,7 @@ public struct MeleeWeapon: EntitySubtype {
/// The combat techniques and dependent values.
public let combatTechnique: CloseCombatTechniqueReference
/// The damage of a weapon consists of a random part using dice and an optional
/// flat part.
/// The damage of a weapon consists of a random part using dice and an optional flat part.
public let damage: MeleeDamage
/// The primary attribute damage and threshold value.
@@ -7,10 +7,7 @@
import DiscriminatedEnum
/// The damage of a ranged weapon. It consists of a random part using dice and an
/// optional flat part ny default. Some ranged weapons may work different so that
/// damage is either not applicable at all or it is outlined as *Special* and
/// further defined in a description.
/// The damage of a ranged weapon. It consists of a random part using dice and an optional flat part ny default. Some ranged weapons may work different so that damage is either not applicable at all or it is outlined as *Special* and further defined in a description.
@DiscriminatedEnum
public enum RangedDamage: EntitySubtype {
case `default`(DefaultRangedDamage)
@@ -18,8 +15,7 @@ public enum RangedDamage: EntitySubtype {
case special
}
/// The damage of a weapon consists of a random part using dice and an optional
/// flat part.
/// The damage of a weapon consists of a random part using dice and an optional flat part.
public struct DefaultRangedDamage: EntitySubtype {
/// How many dice of which type are rolled to get the damage.
public let dice: Dice
@@ -32,8 +28,7 @@ public struct RangedWeapon: EntitySubtype {
/// The combat techniques and dependent values.
public let combatTechnique: RangedCombatTechniqueReference
/// The damage of a weapon consists of a random part using dice and an optional
/// flat part.
/// The damage of a weapon consists of a random part using dice and an optional flat part.
public let damage: RangedDamage
/// One or multiple reload times.
@@ -7,16 +7,7 @@
import DiscriminatedEnum
/// The primary attribute damage and threshold value. You can either use an
/// integer, an object or a pair. Use an integer if you just have to define a
/// single threshold value for the default primary attribute of the combat
/// technique. Use an object if you need to define the value only or if you need
/// to define the value as well as a single different primary attribute than
/// which the combat technique uses. Use the pair if you need to set the primary
/// attributes to AGI and STR (the combat technique has AGI but this item has
/// AGI/STR) and/or if you need to set different thresholds for AGI and STR (e.g.
/// AGI 14/STR 15). If the same values are in the pair, they will be merged (AGI
/// 14/STR 14 will be AGI/STR 14).
/// The primary attribute damage and threshold value. You can either use an integer, an object or a pair. Use an integer if you just have to define a single threshold value for the default primary attribute of the combat technique. Use an object if you need to define the value only or if you need to define the value as well as a single different primary attribute than which the combat technique uses. Use the pair if you need to set the primary attributes to AGI and STR (the combat technique has AGI but this item has AGI/STR) and/or if you need to set different thresholds for AGI and STR (e.g. AGI 14/STR 15). If the same values are in the pair, they will be merged (AGI 14/STR 14 will be AGI/STR 14).
@DiscriminatedEnum
public enum PrimaryAttributeDamageThreshold: EntitySubtype {
case `default`(DefaultPrimaryAttributeDamageThreshold)
@@ -24,8 +15,7 @@ public enum PrimaryAttributeDamageThreshold: EntitySubtype {
}
public struct DefaultPrimaryAttributeDamageThreshold: EntitySubtype {
/// The attribute value representing the damage threshold for the primary
/// attribute of the item's combat technique.
/// The attribute value representing the damage threshold for the primary attribute of the item's combat technique.
public let threshold: Int
}
@@ -11,9 +11,7 @@ public struct ArmorType: LocalizableEntity {
/// The armor type's identifier. An unique, increasing integer.
public let id: Int
/// An armor type can have a *sturdiness rating*. The higher the rating, the
/// more durable the armor. Rolling higher than this rating during a sturdiness
/// check means the armor receives one level of the new condition *Wear*.
/// An armor type can have a *sturdiness rating*. The higher the rating, the more durable the armor. Rolling higher than this rating during a sturdiness check means the armor receives one level of the new condition *Wear*.
public let sturdinessRating: Int?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -20,24 +20,17 @@ public struct AnimistPower: LocalizableEntity {
/// The associated property.
public let property: PropertyReference
/// The tribe traditions the animist power is available to. It may be available
/// to all or only specific tribes.
/// The tribe traditions the animist power is available to. It may be available to all or only specific tribes.
///
/// If no tribe tradition is given, the animist power is generally available to
/// all tribe traditions.
/// If no tribe tradition is given, the animist power is generally available to all tribe traditions.
public let tribeTradition: [AnimistTribeReference]
/// States which column is used to improve the skill. It is a fixed value or
/// depends on the primary patron.
/// States which column is used to improve the skill. It is a fixed value or depends on the primary patron.
public let improvementCost: AnimistPowerImprovementCost
public let prerequisites: AnimistPowerPrerequisites?
/// The animist power can have multiple levels. Each level is skilled
/// separately. A previous level must be on at least 10 so that the next higher
/// level can be activated and skilled. A higher level cannot be skilled higher
/// than a lower level. Each level also adds an effect text to the text of the
/// first level.
/// The animist power can have multiple levels. Each level is skilled separately. A previous level must be on at least 10 so that the next higher level can be activated and skilled. A higher level cannot be skilled higher than a lower level. Each level also adds an effect text to the text of the first level.
public let levels: [AnimistPowerLevel]?
public let src: PublicationRefs
@@ -68,9 +61,7 @@ public struct AnimistPowerTranslation: EntitySubtype {
/// purposes.
public let nameInLibrary: NonEmptyString?
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -120,8 +111,7 @@ public enum AnimistPowerPerformanceParameters: EntitySubtype {
}
public struct OneTimeAnimistPowerPerformanceParameters: EntitySubtype {
/// The AE cost value, either a flat value or defined dynamically by the
/// primary patron.
/// The AE cost value, either a flat value or defined dynamically by the primary patron.
public let cost: OneTimeAnimistPowerCost
/// The duration.
@@ -158,8 +148,7 @@ public enum OneTimeAnimistPowerDuration: EntitySubtype {
}
public struct SustainedAnimistPowerPerformanceParameters: EntitySubtype {
/// The AE cost value, either a flat value or defined dynamically by the
/// primary patron.
/// The AE cost value, either a flat value or defined dynamically by the primary patron.
public let cost: SustainedAnimistPowerCost
}
@@ -43,9 +43,7 @@ public struct CurseTranslation: EntitySubtype {
/// The name of the curse.
public let name: NonEmptyString
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -81,8 +79,7 @@ public struct FixedCurseCost: EntitySubtype {
}
public struct FixedCurseCostTranslation: EntitySubtype {
/// The cost have to be per a specific countable entity, e.g. `8 KP
/// per person`.
/// The cost have to be per a specific countable entity, e.g. `8 KP per person`.
public let per: ResponsiveText?
/// A note, appended to the generated string in parenthesis.
@@ -43,9 +43,7 @@ public struct DominationRitualTranslation: EntitySubtype {
/// The name of the domination ritual.
public let name: NonEmptyString
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -53,9 +53,7 @@ public struct ElvenMagicalSongTranslation: EntitySubtype {
/// The name of the elven magical song.
public let name: NonEmptyString
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -98,7 +96,6 @@ public struct ElvenMagicalSongPermanentCostTranslation: EntitySubtype {
}
public struct ElvenMagicalSongCostTranslation: EntitySubtype {
/// The cost have to be per a specific countable entity, e.g. `8 AE
/// per person`.
/// The cost have to be per a specific countable entity, e.g. `8 AE per person`.
public let per: ResponsiveText
}
@@ -35,9 +35,7 @@ public struct GeodeRitualTranslation: EntitySubtype {
/// The name of the geode ritual.
public let name: NonEmptyString
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -51,9 +51,7 @@ public struct JesterTrickTranslation: EntitySubtype {
/// The name of the jester trick.
public let name: NonEmptyString
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -20,8 +20,7 @@ public struct MagicalDance: LocalizableEntity {
/// The associated property.
public let property: PropertyReference
/// The music tradition(s) the magical dance is available for. This also
/// defines the different names in each music tradition.
/// The music tradition(s) the magical dance is available for. This also defines the different names in each music tradition.
public let musicTradition: [MusicTraditionReference]
/// States which column is used to improve the skill.
@@ -48,9 +47,7 @@ public struct MagicalDanceTranslation: EntitySubtype {
/// The name of the magical dance.
public let name: NonEmptyString
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -84,8 +81,7 @@ public struct FixedMagicalDanceCost: EntitySubtype {
}
public struct IndefiniteMagicalDanceCost: EntitySubtype {
/// Specified if the indefinite description's result value is to be
/// modified by a certain number.
/// Specified if the indefinite description's result value is to be modified by a certain number.
public let modifier: CheckResultBasedModifier?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -17,8 +17,7 @@ public struct MagicalMelody: LocalizableEntity {
/// In some cases, the target's Spirit or Toughness is applied as a penalty.
public let checkPenalty: SkillCheckPenalty?
/// Arcane bards must make a *Singing (area of application)* or *Music (area of
/// application)* check for each magical melody.
/// Arcane bards must make a *Singing (area of application)* or *Music (area of application)* check for each magical melody.
public let skill: [MusicalSkillReference]
/// Measurable parameters of a magical melody.
@@ -27,8 +26,7 @@ public struct MagicalMelody: LocalizableEntity {
/// The associated property.
public let property: PropertyReference
/// The music tradition(s) the magical melody is available for. This also
/// defines the different names in each music tradition.
/// The music tradition(s) the magical melody is available for. This also defines the different names in each music tradition.
public let musicTradition: [MusicTraditionReference]
/// States which column is used to improve the skill.
@@ -57,9 +55,7 @@ public struct MagicalMelodyTranslation: EntitySubtype {
/// The name of the magical melody.
public let name: NonEmptyString
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -90,7 +86,6 @@ public struct FixedMagicalMelodyCost: EntitySubtype {
}
public struct FirstPersonMagicalMelodyCost: EntitySubtype {
/// The (temporary) AE cost value for the first targeted person. The AE
/// cost for each additional person is half this value.
/// The (temporary) AE cost value for the first targeted person. The AE cost for each additional person is half this value.
public let value: Int
}
@@ -13,8 +13,7 @@ public struct MagicalRune: LocalizableEntity {
/// The options the magical rune has, if any.
///
/// If there are multiple options, the magical rune may be activated for each
/// option, that is, multiple times.
/// If there are multiple options, the magical rune may be activated for each option, that is, multiple times.
public let options: [MagicalRuneOption]?
/// Lists the linked three attributes used to make a skill check.
@@ -53,21 +52,16 @@ public struct MagicalRune: LocalizableEntity {
public struct MagicalRuneTranslation: EntitySubtype {
/// The name of the magical rune.
///
/// If the rune has an option, the options name will/should not be included in
/// the name as well as its surrounding parenthesis. It will/should be combined
/// on demand.
/// If the rune has an option, the options name will/should not be included in the name as well as its surrounding parenthesis. It will/should be combined on demand.
public let name: NonEmptyString
/// The full name of the entry as stated in the sources. Only use when `name`
/// needs to be different from full name for text generation purposes.
/// The full name of the entry as stated in the sources. Only use when `name` needs to be different from full name for text generation purposes.
public let nameInLibrary: NonEmptyString?
/// The native name of the magical rune.
public let nativeName: NonEmptyString?
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -182,8 +176,7 @@ public struct MagicalRuneCraftingTime: EntitySubtype {
}
public struct MagicalRuneCraftingTimeTranslation: EntitySubtype {
/// The crafting time has to be per a specific countable entity, e.g. `8
/// action per person`.
/// The crafting time has to be per a specific countable entity, e.g. `8 action per person`.
public let per: ResponsiveText
}
@@ -247,8 +240,7 @@ public struct CustomMagicalRuneSuboptionTranslation: EntitySubtype {
public struct MagicalRuneOptionTranslation: EntitySubtype {
/// The name of the option.
///
/// The surrounding parenthesis will/should not be included, they will/should
/// be generated.
/// The surrounding parenthesis will/should not be included, they will/should be generated.
public let name: NonEmptyString
/// The native name of the magical rune option.
@@ -51,9 +51,7 @@ public struct ZibiljaRitualTranslation: EntitySubtype {
/// The name of the zibilja ritual.
public let name: NonEmptyString
/// 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.
/// 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.
public let effect: ActivatableSkillEffect
@available(*, deprecated)
@@ -7,8 +7,7 @@
import DiscriminatedEnum
/// A reference to a music tradition with the music-tradition-specific name of
/// the entry
/// A reference to a music tradition with the music-tradition-specific name of the entry
public struct MusicTraditionReference: EntitySubtype {
/// The music tradition's identifier.
public let id: Int
@@ -7,8 +7,7 @@
import DiscriminatedEnum
/// A list of preconditions for the prerequisite it is defined on, so that it
/// only takes effect if the prerequisites in this list are matched.
/// A list of preconditions for the prerequisite it is defined on, so that it only takes effect if the prerequisites in this list are matched.
///
/// Usually appears at the `when` property of the parent prerequisite.
public typealias Preconditions = [PreconditionGroup]
@@ -14,16 +14,9 @@ public enum DisplayOption: EntitySubtype {
}
public struct ReplacementDisplayOption: EntitySubtype {
/// If the replacement text is a sentence or sentence-like fragment, this
/// property ensures it is integrated into the prerequisite string correctly.
/// If the replacement text is a sentence or sentence-like fragment, this property ensures it is integrated into the prerequisite string correctly.
///
/// A standalone sentence is connected to the previous prerequisite string with
/// a period and a period is also added at the end of the sentence
/// automatically, if it is not present. A connected sentence is connected to
/// the previous prerequisite string with a semicolon and a period is not added
/// to the end of the sentence. In this case, if there are prerequisites after
/// this one, they will be connected using a semicolon again, unless a
/// different punctuation mark is present at the end of the given text.
/// A standalone sentence is connected to the previous prerequisite string with a period and a period is also added at the end of the sentence automatically, if it is not present. A connected sentence is connected to the previous prerequisite string with a semicolon and a period is not added to the end of the sentence. In this case, if there are prerequisites after this one, they will be connected using a semicolon again, unless a different punctuation mark is present at the end of the given text.
public let sentenceType: SentenceType?
/// All translations for the entry, identified by IETF language tag (BCP47).
@@ -18,8 +18,7 @@ public struct ActivatablePrerequisite: EntitySubtype {
/// The required minimum level of the entry.
public let level: Int?
/// Required select options. Order is important. Typically, you only need the
/// first array index, though.
/// Required select options. Order is important. Typically, you only need the first array index, though.
public let options: [RequirableSelectOptionIdentifier]?
public let displayOption: DisplayOption?
@@ -7,9 +7,7 @@
import DiscriminatedEnum
/// Requires a specific enhancement from a skill. This should **not** be used
/// for enhancements themselves; they can only require enhancements from the same
/// skill they enhance.
/// Requires a specific enhancement from a skill. This should **not** be used for enhancements themselves; they can only require enhancements from the same skill they enhance.
public struct ExternalEnhancementPrerequisite: EntitySubtype {
/// The required skill.
public let skill: SkillWithEnhancementsReference
@@ -36,6 +34,5 @@ public struct EnhancementsReference: EntitySubtype {
public let id: Int
}
/// Requires a specific enhancement from a skill. This can only be used by an
/// enhancement to require another enhancement from the same skill.
/// Requires a specific enhancement from a skill. This can only be used by an enhancement to require another enhancement from the same skill.
public typealias InternalEnhancementPrerequisite = EnhancementsReference
@@ -7,9 +7,7 @@
import DiscriminatedEnum
/// Requires a specific race or one of a specific set of races. You can also
/// provide an object to say whether the hero must meet one of the races or
/// if the entry does not allow one of the races.
/// Requires a specific race or one of a specific set of races. You can also provide an object to say whether the hero must meet one of the races or if the entry does not allow one of the races.
public struct RacePrerequisite: EntitySubtype {
/// The race's identifier.
public let id: RaceIdentifier
@@ -8,12 +8,10 @@
import DiscriminatedEnum
public struct RatedMinimumNumberPrerequisite: EntitySubtype {
/// The minimum number of skills that need to be on the defined minimum skill
/// rating.
/// The minimum number of skills that need to be on the defined minimum skill rating.
public let number: Int
/// The minimum skill rating the defined minimum number of skills need to be
/// on.
/// The minimum skill rating the defined minimum number of skills need to be on.
public let value: Int
/// The targets that contribute to satisfying the prerequisite.
@@ -7,35 +7,19 @@
import DiscriminatedEnum
/// A prerequisite that is either not verifyable in general e.g. roleplay or
/// background information or the referenced entities were not made available
/// for use yet e.g. races , but which should be displayed, because it is part
/// of the prerequisite string from the sources.
/// A prerequisite that is either not verifyable in general e.g. roleplay or background information or the referenced entities were not made available for use yet e.g. races , but which should be displayed, because it is part of the prerequisite string from the sources.
public struct TextPrerequisite: EntitySubtype {
/// The method how the prerequisite should be verified. Either is passes all
/// verification text or it denies all verification tests. The latter results
/// in the associated entry to never be available for purchase.
/// The method how the prerequisite should be verified. Either is passes all verification text or it denies all verification tests. The latter results in the associated entry to never be available for purchase.
public let verification: TextVerificationRule
/// If the text is a sentence or sentence-like fragment, this property ensures
/// it is integrated into the prerequisite string correctly.
/// If the text is a sentence or sentence-like fragment, this property ensures it is integrated into the prerequisite string correctly.
///
/// A standalone sentence is connected to the previous prerequisite string with
/// a period and a period is also added at the end of the sentence
/// automatically, if it is not present. A connected sentence is connected to
/// the previous prerequisite string with a semicolon and a period is not added
/// to the end of the sentence. In this case, if there are prerequisites after
/// this one, they will be connected using a semicolon again, unless a
/// different punctuation mark is present at the end of the given text.
/// A standalone sentence is connected to the previous prerequisite string with a period and a period is also added at the end of the sentence automatically, if it is not present. A connected sentence is connected to the previous prerequisite string with a semicolon and a period is not added to the end of the sentence. In this case, if there are prerequisites after this one, they will be connected using a semicolon again, unless a different punctuation mark is present at the end of the given text.
public let sentenceType: SentenceType?
/// If the text does not represent an actual prerequisite but a prerequisite
/// for the use of certain aspects or the entry the prerequisite is associated
/// with, or something like that, this property is set to `true`.
/// If the text does not represent an actual prerequisite but a prerequisite for the use of certain aspects or the entry the prerequisite is associated with, or something like that, this property is set to `true`.
///
/// If all prerequisites of an entry are marked as meta, the entry is
/// considered to have no prerequisites and thus the string `none` must be
/// rendered before the list of meta prerequisites.
/// If all prerequisites of an entry are marked as meta, the entry is considered to have no prerequisites and thus the string `none` must be rendered before the list of meta prerequisites.
///
/// This is the only use case for this property.
public let isMeta: Bool?
@@ -8,8 +8,7 @@
import DiscriminatedEnum
public struct BlessedTraditionPrerequisite: EntitySubtype {
/// The blessed tradition prerequisite may only be satified if the blessed
/// tradition is either church or shamanistic.
/// The blessed tradition prerequisite may only be satified if the blessed tradition is either church or shamanistic.
public let restriction: BlessedTraditionPrerequisiteRestriction?
public let displayOption: DisplayOption?
@@ -20,16 +19,14 @@ public struct BlessedTraditionPrerequisite: EntitySubtype {
}
}
/// The blessed tradition prerequisite may only be satified if the blessed
/// tradition is either church or shamanistic.
/// The blessed tradition prerequisite may only be satified if the blessed tradition is either church or shamanistic.
public enum BlessedTraditionPrerequisiteRestriction: String, EntitySubtype {
case church = "Church"
case shamanistic = "Shamanistic"
}
public struct MagicalTraditionPrerequisite: EntitySubtype {
/// The magical tradition prerequisite may only be satified if the magical
/// tradition can learn rituals or can bind familiars.
/// The magical tradition prerequisite may only be satified if the magical tradition can learn rituals or can bind familiars.
public let restriction: MagicalTraditionPrerequisiteRestriction?
public let displayOption: DisplayOption?
@@ -40,8 +37,7 @@ public struct MagicalTraditionPrerequisite: EntitySubtype {
}
}
/// The magical tradition prerequisite may only be satified if the magical
/// tradition can learn rituals or can bind familiars.
/// The magical tradition prerequisite may only be satified if the magical tradition can learn rituals or can bind familiars.
public enum MagicalTraditionPrerequisiteRestriction: String, EntitySubtype {
case canLearnRituals = "CanLearnRituals"
case canBindFamiliars = "CanBindFamiliars"
@@ -34,23 +34,18 @@ public enum ContentNode: EntitySubtype {
case referenceList(ReferenceListNode)
}
/// A core rule nested inside this core rule. It may be displayed as a separate
/// page or its content may be included in this rule's text, which will
/// automatically generate a proper heading. No content node of a type other than
/// A core rule nested inside this core rule. It may be displayed as a separate page or its content may be included in this rule's text, which will automatically generate a proper heading. No content node of a type other than
/// `Child` should follow a child node, since then it may look like the the text
/// may be part of the child node.
public struct ChildNode: EntitySubtype {
/// The nested core rule's identifier.
public let id: CoreRuleIdentifier
/// If the nested core rule's content should be integrated into this core rule
/// and a proper heading should be added. Otherwise create a link to a separate
/// view of that core rule.
/// If the nested core rule's content should be integrated into this core rule and a proper heading should be added. Otherwise create a link to a separate view of that core rule.
public let include: Bool
}
/// A simple text block, containing one or multiple paragraphs. Headings are not
/// allowed, they should be handled as nested core rules instead.
/// A simple text block, containing one or multiple paragraphs. Headings are not allowed, they should be handled as nested core rules instead.
public struct TextNode: EntitySubtype {
/// All translations for the entry, identified by IETF language tag (BCP47).
public let translations: LocaleMap<TextNodeTranslation>
@@ -134,19 +129,12 @@ public enum ReferenceListNodeSource: EntitySubtype {
}
public struct ReferenceListNodeImprovementCostSource: EntitySubtype {
/// Define if the cost for attributes or skills should be defined. The
/// cost for attributes start with value 9, while the cost for skills
/// start with 1 in addition to possible activation cost.
/// Define if the cost for attributes or skills should be defined. The cost for attributes start with value 9, while the cost for skills start with 1 in addition to possible activation cost.
public let target: ReferenceListNodeImprovementCostSourceTarget
/// The highest value the improvement cost are displayed for.
///
/// The minimum maximum value should depend on what is the upper bound of
/// the range of adventure point cost that are equal across multiple
/// values (value increases for attributes are always 15 up to (and
/// including) value 14, while value increases for skills are always 1 to
/// 4, depending on the improvement cost, up to (and including) value
/// 12), since those ranges should be combined into a single table row.
/// The minimum maximum value should depend on what is the upper bound of the range of adventure point cost that are equal across multiple values (value increases for attributes are always 15 up to (and including) value 14, while value increases for skills are always 1 to 4, depending on the improvement cost, up to (and including) value 12), since those ranges should be combined into a single table row.
public let maximumRating: Int
private enum CodingKeys: String, CodingKey {
@@ -17,8 +17,7 @@ public struct FocusRule: LocalizableEntity {
/// The focus rule's level.
public let level: Int
/// Has the focus rule not been implemented in Optolith yet? This is also true
/// if the focus rule does not (currently) apply to any Optolith feature.
/// Has the focus rule not been implemented in Optolith yet? This is also true if the focus rule does not (currently) apply to any Optolith feature.
public let isMissingImplementation: Bool
public let src: PublicationRefs
@@ -11,8 +11,7 @@ public struct OptionalRule: LocalizableEntity {
/// The optional rule's identifier. An unique, increasing integer.
public let id: Int
/// Has the focus rule not been implemented in Optolith yet? This is also true
/// if the focus rule does not (currently) apply to any Optolith feature.
/// Has the focus rule not been implemented in Optolith yet? This is also true if the focus rule does not (currently) apply to any Optolith feature.
public let isMissingImplementation: Bool
public let src: PublicationRefs
@@ -17,8 +17,7 @@ public struct Publication: LocalizableEntity {
/// If the publication may contain adult content.
public let containsAdultContent: Bool
/// If the publication is not (fully) implemented and thus needs to be excluded
/// from * stable releases.
/// If the publication is not (fully) implemented and thus needs to be excluded from * stable releases.
public let isMissingImplementation: Bool
/// The specific other publications this publication depends on data from.
@@ -50,8 +49,7 @@ public struct PublicationTranslation: EntitySubtype {
/// The publication's release date.
public let releaseDate: String?
/// If this publication translation is not (fully) implemented and thus needs
/// to be excluded from stable releases.
/// If this publication translation is not (fully) implemented and thus needs to be excluded from stable releases.
public let isMissingImplementation: Bool
private enum CodingKeys: String, CodingKey {
@@ -10,9 +10,7 @@ import DiscriminatedEnum
/// The publications where you can find the entry.
public typealias PublicationRefs = [PublicationRef]
/// A source reference. It contains the book's publisher identifier and the page
/// where it occurs. If an entry spans multiple pages, provide the last page as
/// well.
/// A source reference. It contains the book's publisher identifier and the page where it occurs. If an entry spans multiple pages, provide the last page as well.
public struct PublicationRef: EntitySubtype {
/// The publication's identifier.
public let id: PublicationIdentifier
@@ -44,12 +42,10 @@ public enum Occurrence: EntitySubtype {
public typealias SimpleOccurrences = [SimpleOccurrence]
public struct SimpleOccurrence: EntitySubtype {
/// The page where it occurs. If the entry spans multiple pages, use this as
/// the first page and `last_page` as the last page.
/// The page where it occurs. If the entry spans multiple pages, use this as the first page and `last_page` as the last page.
public let firstPage: Int
/// The last page where it occurs. If there is only one page, set this to the
/// same as `first_page` oder remove it.
/// The last page where it occurs. If there is only one page, set this to the same as `first_page` oder remove it.
public let lastPage: Int?
private enum CodingKeys: String, CodingKey {
@@ -62,22 +58,19 @@ public struct VersionedOccurrence: EntitySubtype {
/// The initial occurrence of the entry.
public let initial: InitialOccurrence
/// Revisions of the entry, resulting in either changed page references or
/// re-addition or removal of an entry.
/// Revisions of the entry, resulting in either changed page references or re-addition or removal of an entry.
public let revisions: [Revision]?
}
public struct InitialOccurrence: EntitySubtype {
/// The publication's printing since which the entry is present. Leave
/// empty if present since the beginning.
/// The publication's printing since which the entry is present. Leave empty if present since the beginning.
public let printing: Int?
/// The initial page references.
public let pages: [PageRange]
}
/// A revision of the entry, resulting in either changed page references or
/// re-addition or removal of an entry.
/// A revision of the entry, resulting in either changed page references or re-addition or removal of an entry.
@DiscriminatedEnum
public enum Revision: EntitySubtype {
case since(Since)
@@ -85,8 +78,7 @@ public enum Revision: EntitySubtype {
}
public struct Since: EntitySubtype {
/// The publication's printing since which the entry is present again or has
/// changed page references.
/// The publication's printing since which the entry is present again or has changed page references.
public let printing: Int
/// The changed or new page references.
@@ -99,12 +91,10 @@ public struct Deprecation: EntitySubtype {
}
public struct PageRange: EntitySubtype {
/// The page where it occurs. If the entry spans multiple pages, use this as
/// the first page and `last_page` as the last page.
/// The page where it occurs. If the entry spans multiple pages, use this as the first page and `last_page` as the last page.
public let firstPage: Page
/// The last page where it occurs. If there is only one page, set this to the
/// same as `first_page` oder remove it.
/// The last page where it occurs. If there is only one page, set this to the same as `first_page` oder remove it.
public let lastPage: Page?
private enum CodingKeys: String, CodingKey {
@@ -62,13 +62,10 @@ public struct AdvancedCombatSpecialAbilityTranslation: EntitySubtype {
@available(*, deprecated)
public let penalty: String?
/// The AP value. It is only used if the text cannot be generated from the
/// given information.
/// The AP value. It is only used if the text cannot be generated from the given information.
public let apValue: AdventurePointsValueReplacement?
/// A string that gets appended to the default AP Value text with a preceding
/// space. This always happens if present, even if the generated AP Value text
/// is replaced.
/// A string that gets appended to the default AP Value text with a preceding space. This always happens if present, even if the generated AP Value text is replaced.
public let apValueAppend: AdventurePointsValueAppend?
public let errata: Errata?
@@ -16,8 +16,7 @@ public struct BlessedTradition: LocalizableEntity {
public let skillUses: SkillUses?
/// The tradition's primary attribute. Leave empty if the tradition does not
/// have one.
/// The tradition's primary attribute. Leave empty if the tradition does not have one.
public let primary: AttributeReference?
/// The tradition's aspects, if any.
@@ -33,15 +32,13 @@ public struct BlessedTradition: LocalizableEntity {
/// A list of favored skills.
public let favoredSkills: [SkillReference]
/// On activation of the tradition, a specific number of skills from a list of
/// skills must be selected as being favored.
/// On activation of the tradition, a specific number of skills from a list of skills must be selected as being favored.
public let favoredSkillsSelection: FavoredSkillsSelection?
/// The type of the tradition. May be either church or shamanistic.
public let type: BlessedTraditionType
/// The select option's identifier of the disadvantage *Principles* that
/// represent this tradition's code, if any.
/// The select option's identifier of the disadvantage *Principles* that represent this tradition's code, if any.
public let associatedPrinciplesId: Double?
public let prerequisites: GeneralPrerequisites?
@@ -125,14 +122,12 @@ public struct ShamanisticBlessedTradition: EntitySubtype {
public struct BlessedTraditionTranslation: EntitySubtype {
public let name: Name
/// A shorter name of the tradition's name, used in liturgical chant
/// descriptions.
/// A shorter name of the tradition's name, used in liturgical chant descriptions.
public let nameCompressed: String?
public let nameInLibrary: NameInLibrary?
/// The special rules of the tradition. They should be sorted like they are
/// in the book.
/// The special rules of the tradition. They should be sorted like they are in the book.
public let specialRules: [SpecialRule]
public let errata: Errata?
@@ -53,8 +53,7 @@ public struct CeremonialItemSpecialAbilityTranslation: EntitySubtype {
public let effect: Effect
/// The prerequisites text. It is only used if the text cannot be generated
/// from the given information.
/// The prerequisites text. It is only used if the text cannot be generated from the given information.
public let prerequisites: PrerequisitesReplacement?
public let errata: Errata?
@@ -50,8 +50,7 @@ public struct FatePointSpecialAbilityTranslation: EntitySubtype {
public let rules: Rules
/// The AP value. It is only used if the text cannot be generated from the
/// given information.
/// The AP value. It is only used if the text cannot be generated from the given information.
public let apValue: AdventurePointsValueReplacement?
public let errata: Errata?
@@ -53,9 +53,7 @@ public struct GeneralSpecialAbilityTranslation: EntitySubtype {
public let rules: Rules
/// A string that gets appended to the default AP Value text with a preceding
/// space. This always happens if present, even if the generated AP Value text
/// is replaced.
/// A string that gets appended to the default AP Value text with a preceding space. This always happens if present, even if the generated AP Value text is replaced.
public let apValueAppend: AdventurePointsValueAppend?
public let errata: Errata?
@@ -44,8 +44,7 @@ public struct KarmaSpecialAbilityTranslation: EntitySubtype {
public let rules: Rules
/// The AP value. It is only used if the text cannot be generated from the
/// given information.
/// The AP value. It is only used if the text cannot be generated from the given information.
public let apValue: AdventurePointsValueReplacement?
public let errata: Errata?
@@ -53,8 +53,7 @@ public struct MagicalSpecialAbilityTranslation: EntitySubtype {
public let rules: Rules
/// The AP value. It is only used if the text cannot be generated from the
/// given information.
/// The AP value. It is only used if the text cannot be generated from the given information.
public let apValue: AdventurePointsValueReplacement?
public let errata: Errata?
@@ -18,8 +18,7 @@ public struct MagicalTradition: LocalizableEntity {
public let skillUses: SkillUses?
/// The tradition's primary attribute. Leave empty if the tradition does not
/// have one.
/// The tradition's primary attribute. Leave empty if the tradition does not have one.
public let primary: PrimaryAttribute?
/// Can a member of the tradition learn cantrips?
@@ -34,23 +33,19 @@ public struct MagicalTradition: LocalizableEntity {
/// Can this magical tradition bind familiars?
public let canBindFamiliars: Bool
/// Does the tradition allow learning more traditions or having learned a
/// different tradition before learning this tradition?
/// Does the tradition allow learning more traditions or having learned a different tradition before learning this tradition?
public let allowsMultipleTraditions: Bool
/// Is the maximum AP you're able to spent on magical advantages and able to
/// get by magical disadvantages different than the default of 50 AP?
/// Is the maximum AP you're able to spent on magical advantages and able to get by magical disadvantages different than the default of 50 AP?
public let alternativeMagicalAdventurePointsMaximum: Int?
/// Are advantages/disadvantages required to not exclusively apply to arcane
/// spellworks, but also to the tradition's magical actions or applications?
/// Are advantages/disadvantages required to not exclusively apply to arcane spellworks, but also to the tradition's magical actions or applications?
public let requireNonSpellworkExclusiveEffects: Bool
/// Is this a magical dilettante tradition?
public let isMagicalDilettante: Bool
/// If arcane spellworks from a different tradition count as arcane spellworks
/// of this tradition, this is the different tradition's reference.
/// If arcane spellworks from a different tradition count as arcane spellworks of this tradition, this is the different tradition's reference.
public let useArcaneSpellworksFromTradition: MagicalTraditionReference?
/// The Influences for the traditions. Influences are enabled by Focus Rules.
@@ -93,9 +88,7 @@ public struct PrimaryAttribute: EntitySubtype {
/// The attribute's identifier.
public let id: AttributeIdentifier
/// Typically, the value of the primary attribute (if one exists) is added
/// onto the base of 20 AE to get the actual AE. But sometimes, only half the
/// value is added.
/// Typically, the value of the primary attribute (if one exists) is added onto the base of 20 AE to get the actual AE. But sometimes, only half the value is added.
public let useHalfForArcaneEnergy: Bool
private enum CodingKeys: String, CodingKey {
@@ -107,14 +100,12 @@ public struct PrimaryAttribute: EntitySubtype {
public struct MagicalTraditionTranslation: EntitySubtype {
public let name: Name
/// The name used for the traditions list of arcane spellworks if it is
/// different than the `name` of the special ability.
/// The name used for the traditions list of arcane spellworks if it is different than the `name` of the special ability.
public let nameForArcaneSpellworks: String?
public let nameInLibrary: NameInLibrary?
/// The special rules of the tradition. They should be sorted like they are
/// in the book.
/// The special rules of the tradition. They should be sorted like they are in the book.
public let specialRules: [SpecialRule]
public let errata: Errata?
@@ -18,8 +18,7 @@ public struct PactGift: LocalizableEntity {
public let permanentDemonicConsumption: PactGiftPermanentDemonicConsumption?
/// This pact gift has direct influence on the existence of other entries. It
/// may add or remove entries.
/// This pact gift has direct influence on the existence of other entries. It may add or remove entries.
public let automaticEntries: [AutomaticEntry]?
public let prerequisites: GeneralPrerequisites?
@@ -57,8 +56,7 @@ public struct FixedPactGiftPermanentDemonicConsumption: EntitySubtype {
}
public struct PactGiftPermanentDemonicConsumptionPerLevel: EntitySubtype {
/// The levels of *Demonic Consumption* the pact gift causes per activated
/// level of the pact gift.
/// The levels of *Demonic Consumption* the pact gift causes per activated level of the pact gift.
public let levels: Int
}
@@ -66,12 +64,10 @@ public struct AutomaticEntry: EntitySubtype {
/// What type of action is applied to the target entry?
public let action: AutomaticEntryAction
/// If an entry is added or removed, does is cost or grant adventure points
/// or is it free of charge?
/// If an entry is added or removed, does is cost or grant adventure points or is it free of charge?
public let applyApValue: Bool
/// The entry that is to be added or removed. It can be a fixed entry or a
/// selection where the player must choose one entry.
/// The entry that is to be added or removed. It can be a fixed entry or a selection where the player must choose one entry.
public let target: AutomaticEntryTarget
private enum CodingKeys: String, CodingKey {
@@ -44,8 +44,7 @@ public struct SikaryanDrainSpecialAbilityTranslation: EntitySubtype {
public let rules: Rules
/// The AP value. It is only used if the text cannot be generated from the
/// given information.
/// The AP value. It is only used if the text cannot be generated from the given information.
public let apValue: AdventurePointsValueReplacement?
public let errata: Errata?
@@ -44,8 +44,7 @@ public struct VampiricGiftTranslation: EntitySubtype {
public let rules: Rules
/// The AP value. It is only used if the text cannot be generated from the
/// given information.
/// The AP value. It is only used if the text cannot be generated from the given information.
public let apValue: AdventurePointsValueReplacement?
public let errata: Errata?
@@ -8,8 +8,7 @@
import DiscriminatedEnum
public struct SpecialRule: EntitySubtype {
/// An optional label that is displayed and placed before the actual
/// text.
/// An optional label that is displayed and placed before the actual text.
public let label: NonEmptyString?
/// The text of a special rule.
@@ -14,14 +14,12 @@ public struct Language: LocalizableEntity {
/// The continents this language is present on.
public let continent: [AssociatedContinent]
/// Language-specific specializations. Either a list of possible options or a
/// indefinite description of what may be a specialization.
/// Language-specific specializations. Either a list of possible options or a indefinite description of what may be a specialization.
public let specializations: Specializations?
public let prerequisites: LanguagePrerequisites?
/// The maximum possible level of the language. Only specified if lower than
/// default of 3.
/// The maximum possible level of the language. Only specified if lower than default of 3.
public let maxLevel: Double?
public let src: PublicationRefs
@@ -63,8 +61,7 @@ public struct SpecificSpecializationTranslation: EntitySubtype {
/// The name of the specialization.
public let name: NonEmptyString
/// The specialization description. It will be appended to the name in
/// parenthesis.
/// The specialization description. It will be appended to the name in parenthesis.
public let description: NonEmptyString?
}
@@ -77,8 +74,7 @@ public struct IndefiniteSpecializationsTranslation: EntitySubtype {
/// The specializations description.
public let description: NonEmptyString
/// An input label or placeholder text for an UI element if it differs
/// from the `description`.
/// An input label or placeholder text for an UI element if it differs from the `description`.
public let label: NonEmptyString?
}
@@ -20,8 +20,7 @@ public struct CauldronEnchantment: LocalizableEntity {
public let volume: Volume
/// Witches can learn to brew special things in their Witch's Cauldron. These
/// brews can be categorized in different types.
/// Witches can learn to brew special things in their Witch's Cauldron. These brews can be categorized in different types.
public let brew: BrewReference
public let cost: EnchantmentCost?
@@ -62,8 +62,7 @@ public struct SpellSwordEnchantmentTranslation: EntitySubtype {
@available(*, deprecated)
public let bindingCost: String?
/// The AP value. It is only used if the text cannot be generated from the
/// given information.
/// The AP value. It is only used if the text cannot be generated from the given information.
public let apValue: AdventurePointsValueReplacement?
public let errata: Errata?

Some files were not shown because too many files have changed in this diff Show More