Commit Graph

21 Commits

Author SHA1 Message Date
Cal Corum
8f9a3dc14a Clean up bestiary descriptions: strip HTML and fix line breaks
- Removed HTML tags (<p>, etc.) from action/ability descriptions
- Fixed mid-sentence line breaks caused by PDF column formatting
- Descriptions now display cleanly in NPC sheet textareas

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 13:34:24 -06:00
Cal Corum
7133c13476 Add 143 new bestiary creatures from PDF extraction
Extracted creatures include:
- Dragons (Hatchling, Elder, Ancient)
- Elementals (Air, Fire, Water, Earth variants)
- Classic monsters (Troll, Goblin, Orc, Ogre, Minotaur, etc.)
- Undead (Ghost, Banshee, Death Knight, etc.)
- Fae (Brownie, Pixie, Satyr, Hags, etc.)
- Oozes & Plants (Black Pudding, Shambling Mound, Treant)
- Outer beings and cryptids

All creatures have accurate base stats (HD, HP, TL, Speed, Armor, Morale,
Zone, Size, Type) parsed from the PDF. Actions and abilities are captured
as raw text for future refinement.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 13:28:10 -06:00
Cal Corum
93eb393e5a Fix bestiary compendium _key prefix for Actor type
Changed _key from !items! to !actors! in all 92 bestiary JSON files.
Actor compendiums require the !actors! prefix to be recognized by Foundry.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 13:15:37 -06:00
Cal Corum
55a3b6ca52 Fix bestiary stat errors found during PDF audit
Corrected swapped stats between creature entries:
- Beetle Bombardier/Tiger: HD, HP, Armor, Morale were swapped
- Boar/Boar Giant: speeds were swapped (40↔50)
- Cattle/Crab Giant: speeds were swapped (20↔25)
- Beetle Giant Fire: speed corrected to 40

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 12:59:49 -06:00
Cal Corum
bcbf8338ff Fix compendium IDs to be exactly 16 alphanumeric characters
Foundry VTT v13 requires all _id values to be exactly 16 characters.
Previous IDs ranged from 17-25+ characters and caused validation errors.

Changes:
- Use 7-char prefix per type (vgbdAnc, vgbdCls, vgbdPrk, etc.)
- Append 9-char name derived from filename with padding
- Handle collisions with numeric suffixes (e.g., vgbdPrkheighten1)

Files updated across all compendiums:
- Ancestries: 7 files
- Classes: 18 files
- Perks: 103 files (3 collision fixes)
- Spells: 58 files
- Weapons: 43 files
- Armor: 5 files
- Equipment: ~300 files (25 collision fixes)
- Bestiary: ~70 files (8 collision fixes)
- Statuses: ~15 files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 11:04:10 -06:00
Cal Corum
0325343931 Fix spell cast dialog buttons and add scrollbar support
- Remove duplicate event listeners from SpellCastDialog._onRender()
  (favor/hinder and modifier presets are handled by parent class)
- Add scrollbar support to all roll dialogs via .window-content styling
  (overflow-y: auto, max-height: 80vh, custom scrollbar)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 14:47:02 -06:00
Cal Corum
bf2cd92e93 Add Status item system and separate attack/damage rolls
Status System:
- Add StatusData model with mechanical modifiers (damageDealt, healingReceived)
- Add status item sheet with modifier configuration
- Add status-bar.hbs for displaying status chips on actor sheets
- Status chips show tooltip on hover, can be removed via click
- Add 17 status items to compendium (Blinded, Burning, Charmed, etc.)
- Frightened applies -2 damage dealt, Sickened applies -2 healing received

Attack Roll Changes:
- Separate attack and damage into two discrete rolls
- Attack hit now shows "Roll Damage" button instead of auto-rolling
- Button click rolls damage and updates the chat message in-place
- Store weapon/attack data in message flags for later damage rolling
- Fix favor/hinder and modifier preset buttons in attack dialog
- Show individual damage dice results in chat card breakdown

Mechanical Integration:
- Add _applyStatusModifiers() to VagabondActor for aggregating status effects
- Update getRollData() to include statusModifiers for roll formulas
- Update damageRoll() to automatically apply damageDealt modifier
- Update applyHealing() to respect healingReceived modifier

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 14:36:57 -06:00
Cal Corum
8d44b06f40 Add bestiary compendium - Humanlike category (21 NPCs)
First batch of bestiary creatures from Core Rulebook pp.112-114:
- Acolyte, Apothecary, Assassin, Bandit, Bard, Berserker, Brigand
- Commoner, Cultist, Gladiator, Guard, Knight
- Mage (Fire, Frost, Shock), Noble, Scout, Thug, Trader
- Veteran, Warlord

