vagabond-rpg-foundryvtt/module/data/actor/base-actor.mjs
Cal Corum 51f0472d99 Implement Phase 1: Complete data model system for actors and items
Actor Data Models:
- VagabondActorBase: Shared base class with biography field
- CharacterData: Full PC schema with stats, skills, saves, resources,
  custom crit thresholds, dynamic resources, item slots, wealth tracking
- NPCData: Monster stat block with HD, HP, TL, zone, morale, actions,
  abilities, immunities/weaknesses

Item Data Models:
- VagabondItemBase: Shared base with description field
- AncestryData: Being type, size, racial traits
- ClassData: Progression tables, features, mana/casting, trained skills
- SpellData: Dynamic mana cost calculation, delivery/duration types
- PerkData: Prerequisites system, stat/skill/spell requirements
- WeaponData: Damage, grip, properties, attack types, crit thresholds
- ArmorData: Armor value, type, dodge penalty
- EquipmentData: Quantity, slots, consumables
- FeatureData: Class features with Active Effect changes

Active Effects Integration:
- Helper module for creating and managing Active Effects
- Effect key mapping for stats, saves, skills, crit thresholds
- Utilities for applying/removing item effects

Derived Value Calculations (CharacterData):
- Max HP = Might × Level
- Speed by Dexterity lookup
- Item Slots = 8 + Might - Fatigue
- Save difficulties from stat pairs
- Skill difficulties (trained doubles stat contribution)

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

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

52 lines
1.4 KiB
JavaScript

/**
* Base Actor Data Model
*
* Provides shared data fields and methods for all actor types in Vagabond RPG.
* This is an abstract base class - use CharacterData or NPCData for actual actors.
*
* @extends foundry.abstract.TypeDataModel
*/
export default class VagabondActorBase extends foundry.abstract.TypeDataModel {
/**
* Define the base schema shared by all actors.
* Subclasses should call super.defineSchema() and extend the result.
*
* @returns {Object} The schema definition
*/
static defineSchema() {
const fields = foundry.data.fields;
return {
// Biography/description - rich text HTML content
biography: new fields.HTMLField({ required: false, blank: true }),
};
}
/**
* Prepare base data for the actor.
* Called before derived data calculation.
* Override in subclasses to add type-specific base preparation.
*/
prepareBaseData() {
// Base preparation - subclasses can override
}
/**
* Prepare derived data for the actor.
* Called after base data and before render.
* Override in subclasses to calculate derived values.
*/
prepareDerivedData() {
// Derived data calculation - subclasses should override
}
/**
* Get the roll data for this actor for use in Roll formulas.
*
* @returns {Object} Roll data object with actor's stats and values
*/
getRollData() {
const data = { ...this };
return data;
}
}