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>
52 lines
1.4 KiB
JavaScript
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;
|
|
}
|
|
}
|