Figuring out the szf format

This commit is contained in:
Chris Bell 2025-06-30 16:06:22 -05:00
parent 9da72ac9ae
commit aa71f08a51
4 changed files with 624 additions and 7 deletions

235
szf-documentation.md Normal file
View File

@ -0,0 +1,235 @@
# Session Zero Format (.szf) Documentation
## Overview
The Session Zero Format (.szf) is a human-readable, structured data format designed specifically for the Session Zero tabletop RPG management application. It provides a standardized way to represent game data, templates, and character sheets for offline storage, interchange, and sharing.
## Format Principles
- **Human-Readable**: Content is stored in plain text with a clear, consistent structure
- **Self-Documenting**: Field types and metadata are explicitly defined
- **Extensible**: Format supports future expansion without breaking compatibility
- **Portable**: Files can be easily shared and imported across devices
- **Compact**: Efficient representation without unnecessary verbosity
## File Structure
All .szf files follow a common structure:
1. **Header**: Identifies the file type and schema version
2. **Metadata**: Contains descriptive information about the content
3. **Content Sections**: Contains the actual data organized in logical sections
### Header Format
Files begin with type declaration and schema version:
```
!type: [file_type]
!schema: [schema_version]
```
Where `[file_type]` can be:
- `dataset` - Collection of related game elements
- `character_template` - Character sheet definition
- `character` - Actual character data
- `session` - Game session data
And `[schema_version]` follows semantic versioning (e.g., `1.0.0`).
### Section Format
Data is organized into named sections with optional nesting:
```
[Section: Name]
FieldName (field_type) = value
[Section.SubsectionName]
FieldName (field_type) = value
```
For entries in datasets, the format is:
```
[Entry: EntryName]
FieldName (field_type) = value
[Entry.EntryName.SubsectionName]
FieldName (field_type) = value
```
## Field Types
The .szf format supports the following field types:
| Type | Description | Example |
|------|-------------|--------|
| `text` | Single-line string | `Name (text) = Longsword` |
| `text-field` | Multi-line text | `Description (text-field) = A long sword...` |
| `number` | Integer or floating-point | `Weight (number) = 3` |
| `bool` | Boolean true/false | `IsMartial (bool) = true` |
| `group` | Container for related fields | `Currency (group) = true` |
| `calculated` | Formula-based computed value | `StrengthMod (calculated) = (Strength - 10) / 2` |
| `system` | Special application-handled field | `DatasetType (system) = items` |
| `dataset-reference` | Reference to specific dataset | `Race (dataset-reference) = PlayableRaces` |
| `dataset-type` | Reference to any dataset of type | `PrimaryWeapon (dataset-type) = items` |
| `dataset-reference-multiple` | Multiple references to specific dataset | `Feats (dataset-reference-multiple) = CoreFeats` |
| `dataset-type-multiple` | Multiple references to dataset type | `Level1Spells (dataset-type-multiple) = spells` |
## Dataset Format
Datasets contain collections of related game elements like items, spells, or character classes.
### Example
```szf
!type: dataset
!schema: 1.0.0
[Metadata]
Name (text) = Core Fantasy Items
Type (text) = items
Version (text) = 1.0.0
Description (text-field) = Basic fantasy items for any campaign
[Entry: Longsword]
Name (text) = Longsword
Description (text-field) = A standard sword with a long blade
Category (text) = Weapon
[Entry.Longsword.Stats]
Damage (text) = 1d8
Weight (number) = 3
IsMartial (bool) = true
```
## Character Template Format
Templates define the structure of character sheets, including fields, calculations, and dataset references.
### Example
```szf
!type: character_template
!schema: 1.0.0
[Metadata]
Name (text) = Fantasy Character Sheet
Version (text) = 2.0.0
GUID (text) = f9e8d7c6-b5a4-3210-9876-543210fedcba
Description (text-field) = Advanced character sheet for fantasy RPGs
Author (text) = Template Master
GameSystem (text) = Fantasy RPG Universal
[Required Datasets]
ClassesDataset (text) = Core Classes|c3d4e5f6-g7h8-9012-cdef-123456789012|1.5.0
RacesDataset (text) = Playable Races|d4e5f6g7-h8i9-0123-def0-234567890123|1.3.0
[Section: Ability Scores]
Strength (number) = 10
Dexterity (number) = 10
Constitution (number) = 10
[Section.Ability Scores.Modifiers]
StrengthMod (calculated) = (Strength - 10) / 2
DexterityMod (calculated) = (Dexterity - 10) / 2
```
## Special Features
### Dataset Dependencies
Character templates can specify required datasets using the `Name|GUID|Version` triple format:
```
[Required Datasets]
ClassesDataset (text) = Core Classes|c3d4e5f6-g7h8-9012-cdef-123456789012|1.5.0
```
This ensures that character sheets created from the template have access to the correct datasets.
### Calculated Fields
Formulas can reference other fields to create dynamic values:
```
StrengthMod (calculated) = (Strength - 10) / 2
SpellSaveDC (calculated) = 8 + ProficiencyBonus + IntelligenceMod
```
Supported operations include basic arithmetic, comparisons, and functions like SUM, MIN, MAX.
### Nested Sections
Sections can be nested to create a logical hierarchy:
```
[Section: Equipment]
DatasetType (system) = items
[Section.Equipment.Weapons]
PrimaryWeapon (dataset-type) = items
```
### System Properties
Special fields that control application behavior:
```
DatasetType (system) = items
SelectionMode (system) = multiple
```
## Best Practices
1. **Use Descriptive Names**: Choose clear, meaningful section and field names
2. **Include Metadata**: Always provide version, description, and author information
3. **Organize Logically**: Group related fields into appropriate sections
4. **Set Defaults**: Provide sensible default values where appropriate
5. **Document Dependencies**: List all required datasets with their correct identifiers
6. **Validate Before Sharing**: Ensure all references are valid and values are appropriate
7. **Follow Naming Conventions**: Use consistent capitalization and naming patterns
## Import/Export Guidelines
### Exporting
When exporting .szf files:
1. Include all required metadata (especially GUID and version)
2. List all dependencies explicitly
3. Keep file sizes reasonable (prefer multiple focused files over single massive ones)
4. Set appropriate default values
### Importing
When importing .szf files:
1. Validate the file structure before processing
2. Check for missing dependencies
3. Handle version conflicts appropriately
4. Validate all field values against their declared types
## Character Sheet Data
When a character is created from a template, the resulting .szf file contains:
1. Reference to the source template (GUID and version)
2. All field values populated by the user
3. References to selected dataset entries
4. Character-specific notes and customizations
## Versioning and Compatibility
- **GUID**: Unique identifier that remains constant across versions
- **Version**: Semantic version number (MAJOR.MINOR.PATCH)
- **Compatibility**: Minor versions should maintain backward compatibility
- **Breaking Changes**: Major version increases indicate potentially incompatible changes
## Common Use Cases
1. **Sharing Game Systems**: Distribute templates and datasets for specific RPG systems
2. **Character Backups**: Export characters for safekeeping or transfer between devices
3. **Community Content**: Share custom content with other Session Zero users
4. **Game Preparation**: Pre-build NPCs, items, and other game elements

