import { SYSTEM } from "../config/system.mjs" export default class PrismRPGSpell extends foundry.abstract.TypeDataModel { static defineSchema() { const fields = foundry.data.fields const requiredInteger = { required: true, nullable: false, integer: true } const schema = {} schema.description = new fields.HTMLField({ required: false, blank: true, initial: "", textSearch: true, }) // Spell level (1-7+) schema.level = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1, max: 25, }) // Mana cost - base cost of the spell schema.manaCost = new fields.NumberField({ ...requiredInteger, required: true, initial: 1, min: 0, label: "Mana Cost" }) // Mana upkeep cost (for sustained spells) schema.manaUpkeep = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0, label: "Mana Upkeep" }) // APC to cast schema.apc = new fields.NumberField({ ...requiredInteger, required: true, initial: 1, min: 0, label: "Action Point Cost" }) // Color/Hue of the spell (from the Prism) schema.color = new fields.StringField({ required: true, initial: "violet", choices: Object.keys(SYSTEM.SPELL_COLORS || {}), label: "Spell Color" }) // Color effect description schema.colorEffect = new fields.HTMLField({ required: true, initial: "", label: "Color Effect" }) // Spell Ascension - can be upcast schema.canAscend = new fields.BooleanField({ required: true, initial: true, label: "Can Ascend" }) schema.ascensionEffect = new fields.HTMLField({ required: true, initial: "", label: "Ascension Effect" }) // Memorized (prepared) schema.memorized = new fields.BooleanField({ required: true, initial: false }) // Components schema.components = new fields.SchemaField({ verbal: new fields.BooleanField({ initial: false }), somatic: new fields.BooleanField({ initial: false }), catalyst: new fields.BooleanField({ initial: false }), material: new fields.BooleanField({ initial: false }), }) schema.materialComponent = new fields.StringField({ required: true, initial: "" }) schema.catalyst = new fields.StringField({ required: true, initial: "" }) // Casting parameters schema.castingTime = new fields.StringField({ required: true, initial: "1 action" }) schema.spellRange = new fields.StringField({ required: true, initial: "30ft" }) schema.areaAffected = new fields.StringField({ required: true, initial: "Single target" }) schema.duration = new fields.StringField({ required: true, initial: "Instantaneous" }) schema.savingThrow = new fields.StringField({ required: true, initial: "" }) // Attack and damage schema.attackRoll = new fields.StringField({ required: true, initial: "" }) schema.powerRoll = new fields.StringField({ required: true, initial: "" }) // Keywords schema.keywords = new fields.ArrayField( new fields.StringField() ) // Legacy fields schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) schema.criticalType = new fields.StringField({ required: true, initial: "electric", choices: SYSTEM.SPELL_CRITICAL }) return schema } /** @override */ static LOCALIZATION_PREFIXES = ["PRISMRPG.Spell"] }