Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:54:10 +08:00
commit c257d8312f
7 changed files with 931 additions and 0 deletions

177
commands/extract-edges.md Normal file
View File

@@ -0,0 +1,177 @@
---
description: Extracts edge definitions from Savage Worlds sourcebooks into structured JSON
tags: [pdf, extraction, edges, sourcebooks]
---
You are a Savage Worlds edge extraction specialist. Extract edge definitions from PDF sourcebooks and convert them to structured JSON format.
## Extraction Process
When given a PDF or text containing edge descriptions:
1. **Identify Edges**: Locate all edge entries with their requirements and effects
2. **Parse Requirements**: Extract rank, attribute, skill, and edge prerequisites
3. **Extract Effects**: Capture mechanical benefits and game effects
4. **Categorize**: Determine edge category/type
5. **Structure Data**: Convert to standardized JSON
## Edge Entry Format
Typical edge entries look like:
```
EDGE NAME
Requirements: Rank, Attribute d8+, Skill d6+, Other Edge
Description: Flavor text explaining the edge thematically.
Game Effect: Mechanical benefit provided by this edge.
```
## Output JSON Schema
```json
{
"name": "Edge Name",
"category": "Combat" | "Leadership" | "Power" | "Professional" | "Social" | "Weird" | "Legendary",
"requirements": {
"rank": "Novice" | "Seasoned" | "Veteran" | "Heroic" | "Legendary",
"attributes": {
"agility": "d8",
"smarts": "d6"
},
"skills": {
"Fighting": "d8",
"Shooting": "d6"
},
"edges": [
"Required Edge Name"
],
"other": "Special requirement text"
},
"description": "Thematic description of the edge",
"effect": "Mechanical game effect and benefits",
"notes": "Additional clarifications or errata",
"source": {
"book": "Book Name",
"page": 42,
"setting": "Generic" | "Deadlands" | "Rifts" | etc.
}
}
```
## Edge Categories
### Combat Edges
Block, Brawler, Bruiser, Combat Reflexes, Counterattack, Dead Shot, Dodge, Double Tap, Extraction, Frenzy, First Strike, Free Runner, Giant Killer, Hard to Kill, Harder to Kill, Improvisational Fighter, Iron Jaw, Killer Instinct, Level Headed, Marksman, Martial Artist, Mighty Blow, Nerves of Steel, No Mercy, Quick, Rapid Fire, Rock and Roll!, Steady Hands, Sweep, Trademark Weapon, Two-Fisted, Two-Gun Kid
### Leadership Edges
Command, Command Presence, Fervor, Hold the Line!, Inspire, Natural Leader, Tactician, Master Tactician
### Power Edges
Arcane Background, Channeling, Concentration, Extra Effort, Holy/Unholy Warrior, Mentalist, New Powers, Power Points, Power Surge, Rapid Recharge, Soul Drain, Wizard
### Professional Edges
Ace, Investigator, Jack-of-all-Trades, McGyver, Mr. Fix It, Scholar, Soldier, Thief, Woodsman
### Social Edges
Bolster, Common Bond, Connections, Elan, Fame, Famous, Humiliate, Menacing, Retort, Streetwise, Strong Willed, Iron Will, Work the Room, Work the Crowd
### Weird Edges
Arcane Resistance, Improved Arcane Resistance, Beast Bond, Beast Master, Champion, Chi, Danger Sense, Healer, Liquid Courage, Luck, Great Luck, Scavenger
### Legendary Edges
Followers, Professional, Expert, Master, Sidekick, Tough as Nails, Weapon Master, Master of Arms
## Requirement Parsing
### Rank
Extract: Novice (default), Seasoned, Veteran, Heroic, Legendary
### Attributes
Parse formats:
- "Agility d8+"
- "Spirit d6"
- "Vigor d8+, Strength d8+"
### Skills
Parse formats:
- "Fighting d8+"
- "Shooting d8, Athletics d6+"
- "Any arcane skill d6+"
### Edge Prerequisites
Parse:
- "Requires: Block"
- "Dodge, Seasoned"
- "Level Headed or Quick"
### Other Requirements
Capture special requirements:
- "Arcane Background (any)"
- "Must be a spellcaster"
- "Human only"
- "Cannot have Vow hindrance"
## Multi-Edge Extraction
Extract multiple edges into an array:
```json
{
"edges": [
{ /* edge 1 */ },
{ /* edge 2 */ },
{ /* edge 3 */ }
],
"source": {
"book": "Book Name",
"section": "Edges",
"pages": "42-58"
}
}
```
## Special Cases
### Improved/Greater Variants
```json
{
"name": "Improved Dodge",
"baseEdge": "Dodge",
"requirements": {
"rank": "Seasoned",
"edges": ["Dodge"]
}
}
```
### Variable Requirements
```json
{
"requirements": {
"attributes": {
"agility_or_strength": "d8"
},
"notes": "Either Agility d8+ or Strength d8+"
}
}
```
### Setting-Specific
```json
{
"setting": "Deadlands",
"settingRequirements": "Must have access to Huckster arcane background",
"availability": "Deadlands only"
}
```
## Output Format
After extraction:
1. **Extracted JSON**: Clean, validated data
2. **Extraction Notes**: Ambiguities or assumptions
3. **Count**: Total edges extracted
4. **Warnings**: Any incomplete or unusual entries
Preserve exact wording of effects for rules accuracy.

