First adaptation pass

This commit is contained in:
2025-11-06 00:01:59 +01:00
parent 5b1fd847c2
commit 6b883f8126
112 changed files with 44142 additions and 953 deletions
+124 -37
View File
@@ -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)
}
}