Commit Graph

6 Commits

Author SHA1 Message Date
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
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
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
Cal Corum
517b7045c7 Add Phase 2 core system logic: document classes, dice rolling, and fixes
Implements Phase 2 foundational components:
- VagabondActor document class with item management, resource tracking,
  damage/healing, rest mechanics, and combat helpers
- VagabondItem document class with chat card generation and item usage
- Comprehensive dice rolling module (d20 checks, skill/attack/save rolls,
  damage with crit doubling, countdown dice, morale checks)
- Quench tests for all dice rolling functions

Fixes Foundry VTT v13 compatibility issues:
- Add documentTypes to system.json declaring valid Actor/Item types
- Fix StringField validation errors by using nullable/null pattern
  instead of blank string choices for optional fields
- Update actor tests to use embedded documents for slot calculations

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 10:21:48 -06:00
Cal Corum
44dbd00e1b Add development tooling: ESLint, Prettier, Husky, and Quench tests
Set up complete development environment with:
- ESLint with Foundry VTT globals (game, CONFIG, Actor, etc.)
- Prettier for consistent code formatting
- Husky + lint-staged for pre-commit hooks
- Quench test framework structure with sanity checks

Documentation:
- DEVELOPMENT.md with tooling decisions and rationale
- README.md updated with development setup instructions

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

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