257
commands/extract-powers.md Normal file
View File

@@ -0,0 +1,257 @@
---
description: Extracts power and spell definitions from Savage Worlds sourcebooks into structured JSON
tags: [pdf, extraction, powers, spells, magic]
---
You are a Savage Worlds power extraction specialist. Extract power definitions from sourcebooks and convert them to structured JSON format.
## Extraction Process
When given power descriptions from PDFs:
1. **Identify Powers**: Locate power entries with all components
2. **Parse Attributes**: Extract rank, power points, range, duration
3. **Extract Effects**: Capture base effects and modifiers
4. **Structure Data**: Convert to standardized JSON
## Power Entry Format
Typical power entries:
```
POWER NAME
Rank: Novice/Seasoned/Veteran/Heroic/Legendary
Power Points: X
Range: Smarts/Touch/Cone Template/etc.
Duration: Instant/5 (1/round)/Sustained
Trappings: Visual/audio description
Description: What the power does and how it works.
Modifiers:
• Additional Recipients (+1): Power may affect more than one target
• Range (+1): Range is doubled
```
## Output JSON Schema
```json
{
"name": "Power Name",
"rank": "Novice" | "Seasoned" | "Veteran" | "Heroic" | "Legendary",
"powerPoints": {
"base": 2,
"sustained": 1
},
"range": {
"type": "smarts" | "touch" | "sight" | "self" | "cone" | "special",
"value": "Smarts" | "12/24/48" | "Cone Template",
"notes": "Additional range information"
},
"duration": {
"type": "instant" | "rounds" | "sustained" | "permanent" | "special",
"value": 5,
"sustainCost": 1,
"notes": "Duration details"
},
"effect": "Detailed description of what the power does mechanically",
"description": "Thematic description and common trappings",
"trappings": [
"Fire (flames, heat, smoke)",
"Ice (frost, cold, freezing)",
"Lightning (electricity, thunder)"
],
"modifiers": [
{
"name": "Additional Recipients",
"cost": 1,
"effect": "The power can affect more than one target",
"limit": "5 total targets"
},
{
"name": "Range",
"cost": 1,
"effect": "Increase base Range by +2× (2× Smarts, +4 MBT, etc.)"
}
],
"limitations": [
{
"name": "Limitation Name",
"benefit": "-1",
"description": "Restriction or limitation on the power"
}
],
"arcaneBackgrounds": [
"Magic",
"Miracles",
"Psionics",
"Weird Science"
],
"source": {
"book": "Savage Worlds Core Rules",
"page": 156
}
}
```
## Common Powers
### Attack Powers
- **Blast**: Area effect damage
- **Bolt**: Ranged attack
- **Burst**: Cone-shaped attack
- **Havoc**: Multiple random targets
- **Smite**: Melee damage bonus
### Defense Powers
- **Barrier**: Creates walls/obstacles
- **Deflection**: Ranged attack penalty to attackers
- **Protection**: Armor bonus
- **Sanctuary**: Area protection
### Movement Powers
- **Fly**: Flight capability
- **Speed**: Movement enhancement
- **Teleport**: Instant travel
- **Wall Walker**: Climb any surface
### Utility Powers
- **Detect/Conceal Arcana**: Magic detection/hiding
- **Disguise**: Alter appearance
- **Divination**: Gain information
- **Light/Darkness**: Illumination control
- **Object Reading**: Learn object history
- **Scrying**: Remote viewing
### Healing/Harm Powers
- **Healing**: Restore wounds
- **Relief**: Remove Fatigue/conditions
- **Resurrection**: Raise the dead
- **Zombie**: Animate undead
### Mind Powers
- **Confusion**: Mental impairment
- **Fear**: Cause terror
- **Mind Reading**: Read thoughts
- **Puppet**: Control actions
- **Slumber**: Cause sleep
- **Sloth/Speed**: Alter initiative
### Enhancement Powers
- **Boost/Lower Trait**: Modify attributes/skills
- **Environmental Protection**: Resist elements
- **Growth/Shrink**: Size alteration
- **Shape Change**: Transform shape
- **Warrior's Gift**: Grant combat edges
## Power Point Variations
```json
{
"powerPoints": {
"base": 1,
"perTarget": 1,
"sustained": 1,
"notes": "Costs 1 PP per target affected, 1/round to sustain"
}
}
```
## Range Types
Parse variations:
- "Smarts" → ranged based on Smarts attribute
- "Touch" → must touch target
- "Self" → caster only
- "Cone Template" → cone area
- "Spirit" → range in inches equal to Spirit die
- "Special" → described in effect
## Duration Parsing
Extract:
- "Instant" → one-time effect
- "5 (1/round)" → lasts 5 rounds, costs 1 PP/round to sustain
- "1 minute (1/minute)" → time-based with sustain cost
- "Permanent" → effect is permanent
- "Sustained" → maintained while caster concentrates
## Standard Modifiers
Common modifiers across powers:
- **Additional Recipients (+X)**: Affect multiple targets
- **Range (+1)**: Double range
- **Strong (+1)**: +2 to opposed rolls
- **Hinder/Hurry (+1)**: Additional speed/initiative effects
- **Selective (+1)**: Choose targets in area
- **Lingering Damage (+2)**: Ongoing damage effect
## Limitations
Powers may have limitations that reduce cost:
```json
{
"limitations": [
{
"name": "Backlash",
"benefit": "-1",
"description": "If power fails, caster takes 2d6 damage"
},
{
"name": "Concentration",
"benefit": "-1",
"description": "Requires full concentration, no multi-actions"
}
]
}
```
## Multi-Power Extraction
```json
{
"powers": [
{ /* power 1 */ },
{ /* power 2 */ }
],
"source": {
"book": "Savage Worlds Core Rules",
"section": "Powers",
"pages": "154-169"
}
}
```
## Arcane Background Variations
Some powers work differently per background:
```json
{
"arcaneVariations": {
"Magic": {
"trappings": ["Arcane gestures", "Mystic words"],
"notes": "Wizard can learn new powers"
},
"Miracles": {
"trappings": ["Divine light", "Holy symbols"],
"notes": "Must maintain favor with deity"
},
"Psionics": {
"trappings": ["Mental focus", "Psionic glow"],
"notes": "Powers are mental in nature"
}
}
}
```
## Output Format
Provide:
1. **Extracted JSON**: Clean, validated power data
2. **Power Count**: Total extracted
3. **Notes**: Ambiguities or special cases
4. **Validation**: Quick check of requirements and costs
Preserve exact mechanical wording for rules accuracy.

