First adaptation pass
This commit is contained in:
+124
-37
@@ -1,47 +1,139 @@
|
||||
import { SYSTEM } from "../config/system.mjs"
|
||||
|
||||
export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
||||
export default class PrismRPGWeapon extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
const schema = {}
|
||||
const requiredInteger = { required: true, nullable: false, integer: true }
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE })
|
||||
schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS })
|
||||
|
||||
// Prism RPG weapon properties
|
||||
schema.weaponType = new fields.StringField({
|
||||
required: true,
|
||||
initial: "light",
|
||||
choices: Object.keys(SYSTEM.WEAPON_TYPE || {})
|
||||
})
|
||||
|
||||
schema.weaponGroup = new fields.StringField({
|
||||
required: true,
|
||||
initial: "longsword",
|
||||
choices: Object.keys(SYSTEM.WEAPON_GROUP || {})
|
||||
})
|
||||
|
||||
// APC (Action Point Cost) - determined by weapon type
|
||||
schema.apc = new fields.NumberField({
|
||||
...requiredInteger,
|
||||
required: true,
|
||||
initial: 1,
|
||||
min: 0,
|
||||
max: 3
|
||||
})
|
||||
|
||||
// Damage dice (e.g., "1d8", "2d6", "1d12")
|
||||
schema.damage = new fields.StringField({
|
||||
required: true,
|
||||
initial: "1d8"
|
||||
})
|
||||
|
||||
// Damage type(s)
|
||||
schema.damageType = new fields.SchemaField({
|
||||
typeP: new fields.BooleanField(),
|
||||
typeB: new fields.BooleanField(),
|
||||
typeS: new fields.BooleanField()
|
||||
})
|
||||
schema.damage = new fields.SchemaField({
|
||||
damageS: new fields.StringField({required: true, initial: ""}),
|
||||
damageM: new fields.StringField({required: true, initial: ""})
|
||||
})
|
||||
schema.applyStrengthDamageBonus = new fields.BooleanField({ required: true, initial: true })
|
||||
|
||||
schema.hands = new fields.StringField({ required: true, initial: "1", choices: {"1": "1", "2": "2"} })
|
||||
schema.isAgile = new fields.BooleanField({ required: true, initial: false })
|
||||
|
||||
schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
schema.secondsToAttack = new fields.StringField({required: true, initial: ""})
|
||||
schema.combatProgressionDice = new fields.StringField({required: true, initial: "d4", choices: SYSTEM.COMBAT_PROGRESSION_DICE})
|
||||
|
||||
schema.speed = new fields.SchemaField({
|
||||
simpleAim: new fields.StringField({required: true, initial: ""}),
|
||||
carefulAim: new fields.StringField({required: true, initial: ""}),
|
||||
focusedAim: new fields.StringField({required: true, initial: ""})
|
||||
piercing: new fields.BooleanField({ initial: false }),
|
||||
bludgeoning: new fields.BooleanField({ initial: false }),
|
||||
slashing: new fields.BooleanField({ initial: false })
|
||||
})
|
||||
|
||||
schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
schema.weaponRange = new fields.SchemaField({
|
||||
pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||
short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||
medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||
long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||
extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }),
|
||||
outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
|
||||
// Group passive (inherited from weapon group)
|
||||
schema.groupPassive = new fields.StringField({
|
||||
required: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
schema.groupPassiveDescription = new fields.HTMLField({
|
||||
required: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
// Weapon-specific passive ability
|
||||
schema.passive = new fields.StringField({
|
||||
required: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
schema.passiveDescription = new fields.HTMLField({
|
||||
required: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
// Maneuver(s) available with this weapon
|
||||
schema.maneuver = new fields.StringField({
|
||||
required: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
schema.maneuverDescription = new fields.HTMLField({
|
||||
required: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
// Augment effects (for equipment progression)
|
||||
schema.augment = new fields.StringField({
|
||||
required: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
schema.augmentDescription = new fields.HTMLField({
|
||||
required: true,
|
||||
initial: ""
|
||||
})
|
||||
|
||||
// Projectile-specific properties
|
||||
schema.isProjectile = new fields.BooleanField({
|
||||
required: true,
|
||||
initial: false
|
||||
})
|
||||
|
||||
schema.range = new fields.SchemaField({
|
||||
short: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
medium: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
|
||||
long: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||
})
|
||||
|
||||
schema.reloadAPC = new fields.NumberField({
|
||||
...requiredInteger,
|
||||
initial: 0,
|
||||
min: 0
|
||||
})
|
||||
|
||||
// Legacy properties (kept for backward compatibility)
|
||||
schema.hands = new fields.StringField({
|
||||
required: true,
|
||||
initial: "1",
|
||||
choices: { "1": "1", "2": "2" }
|
||||
})
|
||||
|
||||
schema.isAgile = new fields.BooleanField({
|
||||
required: true,
|
||||
initial: false
|
||||
})
|
||||
|
||||
schema.applyStrengthDamageBonus = new fields.BooleanField({
|
||||
required: true,
|
||||
initial: true
|
||||
})
|
||||
|
||||
schema.defenseMax = new fields.NumberField({
|
||||
...requiredInteger,
|
||||
required: true,
|
||||
initial: 0,
|
||||
min: 0
|
||||
})
|
||||
|
||||
schema.defense = new fields.NumberField({
|
||||
...requiredInteger,
|
||||
required: true,
|
||||
initial: 0,
|
||||
min: 0
|
||||
})
|
||||
|
||||
schema.bonuses = new fields.SchemaField({
|
||||
@@ -60,9 +152,4 @@ export default class PrismRPGSkill extends foundry.abstract.TypeDataModel {
|
||||
|
||||
/** @override */
|
||||
static LOCALIZATION_PREFIXES = ["PRISMRPG.Weapon"]
|
||||
|
||||
get weaponCategory() {
|
||||
return game.i18n.localize(CATEGORY[this.weaponType].label)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user