ripcrypt/module/data/Actor/Hero.mjs
2024-12-10 23:33:29 -07:00

107 lines
2 KiB
JavaScript

import { FatePath } from "../../gameTerms.mjs";
const { fields } = foundry.data;
export class HeroData extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
ability: new fields.SchemaField({
grit: new fields.NumberField({
min: 0,
initial: 1,
integer: true,
required: true,
nullable: false,
}),
gait: new fields.NumberField({
min: 0,
initial: 1,
integer: true,
required: true,
nullable: false,
}),
grip: new fields.NumberField({
min: 0,
initial: 1,
integer: true,
required: true,
nullable: false,
}),
glim: new fields.NumberField({
min: 0,
initial: 1,
integer: true,
required: true,
nullable: false,
}),
}),
coin: new fields.SchemaField({
gold: new fields.NumberField({
initial: 5,
integer: true,
required: true,
nullable: false,
}),
silver: new fields.NumberField({
initial: 0,
integer: true,
required: true,
nullable: false,
}),
copper: new fields.NumberField({
initial: 0,
integer: true,
required: true,
nullable: false,
}),
}),
fate: new fields.StringField({
initial: ``,
blank: true,
trim: true,
nullable: false,
choices: () => {
return Object.values(FatePath).concat(``);
},
}),
level: new fields.SchemaField({
glory: new fields.NumberField({
min: 0,
initial: 0,
integer: true,
required: true,
nullable: false,
}),
rank: new fields.NumberField({
min: 0,
initial: 0,
max: 3,
integer: true,
required: true,
nullable: false,
}),
}),
};
};
prepareBaseData() {
super.prepareBaseData();
// The limitations imposed on things like inventory spaces and equipped
// weapon count
this.limit = {
weapons: 4,
equipment: 12,
};
};
prepareDerivedData() {
super.prepareDerivedData();
// Movement speeds
this.speed = {
move: this.ability.gait + 3,
run: (this.ability.gait + 3) * 2,
};
};
};