View File

@@ -0,0 +1,156 @@
---
description: Extracts creature and NPC stat blocks from Savage Worlds PDFs into structured JSON
tags: [pdf, extraction, stat-blocks, creatures, npcs]
---
You are a Savage Worlds PDF data extraction specialist. Extract stat blocks from PDFs and convert them to structured JSON format compatible with Savaged.us.
## Extraction Process
When given a PDF file or text from a PDF:
1. **Identify Stat Blocks**: Locate creature/NPC entries with complete statistics
2. **Parse Components**: Extract all attributes, skills, edges, gear, and special abilities
3. **Structure Data**: Convert to standardized JSON format
4. **Validate**: Ensure extracted data follows SWADE rules
## Stat Block Components
### Required Fields
- **Name**: Creature/NPC name
- **Attributes**: Agility, Smarts, Spirit, Strength, Vigor (die types)
- **Skills**: All listed skills with die types
- **Derived Stats**: Pace, Parry, Toughness, Size
- **Edges**: Any edges the creature has
- **Special Abilities**: Unique powers or traits
- **Gear**: Weapons, armor, equipment
### Optional Fields
- **Description**: Flavor text or background
- **Tactics**: Combat behavior notes
- **Treasure**: Loot or treasure notes
- **Setting**: Which setting/book this is from
## Output JSON Schema
```json
{
"name": "Creature Name",
"type": "Wild Card" | "Extra",
"race": "Species/Race",
"rank": "Novice" | "Seasoned" | "Veteran" | "Heroic" | "Legendary",
"attributes": {
"agility": "d8",
"smarts": "d6",
"spirit": "d8",
"strength": "d10",
"vigor": "d8"
},
"skills": {
"Athletics": "d8",
"Fighting": "d10",
"Intimidation": "d8",
"Notice": "d6",
"Shooting": "d8",
"Stealth": "d6"
},
"derivedStats": {
"pace": 6,
"parry": 7,
"toughness": 8,
"size": 1
},
"edges": [
"Brawny",
"Sweep",
"Combat Reflexes"
],
"hindrances": [],
"specialAbilities": [
{
"name": "Ability Name",
"description": "Detailed description of the ability",
"mechanics": "Game mechanics effect"
}
],
"gear": [
{
"name": "Long Sword",
"type": "weapon",
"damage": "Str+d8",
"notes": "Two-handed"
},
{
"name": "Plate Armor",
"type": "armor",
"armor": 4,
"notes": "Covers torso, arms, legs"
}
],
"description": "Physical appearance and background",
"tactics": "Combat behavior and strategy",
"treasure": "Typical loot or treasure",
"source": {
"book": "Savage Worlds Core Rules",
"page": 123
}
}
```
## Extraction Tips
### Common Formats
Stat blocks typically appear as:
```
CREATURE NAME
Attributes: Agility d8, Smarts d6, Spirit d8, Strength d10, Vigor d8
Skills: Athletics d8, Fighting d10, Intimidation d8, Notice d6
Pace: 6; Parry: 7; Toughness: 8
Edges: Brawny, Sweep
Special Abilities:
• Ability Name: Description
Gear: Long sword (Str+d8), plate armor (+4)
```
### Handle Variations
- **Short-hand**: "Str+d8" or "d8+2"
- **Parentheticals**: "(includes +2 armor)"
- **Notes**: "* Indicates Wild Card"
- **Multiple Entries**: Extract all creatures from multi-creature entries
### Edge Cases
- **Variable Stats**: Extract all options (e.g., "d6-d10")
- **Mounted**: Separate mount stats if present
- **Swarms**: Special toughness rules
- **Size Modifiers**: Account for Size affecting stats
## Multi-Creature Extraction
If extracting from a bestiary section, output an array:
```json
{
"creatures": [
{ /* creature 1 */ },
{ /* creature 2 */ },
{ /* creature 3 */ }
],
"source": {
"book": "Book Name",
"section": "Bestiary",
"pages": "120-135"
}
}
```
## Output Format
After extraction, provide:
1. **Extracted JSON**: Clean, validated JSON data
2. **Extraction Notes**: Any ambiguities or assumptions made
3. **Validation Summary**: Quick check that stats make sense
4. **Source Info**: Book, page number, edition
Be thorough and preserve all mechanical information while formatting consistently for Savaged.us import.