ce630feb51
- Replace Knockback with Internal Injury on D30 (5, 10, 15); remove Shield Bash from D30 counter-attacks - Eliminate small weapon damage: keep only medium damage labelled Damage in sheets, rolls, and chat - D30 bonus dice (20, 27, 30) auto-resolved before grit/luck/shield decisions; choice dialogs for special strikes - D30 combat effects: bleeding wounds, damage ×2/×3 before DR, DR ×2/×3 with component picker dialog - Add hp.wounds to monster schema for bleeding support - Show Save against spell? checkbox for all save rolls (not just magic users) - Fix mulligan restart: persistent D30 process flags prevent double-application and allow both sides to react - For Dice So Nice, show main roll animation before explosion dice for correct ordering - Spell tier selection: force Standard/Overpowered choice at cast time, tier-specific aether cost, only chosen damage button shown - Add +1/−1 luck and grit controls to Token HUD - Fix inconsistent indentation, remove duplicate i18n key, remove unused includesShield return
54 lines
2.5 KiB
JavaScript
54 lines
2.5 KiB
JavaScript
import { SYSTEM } from "../config/system.mjs"
|
|
export default class LethalFantasySpell 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,
|
|
})
|
|
schema.level = new fields.NumberField({
|
|
...requiredInteger,
|
|
initial: 1,
|
|
min: 1,
|
|
max: 25,
|
|
})
|
|
|
|
schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
|
schema.costOverpowered = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
|
schema.costOverpowered2 = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
|
schema.memorized = new fields.BooleanField({ required: true, initial: false })
|
|
|
|
schema.components = new fields.SchemaField({
|
|
verbal: new fields.BooleanField(),
|
|
somatic: new fields.BooleanField(),
|
|
catalyst: new fields.BooleanField(),
|
|
material: new fields.BooleanField(),
|
|
})
|
|
schema.castingTime = new fields.StringField({ required: true, initial: "" })
|
|
schema.spellRange = new fields.StringField({ required: true, initial: "" })
|
|
schema.areaAffected = new fields.StringField({ required: true, initial: "" })
|
|
schema.duration = new fields.StringField({ required: true, initial: "" })
|
|
schema.savingThrow = new fields.StringField({ required: true, initial: "" })
|
|
schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" })
|
|
schema.materialComponent = new fields.StringField({ required: true, initial: "" })
|
|
schema.catalyst = new fields.StringField({ required: true, initial: "" })
|
|
schema.criticalType = new fields.StringField({ required: true, initial: "electric", choices : SYSTEM.SPELL_CRITICAL })
|
|
|
|
schema.attackRoll = new fields.StringField({ required: true, initial: "" })
|
|
schema.powerRoll = new fields.StringField({ required: true, initial: "" })
|
|
schema.damageDice = new fields.StringField({ required: false, initial: "" })
|
|
schema.damageDiceOverpowered = new fields.StringField({ required: false, initial: "" })
|
|
schema.damageDiceOverpowered2 = new fields.StringField({ required: false, initial: "" })
|
|
|
|
return schema
|
|
}
|
|
|
|
/** @override */
|
|
static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Spell"]
|
|
}
|