View File

@ -35,6 +35,12 @@ The Library serves as the central content repository, organized into modular dat
- **Number**: Integer or floating-point values - **Number**: Integer or floating-point values
- **Boolean**: True/false checkboxes - **Boolean**: True/false checkboxes
- **Group**: Nested collections of related fields - **Group**: Nested collections of related fields
- **Calculated**: Dynamically computed values based on mathematical formulas referencing other fields
- **System**: Special fields handled by the application framework for configuration purposes
- **Dataset-Reference**: Reference to a specific dataset identified by its unique identifier
- **Dataset-Type**: Generic reference to any dataset of a specified type (e.g., items, spells)
- **Dataset-Reference-Multiple**: Multiple selection reference to a specific dataset
- **Dataset-Type-Multiple**: Multiple selection reference to any dataset of a specified type
#### Data Management #### Data Management
- **Local Storage**: All datasets stored locally in LocalStorage for fast access - **Local Storage**: All datasets stored locally in LocalStorage for fast access
@ -66,6 +72,16 @@ Templates define the structure and layout of character sheets for specific game
- **Validation**: Enforce required fields and data type constraints - **Validation**: Enforce required fields and data type constraints
- **Reusability**: One template can generate unlimited characters - **Reusability**: One template can generate unlimited characters
#### Dataset Integration
- **Required Datasets**: Templates specify dependencies via Name|GUID|Version format
- **Reference Types**:
- **Dataset-Reference**: Direct reference to specific dataset entries by key
- **Dataset-Type**: Generic reference to any dataset of a specified type
- **Multiple Selection**: Support for selecting multiple items from datasets
- **Section Binding**: Entire sections can be bound to dataset types
- **Selection Modes**: Single selection, multiple selection with optional count limits
- **System Properties**: Special template properties handled by the application framework
#### Data Management #### Data Management
- **Local Storage**: All templates stored locally in LocalStorage for fast access - **Local Storage**: All templates stored locally in LocalStorage for fast access
- **Cloud Sync**: Optional synchronization for paid accounts - **Cloud Sync**: Optional synchronization for paid accounts
@ -73,6 +89,13 @@ Templates define the structure and layout of character sheets for specific game
- **Version Control**: Each template has unique GUID and semantic versioning - **Version Control**: Each template has unique GUID and semantic versioning
- **Online Library**: Community templates hub (download free, upload requires paid account) - **Online Library**: Community templates hub (download free, upload requires paid account)
#### Dataset Dependencies
- **Reference Format**: `Name|GUID|Version` triple identifies exact dataset requirements
- **Dependency Resolution**: Templates fetch dependencies from local storage by GUID and version
- **Fallback Behavior**: Missing dependencies prompt download from community library
- **Graceful Degradation**: Templates function with empty datasets if dependencies unavailable
- **Type Discovery**: Dataset types determined from metadata, not hardcoded in templates
### 3. Character Manager (Character Sheet Interface) ### 3. Character Manager (Character Sheet Interface)
Character sheets are runtime instances of templates, populated with player data and linked to relevant datasets. Character sheets are runtime instances of templates, populated with player data and linked to relevant datasets.
@ -153,6 +176,13 @@ Sessions provide the active gaming environment where GMs and players interact wi
- **Type Coercion**: Automatic conversion between compatible types - **Type Coercion**: Automatic conversion between compatible types
- **Hierarchical Validation**: Groups must contain at least one child entry - **Hierarchical Validation**: Groups must contain at least one child entry
#### Calculated Fields
- **Formula Parsing**: Support for mathematical expressions with field references
- **Runtime Evaluation**: Formulas re-evaluated whenever dependency values change
- **Function Support**: Built-in math functions (SUM, MIN, MAX, etc.)
- **Cross-Field References**: Reference other fields by name in calculations
- **Nested References**: Access properties of referenced dataset entries (e.g., Equipment.Weight)
### File Format Specification (.szf) ### File Format Specification (.szf)
Session Zero Format provides human-readable, structured data representation for all content types. Session Zero Format provides human-readable, structured data representation for all content types.
@ -186,19 +216,48 @@ IsMartial (bool) = true
[Metadata] [Metadata]
Name (text) = Fantasy Character Sheet Name (text) = Fantasy Character Sheet
Version (text) = 1.0.0 Version (text) = 2.0.0
Description (text-field) = Character sheet for fantasy RPGs GUID (text) = f9e8d7c6-b5a4-3210-9876-543210fedcba
Description (text-field) = Advanced character sheet for fantasy RPGs
Author (text) = Template Master
GameSystem (text) = Fantasy RPG Universal
[Section: Core] [Required Datasets]
ClassesDataset (text) = Core Classes|c3d4e5f6-g7h8-9012-cdef-123456789012|1.5.0
RacesDataset (text) = Playable Races|d4e5f6g7-h8i9-0123-def0-234567890123|1.3.0
[Section: Core Identity]
Name (text) =
Race (dataset-reference) = RacesDataset
Class (dataset-reference) = ClassesDataset
Level (number) = 1
[Section: Ability Scores]
Strength (number) = 10 Strength (number) = 10
Dexterity (number) = 10 Dexterity (number) = 10
Constitution (number) = 10 Constitution (number) = 10
[Section: Inventory] [Section.Ability Scores.Modifiers]
# Links to 'items' dataset type for dropdown population StrengthMod (calculated) = (Strength - 10) / 2
DexterityMod (calculated) = (Dexterity - 10) / 2
[Section: Journal] [Section: Inventory]
Notes (text-field) = "" DatasetType (system) = items
SelectionMode (system) = multiple
MaxItems (number) = 50
CarryingCapacity (calculated) = Strength * 15
[Section: Equipment]
PrimaryWeapon (dataset-type) = items
SecondaryWeapon (dataset-type) = items
[Section: Spellcasting]
DatasetType (system) = spells
SpellSaveDC (calculated) = 8 + ProficiencyBonus + IntelligenceMod
[Section.Spellcasting.Known Spells]
Cantrips (dataset-type-multiple) = spells
Level1Spells (dataset-type-multiple) = spells
``` ```
## Business Model ## Business Model