All entries include: HD, HP, TL, Armor, Morale, Zone, Speed,
Actions (with damage/type), and Abilities where applicable.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 10:21:58 -06:00
Cal Corum
8af585133b Update roadmap: mark compendium tasks 6.4-6.8 complete
- 6.4: 58 spells with full metadata
- 6.5: 103 perks with structured prerequisites
- 6.6: 43 weapons with properties
- 6.7: 5 armor items (including barding)
- 6.8: 368 equipment items with Silver Standard values

Also added system.json pack definitions and build scripts for
weapons, armor, and equipment compendiums.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 01:05:44 -06:00
Cal Corum
1a36139387 Add slotsWhenEquipped system and equipment Active Effect sync
- Add getTotalSlots() method to base-item.mjs as unified interface
- Add slotsWhenEquipped field to weapon, armor, and equipment schemas
- Implement getTotalSlots() in each item type respecting equipped state
- Update actor slot calculation to use getTotalSlots() uniformly
- Add _onUpdate hook to sync equipment effects with equipped state
- Update backpack with slotsWhenEquipped: 0 and +2 slot bonus effect

Backpack now correctly:
- Costs 1 slot when unequipped, 0 when equipped
- Grants +2 max item slots via Active Effect when equipped

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 00:34:16 -06:00
Cal Corum
77706eafe2 Add complete equipment compendium (368 items) + fix Silver Standard values
Equipment compendium:
- 286 adventuring gear items (tools, clothing, instruments, containers, etc.)
- 82 alchemical items (potions, oils, poisons, acids, explosives)
- Proper categorization (gear, tool, consumable, container, treasure)
- Comprehensive tagging for filtering
- Consumable items with uses tracking
- Container capacity for backpacks etc.

Value correction (Silver Standard):
- Fixed all weapon, armor, and equipment values
- Vagabond uses Silver Standard: 1g = 100s, 1s = 100c
- Previous values were 10x too low (assumed 1s = 10c)
- All 415 item values now correct

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 23:59:18 -06:00
Cal Corum
4110d79489 Add complete armor compendium (5 items)
- Light Armor: 1 armor, 500c, 2 slots, requires Might 3
- Medium Armor: 2 armor, 1000c, 2 slots, requires Might 4
- Heavy Armor: 3 armor, 2000c, 3 slots, requires Might 5
- Light Barding: 1 armor, 1000c, 2 slots (for mounts)
- Heavy Barding: 3 armor, 2500c, 3 slots (for mounts)

All values match NoteDiscovery source (1g = 10s = 100c)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 23:20:54 -06:00
Cal Corum
49b60954fe Add complete weapons compendium (43 weapons)
- Generate all 43 weapon JSON files with proper data model
- Parse damage dice, grip types, ranges, properties from source
- Convert values to copper (1g = 10s = 100c)
- Map properties: Brawl, Brutal, Cleave, Entangle, Finesse, Keen, Long, Near, Ranged, Shield, Thrown
- Calculate versatile damage (increased die size for 2H grip)
- Assign damage types: blunt/piercing/slashing based on weapon type
- Add validation script for future verification
- All weapons validated against NoteDiscovery source

Weapon categories:
- Melee: 28 (swords, axes, hammers, polearms)
- Ranged: 10 (bows, crossbows, firearms)
- Brawl: 5 (caestus, gauntlet, katar, unarmed)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 23:19:30 -06:00
Cal Corum
fae29030a2 Add complete perks compendium (103 perks)
- Generate all 103 perk JSON files with structured prerequisites
- Parse stat requirements (MIT/DEX/AWR/RSN/PRS/LUK with thresholds)
- Parse trained skill requirements (AND/OR conditions)
- Parse spell prerequisites and custom resource requirements
- Detect ritual perks (8 total) with duration parsing
- Tag repeatable perks (7 total)
- Assign context-aware tags (combat, defensive, utility, social, etc.)
- Add validation script for future verification
- All perks validated against NoteDiscovery source

Perk categories:
- Combat perks: 45
- Magic-enhancing perks: 28
- Ritual perks: 8 (Athame, Familiar, Medium, etc.)
- Repeatable perks: 7 (Advancement, Bookworm, Pack Mule, etc.)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 23:08:29 -06:00
Cal Corum
18df9e4395 Add complete spells compendium (58 spells)
- Create all 58 spell JSON files with correct data model structure
- Validate all spells against NoteDiscovery source content
- Include damage types, effects, crit effects, delivery types, duration types
- Add validation script for future compendium verification
- All spells marked as reviewed after human approval

Spells by damage type:
- Fire: Apoplex, Burn, Erupt, Light
- Cold: Fog, Freeze, Frostburn, Moon
- Shock: Disintegrate, Zap
- Acid: Enflesh, Goop, Rust
- Poison: Gas, Leech
- Blunt: Kinesis, Terraform
- None: 41 utility/buff/control spells

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 22:48:26 -06:00
Cal Corum
fa71f3b985 Implement Active Effects automation (Phase 11)
Schema & Documentation:
- Extended EFFECT_KEYS with 24 new mappings: senses (6), movement
  capabilities (5), skill training (12), focus tracking
