Commit Graph

59 Commits

Author SHA1 Message Date
Cal Corum
9dede70226 Remove LevelDB files from git and update .gitignore
- Add gitignore patterns for compendium LevelDB files (*.ldb, MANIFEST-*, LOG, CURRENT, LOCK)
- Add gitignore for packs/*/lost/ recovery directories
- Add gitignore for temp working files
- Remove all tracked LevelDB files (generated from _source/ JSON on build)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 16:39:23 -06:00
Cal Corum
ee124af202 Add scrollbar to NPC actor sheet
- Create npc-body.hbs as combined body template with all sections
- Simplify PARTS to header + body instead of individual sections
- Add flex layout and custom scrollbar CSS for sheet-body
- Preload npc-body.hbs template in vagabond.mjs

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 13:47:19 -06:00
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
ee17d788fd Update roadmap with recent enhancements
- Attack/spell dialogs: crit threshold stepper, separate damage roll buttons
- Attack skills: trained/untrained toggle (like regular skills)
- Ranged attacks: use Awareness stat (not Dexterity)
- Active Effect reference doc: comprehensive attribute key documentation

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 10:36:19 -06:00
Cal Corum
0eb258d2c1 Add trained toggle to attack skills (Melee, Brawl, Ranged, Finesse)
Attack skills now have trained/untrained status like regular skills:
- Untrained: difficulty = 20 - stat
- Trained: difficulty = 20 - (stat × 2)

Includes UI toggle button, data model fields, and matching styling.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 10:33:35 -06:00
Cal Corum
fe91764f3b Fix ranged attack stat to use Awareness instead of Dexterity
The character sheet was incorrectly using Dexterity for ranged attacks.
Config and weapon model already had the correct Awareness stat.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 19:05:38 -06:00
Cal Corum
5ac51681e9 Add Active Effect attribute reference documentation
Quick reference for attribute keys, types, and patterns when creating
Active Effects for characters and NPCs. Includes flag-based favor/hinder
system and example patterns for common class features.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 18:30:54 -06:00
Cal Corum
7f06ec229a Add Roll Damage button to spell chat cards
Spell damage is now rolled separately via button click instead of
automatically, matching the attack roll behavior. Includes spell chat
card styling fixes for proper header layout and damage display.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 18:14:04 -06:00
Cal Corum
a30cc62957 Add crit threshold stepper to attack and spell roll dialogs
- Add always-visible crit threshold display with +/- adjustment buttons
- Store modifier relative to base threshold, clamped between 1 and 20
- Reset modifier when changing weapon/spell selection
- Use Math.clamp (not deprecated Math.clamped) for Foundry v13 compatibility
- Pass effective crit threshold to attackCheck() and skillCheck()
- Add SCSS styling for stepper control with hover states

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 15:42:11 -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
73dcfb1f96 Merge prototype/class-level-system: Active Effects automation
Implements P1-P5 prototype tasks:
- P1: Class level-up with Active Effects
- P2: Perk Active Effects on drop/delete
- P3: Feature choices (Fighting Style perk selection)
- P4: Ancestry traits as Active Effects
- P5: Caster class progression (mana accumulation)

Key patterns established:
- Features/perks/traits with changes[] arrays become ActiveEffects
- Manual UUID construction for compendium items
- ignorePrereqs flag for special choice scenarios
- Mode 5 (OVERRIDE) for boolean senses

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:47:36 -06:00
Cal Corum
607c65cffc Add missing Handlebars join helper for item sheet templates
Class and perk item sheets use {{join arr ", "}} to display array fields
but the helper was never registered.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 14:46:20 -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
7d66bea10f Update roadmap: reference class level-up design doc
Task 2.12 now references:
- NoteDiscovery design doc: gaming/vagabond-rpg/class-level-system-design.md
- Prototype branch: prototype/class-level-system commit a7862be

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 12:17:03 -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
Cal Corum
26cac676f0 Complete accessibility audit (Task 5.9)
Color Contrast (WCAG AA 4.5:1 compliance):
- accent-highlight: #cd853f → #7a4f1d (5.23:1)
- warning: #b8860b → #705308 (5.29:1)
- dark theme muted: #8a7e6e → #9a8e7e (5.39:1)
- dark theme warning: #d4a32c → #c99020 (6.17:1)

Accessibility Utilities (_base.scss):
- .sr-only for screen reader only content
- .skip-link visible on focus
- .interactive-row with focus-visible styles
- prefers-reduced-motion media query support

Interactive Element Improvements:
- Save/attack rows: role="button", tabindex="0", aria-label
- Stat inputs: proper label for= associations
- Decorative icons: aria-hidden="true"
- Keyboard activation via _setupKeyboardAccessibility()

Editor Fix:
- Simplified editor-wrapper styles to restore ProseMirror toggle button
- Resize feature remains deferred to Task 5.11

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 15:56:52 -06:00
Cal Corum
8b9daa1f36 Add light/dark theme system with CSS variables, fix ProseMirror editors
Theme System:
- Add _theme-variables.scss with light (parchment) and dark color palettes
- Register theme options in system.json for Foundry v13 color scheme support
- Convert all SCSS color variables to CSS custom properties
- Update base, mixins, components, and sheet styles for theme support
- Add _applyThemeClass() to actor and item sheet classes

ProseMirror Editor Fix (v13 ApplicationV2):
- Replace {{editor}} helper with <prose-mirror> custom element
- Add TextEditor.enrichHTML() for rich text content preparation
- Update all 8 item templates (spell, weapon, armor, equipment, etc.)
- Fix toolbar hiding content by renaming wrapper to .editor-wrapper
- Style prose-mirror with sticky toolbar and proper flex layout

Roll Dialog & Chat Card Styling:
- Complete roll dialog styling with favor/hinder toggles, info panels
- Complete chat card styling with roll results, damage display, animations
- Mark tasks 5.7 and 5.8 complete in roadmap
- Add task 5.11 for deferred resizable editor feature

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 15:36:16 -06:00
Cal Corum
5ddd33c41c Implement complete item sheet system with Effects tab
Phase 4 (Item Sheets) complete:
- Created VagabondItemSheet base class using ApplicationV2 + HandlebarsApplicationMixin
- Implemented templates for all 8 item types: weapon, armor, equipment, ancestry, class, spell, perk, feature
- Added Details and Effects tabs to all item sheets
- Effects tab provides full CRUD for Active Effects (create, edit, toggle, delete)
- Added ~150 localization strings for item fields and UI elements
- Comprehensive SCSS styling matching parchment theme

Key features:
- Type-specific templates with appropriate fields for each item type
- Array field management for traits, progression tables, features
- Wider dropdowns for ancestry Being Type and Size fields
- Effect controls remain clickable when effect is disabled

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 02:30:18 -06:00
Cal Corum
350475b331 Update roadmap: mark NPC sheet styling complete 2025-12-15 00:18:34 -06:00
Cal Corum
694b11f423 Implement movement capability system with boolean toggles
Movement types (Climb, Cling, Fly, Phase, Swim) now use boolean
toggles instead of separate speed values, matching RAW where all
special movement uses base speed.

Changes:
- Update NPC and Character data models with movement schema
- Add movement section to NPC stats template (grid layout)
- Add movement section to character biography template
- Add localization strings with tooltip hints for each type
- Style movement grid to match senses section pattern
- Add rollable # Appearing label for NPC sheets
- Fix NPC sheet scrollbar visibility

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 00:16:44 -06:00
Cal Corum
1e67466d95 Update roadmap: mark character sheet styling complete
- Task 5.4 (Style Character sheet): Marked complete with comprehensive notes
- Task 3.11 (Magic tab): Updated notes with implementation details
- Task 3.12 (Biography tab): Updated notes with senses overhaul details
- Task 3.14 (NPC stats): Updated notes about senses system

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-14 22:37:53 -06:00
Cal Corum
15fd9f684f Style Magic and Biography tabs, update senses system
Magic tab:
- Mana display matching inventory header format
- Focus status panel with active spell tracking
- Spell list with damage/effect badges and cast buttons
- Spellcasting reference guide with delivery/duration costs

Biography tab:
- Character details section with Size and Being Type dropdowns
- Senses as 3-column grid of boolean checkboxes
- Biography and Notes textareas with proper styling
- Languages section hidden (not yet implemented)

Senses system overhaul:
- Changed from mixed boolean/number to all boolean toggles
- Renamed darksight to darkvision
- Added: allsight, echolocation, seismicsense, telepathy
- Removed: tremorsense (not in system)
- Updated both character and NPC data models
- Updated NPC sheet template and hasSenses logic

Also updated PROJECT_ROADMAP.json with styling progress notes.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-14 22:36:11 -06:00
Cal Corum
10963403e9 Style abilities tab with ancestry, features, perks, and effects
- Add ancestry block with header (image, name, type, size) and traits list
- Style features and perks lists with grid layout for image/info/description
- Add active effects display for temporary and passive effects
- Fix perk prerequisites display using getPrerequisiteString() method
- Add responsive layout for narrow containers

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 21:56:49 -06:00
Cal Corum
7489b60281 Style inventory tab with item lists and header
- Add inline header with item slots and currency inputs (gold/silver/copper)
- Style item sections (weapons, armor, equipment) with proper list layout
- Constrain item thumbnails to 32x32px
- Add colored stat badges for damage (red) and armor (blue)
- Style equip toggle and delete buttons with hover states
- Add responsive layout for narrow containers

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 21:19:00 -06:00
Cal Corum
8e097c9b2d Implement character sheet foundation with ApplicationV2
Add actor sheet implementation using Foundry VTT v13 ApplicationV2 API:
- Base actor sheet class with tab navigation, drag-drop, scroll preservation
- Character sheet with header, main tab (stats, saves, skills, attacks)
- NPC sheet structure (templates only, styling pending)
- Resource bars with fill effect and backdrop pills for legibility
- Responsive layout using CSS Container Queries
- Fix for ApplicationV2 tab switching (cleanup stale parts)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 16:43:28 -06:00
Cal Corum
f6948dc7d6 Implement NPC morale check system
Add morale roll system for NPCs with group support and automatic triggers:
- rollMorale() method for individual NPC morale checks (2d6 vs morale score)
- rollGroupMorale() static method uses lowest morale in selected tokens
- promptMoraleCheck() posts GM-whispered chat with clickable roll button
- Auto-prompt when NPC HP drops to half or below
- Chat button click handler for morale prompts
- Morale Check macro for quick group rolls
- Comprehensive test suite for morale functionality

Morale fails when 2d6 > morale score, setting moraleStatus.broken = true.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 00:03:07 -06:00
Cal Corum
1224cc9b55 Add testing strategy reference to CLAUDE.md
Link to NoteDiscovery note gaming/vagabond-rpg/testing-strategy
which documents Quench testing patterns for Foundry VTT.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 21:21:02 -06:00
Cal Corum
8afcf8c07b Implement class feature automation system
- Add _onCreate/_preDelete lifecycle methods to VagabondItem for automatic
  feature application and cleanup when classes are added/removed
- Add updateActor hook to apply new features when character level increases
- Implement applyClassFeatures() with idempotency to prevent duplicate effects
- Add _applyClassProgression() for mana/castingMax from class progression
- Add _applyTrainedSkills() to mark class skills as trained
- Fix getCastingMaxAtLevel() to sum values instead of taking maximum
- Add comprehensive test suite (10 tests) covering unit and integration tests

Effects are tagged with vagabond flags for easy filtering and management.
Methods calculate progression values directly for robustness with embedded items.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 21:19:26 -06:00
Cal Corum
8656fd5f44 Mark task 2.10 complete in roadmap
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 20:44:19 -06:00
Cal Corum
69475fca55 Add resource management method tests
Tests for VagabondActor resource methods:
- modifyResource() bounds checking
- applyDamage() with armor reduction and ignoreArmor option
- applyHealing() clamped to max
- spendMana() / spendLuck() with success/failure returns
- addFatigue() with max 5 cap
- takeBreather() / takeFullRest() recovery mechanics
- isDead getter for HP=0 and fatigue=5 conditions

Task 2.10: Resource management was already implemented, tests now
document and verify the existing functionality.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 20:44:00 -06:00
Cal Corum
7c3c140bf0 Mark task 2.9 (crit threshold system) complete in roadmap
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 20:35:27 -06:00
Cal Corum
062189e315 Add crit threshold modifier tests and fix effect application
- Add comprehensive Quench tests for crit threshold system:
  - Skill crit thresholds modified by Active Effects
  - Attack crit thresholds (melee, ranged, brawl, finesse)
  - Effect stacking, disabled effects, minimum threshold enforcement
  - Helper function validation

- Fix crit threshold clamping in CharacterData.prepareDerivedData():
  - Skills: clamp in _calculateSkillDifficulties() after effects apply
  - Attacks: new _clampAttackCritThresholds() method
  - Ensures thresholds stay within 1-20 range after Active Effects

- Note: Foundry v13 auto-prepares data after createEmbeddedDocuments,
  manual prepareData() calls cause double effect application

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 20:34:36 -06:00
Cal Corum
6247004b58 Implement spell casting system with rulebook-accurate mana costs
- Add SpellCastDialog with delivery/duration/damage configuration
- Fix mana cost calculation to match rulebook formula:
  - Effect-only or 1d6 damage-only = 0 mana
  - Both damage AND effect = 1 mana base
  - +1 per extra damage die beyond first
  - +delivery cost (Touch/Remote/Imbue=0, Cube=1, Area=2)
  - Duration has no initial cost (Focus requires maintenance)
- Add "Include Effect" toggle for damage vs effect choice
- Create spell cast chat card template
- Add 20+ i18n strings for spell casting UI
- Create comprehensive Quench tests for mana calculation
- Add Cast Spell macro for testing
- Update CLAUDE.md with NoteDiscovery access instructions

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 20:22:20 -06:00