217
test_char_template.szf Normal file
View File

@ -0,0 +1,217 @@
!type: character_template
!schema: 1.0.0
[Metadata]
Name (text) = Advanced Fantasy Character Sheet
Version (text) = 2.1.0
GUID (text) = f9e8d7c6-b5a4-3210-9876-543210fedcba
Description (text-field) = Comprehensive character template for fantasy RPGs with full dataset integration, calculated fields, and advanced features
Author (text) = Template Master
GameSystem (text) = Fantasy RPG Universal
[Required Datasets]
PlayerCharacterClasses (text) = Player Character Classes|c3d4e5f6-g7h8-9012-cdef-123456789012|1.5.3
PlayableRaces (text) = Playable Races|d4e5f6g7-h8i9-0123-def0-234567890123|1.3.0
CoreSkillsList (text) = Core Skills List|e5f6g7h8-i9j0-1234-ef01-345678901234|1.0.2
[Section: Core Identity]
CharacterName (text) =
PlayerName (text) =
Race (dataset-reference) = PlayableRaces
Class (dataset-reference) = PlayerCharacterClasses
Level (number) = 1
Experience (number) = 0
Alignment (text) = Neutral
Background (text) =
Age (number) = 25
Height (text) =
Weight (text) =
Gender (text) =
[Section: Ability Scores]
Strength (number) = 10
Dexterity (number) = 10
Constitution (number) = 10
Intelligence (number) = 10
Wisdom (number) = 10
Charisma (number) = 10
[Section.Ability Scores.Modifiers]
StrengthMod (calculated) = (Strength - 10) / 2
DexterityMod (calculated) = (Dexterity - 10) / 2
ConstitutionMod (calculated) = (Constitution - 10) / 2
IntelligenceMod (calculated) = (Intelligence - 10) / 2
WisdomMod (calculated) = (Wisdom - 10) / 2
CharismaMod (calculated) = (Charisma - 10) / 2
[Section: Combat Statistics]
HitPoints (number) = 10
MaxHitPoints (calculated) = BaseHP + (ConstitutionMod * Level)
ArmorClass (calculated) = 10 + DexterityMod + ArmorBonus + ShieldBonus
Initiative (calculated) = DexterityMod + MiscInitiative
Speed (number) = 30
BaseAttackBonus (number) = 0
[Section.Combat Statistics.Saving Throws]
Fortitude (calculated) = BaseFortitude + ConstitutionMod
Reflex (calculated) = BaseReflex + DexterityMod
Will (calculated) = BaseWill + WisdomMod
BaseFortitude (number) = 0
BaseReflex (number) = 0
BaseWill (number) = 0
[Section: Skills]
DatasetReference (system) = CoreSkillsList
Acrobatics (number) = 0
Athletics (number) = 0
Deception (number) = 0
History (number) = 0
Insight (number) = 0
Intimidation (number) = 0
Investigation (number) = 0
Medicine (number) = 0
Nature (number) = 0
Perception (number) = 0
Performance (number) = 0
Persuasion (number) = 0
Religion (number) = 0
SleightOfHand (number) = 0
Stealth (number) = 0
Survival (number) = 0
[Section.Skills.Skill Modifiers]
AcrobaticsTotal (calculated) = Acrobatics + DexterityMod
AthleticsTotal (calculated) = Athletics + StrengthMod
DeceptionTotal (calculated) = Deception + CharismaMod
HistoryTotal (calculated) = History + IntelligenceMod
InsightTotal (calculated) = Insight + WisdomMod
IntimidationTotal (calculated) = Intimidation + CharismaMod
InvestigationTotal (calculated) = Investigation + IntelligenceMod
MedicineTotal (calculated) = Medicine + WisdomMod
NatureTotal (calculated) = Nature + IntelligenceMod
PerceptionTotal (calculated) = Perception + WisdomMod
PerformanceTotal (calculated) = Performance + CharismaMod
PersuasionTotal (calculated) = Persuasion + CharismaMod
ReligionTotal (calculated) = Religion + IntelligenceMod
SleightOfHandTotal (calculated) = SleightOfHand + DexterityMod
StealthTotal (calculated) = Stealth + DexterityMod
SurvivalTotal (calculated) = Survival + WisdomMod
[Section: Equipment]
DatasetType (system) = items
SelectionMode (system) = multiple
Currency (group) = true
[Section.Equipment.Weapons]
PrimaryWeapon (dataset-type) = items
SecondaryWeapon (dataset-type) = items
RangedWeapon (dataset-type) = items
Ammunition (dataset-type) = items
AmmoCount (number) = 0
[Section.Equipment.Armor]
Armor (dataset-type) = items
Shield (dataset-type) = items
ArmorBonus (calculated) = Armor.ArmorClass
ShieldBonus (calculated) = Shield.ArmorClass
[Section.Equipment.Currency]
PlatinumPieces (number) = 0
GoldPieces (number) = 0
SilverPieces (number) = 0
CopperPieces (number) = 0
TotalGoldValue (calculated) = (PlatinumPieces * 10) + GoldPieces + (SilverPieces / 10) + (CopperPieces / 100)
[Section: Inventory]
DatasetType (system) = items
SelectionMode (system) = multiple
MaxItems (number) = 50
CarryingCapacity (calculated) = Strength * 15
CurrentWeight (calculated) = SUM(SelectedItems.Weight)
EncumbranceLevel (calculated) = CurrentWeight / CarryingCapacity
[Section: Spellcasting]
DatasetType (system) = spells
SelectionMode (system) = multiple
SpellcastingAbility (text) = Intelligence
SpellSaveDC (calculated) = 8 + ProficiencyBonus + SpellcastingAbilityMod
SpellAttackBonus (calculated) = ProficiencyBonus + SpellcastingAbilityMod
SpellsKnown (number) = 0
SpellSlots (group) = true
[Section.Spellcasting.Spell Slots]
Level1Slots (number) = 0
Level2Slots (number) = 0
Level3Slots (number) = 0
Level4Slots (number) = 0
Level5Slots (number) = 0
Level6Slots (number) = 0
Level7Slots (number) = 0
Level8Slots (number) = 0
Level9Slots (number) = 0
[Section.Spellcasting.Known Spells]
Cantrips (dataset-type-multiple) = spells
Level1Spells (dataset-type-multiple) = spells
Level2Spells (dataset-type-multiple) = spells
Level3Spells (dataset-type-multiple) = spells
Level4Spells (dataset-type-multiple) = spells
Level5Spells (dataset-type-multiple) = spells
[Section: Companions]
DatasetType (system) = npcs
SelectionMode (system) = multiple
MaxCompanions (number) = 3
[Section.Companions.Active Companions]
Animal Companion (dataset-type) = npcs
Familiar (dataset-type) = npcs
Hireling (dataset-type) = npcs
[Section: Features and Traits]
RacialTraits (group) = true
ClassFeatures (group) = true
Feats (group) = true
[Section.Features and Traits.Racial Traits]
DarkvisionRange (number) = 0
Size (text) = Medium
Languages (text-field) = Common
SpecialAbilities (text-field) =
[Section.Features and Traits.Class Features]
HitDie (text) = d8
ProficiencyBonus (number) = 2
ArmorProficiencies (text-field) =
WeaponProficiencies (text-field) =
ToolProficiencies (text-field) =
SavingThrowProficiencies (text) =
[Section: Personal Journal]
CharacterDescription (text-field) =
Personality (text-field) =
Ideals (text-field) =
Bonds (text-field) =
Flaws (text-field) =
Backstory (text-field) =
Goals (text-field) =
Notes (text-field) =
[Section: Combat Tracker]
CurrentHitPoints (number) = 10
TemporaryHitPoints (number) = 0
HitDiceRemaining (text) = 1d8
DeathSaves (group) = true
Conditions (text-field) =
ActionEconomy (group) = true
[Section.Combat Tracker.Death Saves]
Successes (number) = 0
Failures (number) = 0
IsStabilized (bool) = false
[Section.Combat Tracker.Action Economy]
ActionUsed (bool) = false
BonusActionUsed (bool) = false
ReactionUsed (bool) = false
MovementUsed (number) = 0