- Created docs/ACTIVE_EFFECTS_REFERENCE.md with comprehensive guide
  for effect keys, modes, JSON format, and formula support

Ancestry Automation:
- Goblin: Darksight (darkvision), Nimble (+5 speed)
- Orc: Darksight (darkvision), Hulking (+2 item slots)
- Halfling: Nimble (+5 speed)
- Draken: Scale (+1 armor)
- Dwarf already had automation from earlier work

Class Automation:
- Wizard: Manifold Mind I/II (+1 focus.maxConcurrent each)
- Fighter Valor already automated (proof of concept)
- Gunslinger Deadeye deferred (dynamic, not static bonus)

Added Phase 11 to PROJECT_ROADMAP.json with 18 tasks (10 complete,
8 deferred for conditional flags/UI/state tracking).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 22:13:18 -06:00
Cal Corum
828cfed006 Review and correct perk compendium JSONs, delete fabricated perk
Perks corrected:
- Sharpshooter: Fixed prereq DEX 4 → AWR 7, effect now correctly
  reduces crit roll by 1 when skipping Move (was +1 damage)
- Situational Awareness: Added missing Detect training prereq,
  fixed effect to Favor on surprise checks + flanking doesn't Hinder
- Tough: Fixed prereq MIT 4 → MIT 7, effect now +Level HP scaling
  (was flat +5 HP)

Deleted:
- Weapon Mastery: Completely fabricated perk not in source material

Also marked all 7 ancestries as reviewed (were already correct except
Dwarf's Tough trait which was fixed in previous session).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 16:36:41 -06:00
Cal Corum
e8370afcc3 Review and correct all 18 class compendium JSONs
- Add skillTraining schema: supports fixed grants and player choices
  e.g., [{ type: "fixed", skills: ["arcana"], count: 1 },
         { type: "choice", skills: ["detect", "influence"], count: 3 }]
- Add weaponTraining schema: ["melee", "ranged"] or []
- Correct all class features, progressions, and descriptions from source
- Fix mana progressions (accumulating values, not flat)
- Replace fabricated D&D-style features with actual Vagabond features
- Add official flavor text from rulebook
- Mark all classes as reviewed: true
- Add reviewed: false to ancestry and perk JSONs for upcoming review
- Add castingMax formula TODO to PROJECT_ROADMAP.json (task 2.15)

Classes corrected: Alchemist, Barbarian, Bard, Dancer, Druid, Fighter,
Gunslinger, Hunter, Luminary, Magus, Merchant, Pugilist, Revelator,
Rogue, Sorcerer, Vanguard, Witch, Wizard

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 16:24:59 -06:00
Cal Corum
36a1e501f2 Add compendium data review requirement and checklist
- CLAUDE.md: Added mandatory human review process for all packs/_source/ changes
- REVIEW_CHECKLIST.md: Detailed validation checklist for classes, ancestries, perks, spells

Prevents hallucinated flavor text and incorrect game mechanics from being committed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:49:40 -06:00
Cal Corum
06e0dc01c0 Complete P2-P5: Perks, Feature Choices, Ancestry Traits, Caster Progression
- P2: Perks with changes[] arrays create Active Effects on drop/delete
- P3: Feature choice UI for Fighting Style (auto-grants Situational
  Awareness + selected training perk, ignoring prerequisites)
- P4: Ancestry traits apply Active Effects (Dwarf Darksight/Tough working)
- P5: Caster progression accumulates mana from class progression table

Key patterns:
- Manual UUID construction: Compendium.${pack.collection}.Item.${entry._id}
- ignorePrereqs flag for specific choices bypassing all prerequisites
- Mode 5 (OVERRIDE) for boolean senses like darkvision
- Form data merging with direct DOM reading for reliable selection capture

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:23:44 -06:00
Cal Corum
a7862bedd5 Implement class level-up system with Active Effects
- Add level-up dialog (ApplicationV2) showing features gained per level
- Class features with `changes` arrays auto-create Active Effects
- Valor I/II/III on Fighter reduces crit threshold cumulatively (-1/-2/-3)
- Perk selection UI in dialog (awaits perk compendium content)
- Fix duplicate item creation bug (was double drop handling)
- Configure proper dragDrop in ActorSheetV2 DEFAULT_OPTIONS
- Add ancestries and classes compendium packs with LevelDB format
- Docker compose PUID/PGID for proper file permissions

Key patterns established:
- Class progression stored in item.system.progression[]
- Features with changes[] become ActiveEffects on level-up
- applyClassFeatures() is idempotent (checks existing effects)
- updateClassFeatures() handles level changes incrementally

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 12:14:08 -06:00