138 lines
3.1 KiB
JavaScript
138 lines
3.1 KiB
JavaScript
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: SYSTEM.SPELL_COLORS_CHOICES,
|
|
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
|
|
})
|
|
|
|
// 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: ""
|
|
})
|
|
|
|
// Keywords (text field with comma-separated values)
|
|
schema.keywords = new fields.StringField({
|
|
required: true,
|
|
initial: "",
|
|
label: "Keywords"
|
|
})
|
|
|
|
// Prism RPG: Targets
|
|
schema.targets = new fields.StringField({
|
|
required: true,
|
|
initial: "Single enemy",
|
|
label: "Targets"
|
|
})
|
|
|
|
// Prism RPG: Resolve method (Attack, Saving Throw, None)
|
|
schema.resolve = new fields.StringField({
|
|
required: true,
|
|
initial: "Attack",
|
|
label: "Resolve"
|
|
})
|
|
|
|
return schema
|
|
}
|
|
|
|
/** @override */
|
|
static LOCALIZATION_PREFIXES = ["PRISMRPG.Spell"]
|
|
}
|