106
test_dataset.szf Normal file
View File

@ -0,0 +1,106 @@
!type: dataset
!schema: 1.0.0
[Metadata]
Name (text) = Complete Fantasy Arsenal
Type (text) = items
Version (text) = 1.2.0
GUID (text) = a1b2c3d4-e5f6-7890-abcd-ef1234567890
Description (text-field) = Comprehensive collection of fantasy weapons, armor, and magical items with full stat blocks and lore
Author (text) = Fantasy Content Creator
Tags (text) = fantasy, weapons, armor, magic, core
[Entry: Flamebrand Longsword]
Name (text) = Flamebrand Longsword
Description (text-field) = An ancient blade wreathed in perpetual flames, forged in the heart of a dying star. The crossguard bears draconic runes that pulse with inner fire.
Category (text) = Weapon
ItemType (text) = Sword
Rarity (text) = Legendary
Value (number) = 5000
Weight (number) = 3.5
IsStackable (bool) = false
RequiresAttunement (bool) = true
[Entry.Flamebrand Longsword.Combat Stats]
Damage (text) = 1d8 + 2
DamageType (text) = Slashing + Fire
AttackBonus (number) = 2
CriticalRange (text) = 19-20
CriticalMultiplier (text) = x2
Reach (number) = 5
WeaponType (text) = Martial
[Entry.Flamebrand Longsword.Properties]
IsMagical (bool) = true
IsCursed (bool) = false
IsArtifact (bool) = false
School (text) = Evocation
CasterLevel (number) = 12
[Entry.Flamebrand Longsword.Special Abilities]
FlameStrike (text-field) = Once per day, wielder can activate to deal additional 2d6 fire damage on next successful hit
FireImmunity (bool) = true
LightSource (text) = Sheds bright light in 20-foot radius, dim light for additional 20 feet
IgniteFlammables (bool) = true
[Entry.Flamebrand Longsword.Lore]
Origin (text-field) = Created by the legendary smith Valdris Fireforge during the War of Burning Skies
History (text-field) = Wielded by three kings before disappearing into the Tomb of Echoes. Recently recovered by the Sunblade Company.
Legends (text-field) = Said to grow stronger when facing creatures of darkness and cold
Identification (text) = DC 20 Arcana check reveals basic properties, DC 25 reveals special abilities
[Entry: Dragonscale Plate]
Name (text) = Dragonscale Plate Armor
Description (text-field) = Masterwork plate armor crafted from the scales of an ancient red dragon, providing exceptional protection and resistance to elemental damage.
Category (text) = Armor
ItemType (text) = Heavy Armor
Rarity (text) = Very Rare
Value (number) = 8000
Weight (number) = 55
IsStackable (bool) = false
RequiresAttunement (bool) = false
[Entry.Dragonscale Plate.Armor Stats]
ArmorClass (number) = 18
ArmorType (text) = Plate
MaxDexBonus (number) = 0
ArmorCheckPenalty (number) = -6
ArcaneSpellFailure (number) = 35
SpeedReduction (number) = 10
[Entry.Dragonscale Plate.Resistances]
FireResistance (bool) = true
ColdResistance (bool) = false
AcidResistance (bool) = true
ElectricResistance (bool) = false
SonicResistance (bool) = false
[Entry.Dragonscale Plate.Special Properties]
DragonAura (text-field) = Intimidation checks gain +2 circumstance bonus
ScaleRegeneration (text-field) = Armor self-repairs minor damage over time
BreathWeaponProtection (number) = 50
[Entry: Healing Potion Lesser]
Name (text) = Potion of Lesser Healing
Description (text-field) = A crimson liquid that glows faintly with restorative magic, contained in a crystal vial with a cork stopper.
Category (text) = Consumable
ItemType (text) = Potion
Rarity (text) = Common
Value (number) = 50
Weight (number) = 0.5
IsStackable (bool) = true
MaxStack (number) = 10
[Entry.Healing Potion Lesser.Effects]
HealingAmount (text) = 2d4 + 2
Duration (text) = Instantaneous
ActionType (text) = Standard Action
UsageLimit (number) = 1
DestroyOnUse (bool) = true
[Entry.Healing Potion Lesser.Crafting]
CraftDC (number) = 15
CraftSkill (text) = Alchemy
MaterialCost (number) = 25
CraftTime (text) = 4 hours
RequiredLevel (number) = 3