Add roll windows from actor sheet

This commit is contained in:
2026-03-15 23:20:32 +01:00
parent 82fddb0cb3
commit 49347370c7
57 changed files with 6372 additions and 184 deletions

View File

@@ -9,6 +9,5 @@ export { default as OathHammerMiracle } from "./miracle.mjs"
export { default as OathHammerMagicItem } from "./magic-item.mjs"
export { default as OathHammerTrait } from "./trait.mjs"
export { default as OathHammerOath } from "./oath.mjs"
export { default as OathHammerLineage } from "./lineage.mjs"
export { default as OathHammerClass } from "./class.mjs"
export { default as OathHammerBuilding } from "./building.mjs"

View File

@@ -12,7 +12,7 @@ export default class OathHammerArmor extends foundry.abstract.TypeDataModel {
schema.armorType = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE_CHOICES })
// Armor Value (AV): number of armor dice rolled when receiving damage
schema.armorValue = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 12 })
schema.armorValue = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 16 })
// Penalty: modifier to Acrobatics checks AND defense rolls (0, -1, -2, -3…)
schema.penalty = new fields.NumberField({ ...requiredInteger, initial: 0, min: -5, max: 0 })

View File

@@ -23,11 +23,10 @@ export default class OathHammerBuilding extends foundry.abstract.TypeDataModel {
// Monthly tax revenue formula ("3d6", "2d6", "1d3", "" = none)
schema.taxRevenue = new fields.StringField({ required: true, nullable: false, initial: "" })
// Is this building currently constructed in the settlement?
// Is this building currently constructed?
schema.constructed = new fields.BooleanField({ required: true, initial: false })
// Which settlement this building belongs to (free text or settlement name)
schema.settlement = new fields.StringField({ required: true, nullable: false, initial: "" })
// Additional GM notes (special conditions, upgrades, damage, etc.)
schema.notes = new fields.HTMLField({ required: false, textSearch: true })

View File

@@ -9,6 +9,12 @@ export default class OathHammerCharacter extends foundry.abstract.TypeDataModel
schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.notes = new fields.HTMLField({ required: true, textSearch: true })
// Lineage (simple fields on the actor — not an Item)
schema.lineage = new fields.SchemaField({
name: new fields.StringField({ required: true, nullable: false, initial: "" }),
traits: new fields.HTMLField({ required: true, textSearch: true }),
})
const attributeField = () => new fields.SchemaField({
rank: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1, max: 4 })
})

View File

@@ -1,21 +0,0 @@
export default class OathHammerLineage extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields
const schema = {}
schema.description = new fields.HTMLField({ required: true, textSearch: true })
// Racial traits and special abilities (rich text)
schema.traits = new fields.HTMLField({ required: true, textSearch: true })
// Base movement speed in feet
schema.movement = new fields.NumberField({ required: true, nullable: false, integer: true, initial: 30, min: 0 })
// Modifier to max Grit Points (e.g. -1 for High Elf, Wood Elf)
schema.gritModifier = new fields.NumberField({ required: true, nullable: false, integer: true, initial: 0 })
return schema
}
static LOCALIZATION_PREFIXES = ["OATHHAMMER.Lineage"]
}

View File

@@ -35,8 +35,7 @@ export default class OathHammerMagicItem extends foundry.abstract.TypeDataModel
})
schema.maxUses = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
// Item slots occupied when carried; 0 = small item (no slots)
schema.slots = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.equipped = new fields.BooleanField({ initial: false })

View File

@@ -17,10 +17,10 @@ export default class OathHammerWeapon extends foundry.abstract.TypeDataModel {
// usesMight=true → formula displayed as "M+2", "M-1", etc.
// usesMight=false → formula displayed as e.g. "6" (fixed dice for bows)
schema.usesMight = new fields.BooleanField({ required: true, initial: true })
schema.damageMod = new fields.NumberField({ ...requiredInteger, initial: 0, min: -4, max: 5 })
schema.damageMod = new fields.NumberField({ ...requiredInteger, initial: 0, min: -4, max: 16 })
// AP (Armor Penetration): penalty imposed on armor/defense rolls
schema.ap = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 6 })
schema.ap = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 16 })
// Reach (melee, in ft: 5 / 10 / 15) — ignored for ranged/throwing
schema.reach = new fields.NumberField({ ...requiredInteger, initial: 5, min: 5 })
@@ -35,6 +35,12 @@ export default class OathHammerWeapon extends foundry.abstract.TypeDataModel {
{ required: true, initial: [] }
)
// Special Properties — crafting enhancements (Accurate, Master-Crafted, etc. p.98)
schema.specialProperties = new fields.SetField(
new fields.StringField({ choices: SYSTEM.WEAPON_SPECIAL_PROPERTIES }),
{ required: true, initial: [] }
)
// Item slots (when stowed; 0 = does not occupy slots)
schema.slots = new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 })