initial draft of combat
parent
adff5b951f
commit
801de801ba
12
src/main.mjs
12
src/main.mjs
|
|
@ -11,6 +11,8 @@ import {GroupDataModel} from "./module/data/group.mjs";
|
||||||
import {GroupSheet} from "./module/sheets/groupSheet.mjs";
|
import {GroupSheet} from "./module/sheets/groupSheet.mjs";
|
||||||
import {EquipmentDataModel} from "./module/data/equipment.mjs";
|
import {EquipmentDataModel} from "./module/data/equipment.mjs";
|
||||||
import {AusruestungSheet} from "./module/sheets/equipmentSheet.mjs";
|
import {AusruestungSheet} from "./module/sheets/equipmentSheet.mjs";
|
||||||
|
import { CreatureDataModel } from "./module/data/creature.mjs";
|
||||||
|
import { CreatureSheet } from "./module/sheets/creatureSheet.mjs";
|
||||||
|
|
||||||
async function preloadHandlebarsTemplates() {
|
async function preloadHandlebarsTemplates() {
|
||||||
return loadTemplates([
|
return loadTemplates([
|
||||||
|
|
@ -38,7 +40,8 @@ Hooks.once("init", () => {
|
||||||
// Configure System Data Models.
|
// Configure System Data Models.
|
||||||
CONFIG.Actor.dataModels = {
|
CONFIG.Actor.dataModels = {
|
||||||
character: PlayerCharacterDataModel,
|
character: PlayerCharacterDataModel,
|
||||||
group: GroupDataModel
|
group: GroupDataModel,
|
||||||
|
creature: CreatureDataModel,
|
||||||
};
|
};
|
||||||
|
|
||||||
CONFIG.Item.dataModels = {
|
CONFIG.Item.dataModels = {
|
||||||
|
|
@ -49,7 +52,7 @@ Hooks.once("init", () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
CONFIG.Combat.initiative = {
|
CONFIG.Combat.initiative = {
|
||||||
formula: `(@attribute.ini.wuerfel)d6 + @attribute.ini.aktuell`,
|
formula: `(@ini.wuerfel)d6 + @ini.aktuell`,
|
||||||
decimals: 0
|
decimals: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -60,6 +63,11 @@ Hooks.once("init", () => {
|
||||||
makeDefault: true,
|
makeDefault: true,
|
||||||
label: 'DSA41.CharacterLabels.Item'
|
label: 'DSA41.CharacterLabels.Item'
|
||||||
})
|
})
|
||||||
|
Actors.registerSheet('dsa41.creature', CreatureSheet, {
|
||||||
|
types: ["creature"],
|
||||||
|
makeDefault: true,
|
||||||
|
label : 'DSA41.CreatureLabel.Item'
|
||||||
|
})
|
||||||
Actors.registerSheet('dsa41.group', GroupSheet, {
|
Actors.registerSheet('dsa41.group', GroupSheet, {
|
||||||
types: ["group"],
|
types: ["group"],
|
||||||
makeDefault: true,
|
makeDefault: true,
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,27 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel {
|
||||||
titel: new StringField(),
|
titel: new StringField(),
|
||||||
stand: new StringField(),
|
stand: new StringField(),
|
||||||
}),
|
}),
|
||||||
|
ini: new SchemaField({
|
||||||
|
aktuell: new NumberField({ required: true, integer: true, initial: 0 }),
|
||||||
|
mod: new NumberField({ required: true, integer: true, initial: 0 }),
|
||||||
|
wuerfel: new NumberField({ required: true, integer: true, initial: 1}),
|
||||||
|
}),
|
||||||
|
lep: new SchemaField({
|
||||||
|
aktuell: new NumberField({ required: true, integer: true, initial: 0 }),
|
||||||
|
mod: new NumberField({ required: true, integer: true }),
|
||||||
|
}),
|
||||||
|
mr: new SchemaField({
|
||||||
|
mod: new NumberField({ required: true, integer: true }),
|
||||||
|
}),
|
||||||
|
aup: new SchemaField({
|
||||||
|
mod: new NumberField({ required: true, integer: true }),
|
||||||
|
}),
|
||||||
|
asp: new SchemaField({
|
||||||
|
mod: new NumberField({ required: true, integer: true }),
|
||||||
|
}),
|
||||||
|
kap: new SchemaField({
|
||||||
|
mod: new NumberField({ required: true, integer: true }),
|
||||||
|
}),
|
||||||
attribute: new SchemaField({
|
attribute: new SchemaField({
|
||||||
mu: new SchemaField({
|
mu: new SchemaField({
|
||||||
start: new NumberField({ required: true, integer: true }),
|
start: new NumberField({ required: true, integer: true }),
|
||||||
|
|
@ -67,21 +88,6 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel {
|
||||||
aktuell: new NumberField({ required: true, integer: true }),
|
aktuell: new NumberField({ required: true, integer: true }),
|
||||||
mod: new NumberField({ required: true, integer: true }),
|
mod: new NumberField({ required: true, integer: true }),
|
||||||
}),
|
}),
|
||||||
mr: new SchemaField({
|
|
||||||
mod: new NumberField({ required: true, integer: true }),
|
|
||||||
}),
|
|
||||||
lep: new SchemaField({
|
|
||||||
mod: new NumberField({ required: true, integer: true }),
|
|
||||||
}),
|
|
||||||
aup: new SchemaField({
|
|
||||||
mod: new NumberField({ required: true, integer: true }),
|
|
||||||
}),
|
|
||||||
asp: new SchemaField({
|
|
||||||
mod: new NumberField({ required: true, integer: true }),
|
|
||||||
}),
|
|
||||||
kap: new SchemaField({
|
|
||||||
mod: new NumberField({ required: true, integer: true }),
|
|
||||||
}),
|
|
||||||
at: new SchemaField({
|
at: new SchemaField({
|
||||||
aktuell: new NumberField({ required: true, integer: true }),
|
aktuell: new NumberField({ required: true, integer: true }),
|
||||||
mod: new NumberField({ required: true, integer: true }),
|
mod: new NumberField({ required: true, integer: true }),
|
||||||
|
|
@ -94,11 +100,6 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel {
|
||||||
aktuell: new NumberField({ required: true, integer: true }),
|
aktuell: new NumberField({ required: true, integer: true }),
|
||||||
mod: new NumberField({ required: true, integer: true }),
|
mod: new NumberField({ required: true, integer: true }),
|
||||||
}),
|
}),
|
||||||
ini: new SchemaField({
|
|
||||||
aktuell: new NumberField({ required: true, integer: true, initial: 0 }),
|
|
||||||
mod: new NumberField({ required: true, integer: true, initial: 0 }),
|
|
||||||
wuerfel: new NumberField({ required: true, integer: true, initial: 1}),
|
|
||||||
}),
|
|
||||||
so: new SchemaField({
|
so: new SchemaField({
|
||||||
start: new NumberField({ required: true, integer: true }),
|
start: new NumberField({ required: true, integer: true }),
|
||||||
aktuell: new NumberField({ required: true, integer: true }),
|
aktuell: new NumberField({ required: true, integer: true }),
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,48 @@ export class Character extends Actor {
|
||||||
}
|
}
|
||||||
input.click()
|
input.click()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @override
|
||||||
|
* Augment the actor source data with additional dynamic data. Typically,
|
||||||
|
* you'll want to handle most of your calculated/derived data in this step.
|
||||||
|
* Data calculated in this step should generally not exist in template.json
|
||||||
|
* (such as ability modifiers rather than ability scores) and should be
|
||||||
|
* available both inside and outside of character sheets (such as if an actor
|
||||||
|
* is queried and has a roll executed directly from it).
|
||||||
|
*/
|
||||||
|
prepareDerivedData() {
|
||||||
|
|
||||||
|
if (this.type === "character") {
|
||||||
|
const actorData = this;
|
||||||
|
const systemData = actorData.system;
|
||||||
|
|
||||||
|
const mu = systemData.attribute.mu.aktuell;
|
||||||
|
const kl = systemData.attribute.kl.aktuell;
|
||||||
|
const _in = systemData.attribute.in.aktuell;
|
||||||
|
const ch = systemData.attribute.ch.aktuell;
|
||||||
|
|
||||||
|
const ff = systemData.attribute.ff.aktuell;
|
||||||
|
const ge = systemData.attribute.ge.aktuell;
|
||||||
|
const ko = systemData.attribute.kk.aktuell;
|
||||||
|
const kk = systemData.attribute.kk.aktuell;
|
||||||
|
|
||||||
|
|
||||||
|
systemData.lep.max = (ko + ko + kk) / 2 + systemData.lep.mod;
|
||||||
|
systemData.aup.max = (mu + ko + ge) / 2 + systemData.aup.mod;
|
||||||
|
systemData.asp.aktuell = (mu + _in + ch) / 2 + systemData.asp.mod;
|
||||||
|
|
||||||
|
systemData.at = (mu + ge + kk) / 5;
|
||||||
|
systemData.pa = (_in + ge + kk) / 5;
|
||||||
|
systemData.fk = (_in + ff + kk) / 5;
|
||||||
|
|
||||||
|
systemData.ini.aktuell = (mu + mu + _in + ge) / 5 + systemData.ini.mod;
|
||||||
|
systemData.mr.aktuell = (mu + kl + ko) / 5 + systemData.mr.mod;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Augment the basic Item data model with additional dynamic data.
|
* Augment the basic Item data model with additional dynamic data.
|
||||||
*/
|
*/
|
||||||
|
|
@ -22,7 +64,7 @@ export class Character extends Actor {
|
||||||
getRollData() {
|
getRollData() {
|
||||||
const data = super.getRollData();
|
const data = super.getRollData();
|
||||||
|
|
||||||
if (this.type !== 'character') return;
|
if (this.type !== 'character' && this.type !== 'creature') return;
|
||||||
|
|
||||||
// Copy the ability scores to the top level, so that rolls can use
|
// Copy the ability scores to the top level, so that rolls can use
|
||||||
// formulas like `@str.mod + 4`.
|
// formulas like `@str.mod + 4`.
|
||||||
|
|
|
||||||
|
|
@ -173,9 +173,9 @@ export class CharacterSheet extends ActorSheet {
|
||||||
|
|
||||||
#addCombatStatistics(context) {
|
#addCombatStatistics(context) {
|
||||||
const actorData = context.data;
|
const actorData = context.data;
|
||||||
context.inidice = actorData.system.attribute.ini.wuerfel;
|
context.inidice = actorData.system.ini.wuerfel;
|
||||||
context.inivalue = actorData.system.attribute.ini.aktuell;
|
context.inivalue = actorData.system.ini.aktuell;
|
||||||
context.inimod = actorData.system.attribute.ini.mod;
|
context.inimod = actorData.system.ini.mod;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -206,19 +206,19 @@ function mapRawJson(actor, rawJson) {
|
||||||
json.attribute.ge = getAttributeJson(attributes, "Gewandtheit")
|
json.attribute.ge = getAttributeJson(attributes, "Gewandtheit")
|
||||||
json.attribute.ko = getAttributeJson(attributes, "Konstitution")
|
json.attribute.ko = getAttributeJson(attributes, "Konstitution")
|
||||||
json.attribute.kk = getAttributeJson(attributes, "Körperkraft")
|
json.attribute.kk = getAttributeJson(attributes, "Körperkraft")
|
||||||
json.attribute.mr = {
|
json.mr = {
|
||||||
mod: filterAttribute(attributes,"Magieresistenz").mod
|
mod: filterAttribute(attributes,"Magieresistenz").mod
|
||||||
}
|
}
|
||||||
json.attribute.lep = {
|
json.lep = {
|
||||||
mod: filterAttribute(attributes,"Lebensenergie").mod
|
mod: filterAttribute(attributes,"Lebensenergie").mod
|
||||||
}
|
}
|
||||||
json.attribute.aup = {
|
json.aup = {
|
||||||
mod: filterAttribute(attributes,"Ausdauer").mod
|
mod: filterAttribute(attributes,"Ausdauer").mod
|
||||||
}
|
}
|
||||||
json.attribute.asp = {
|
json.asp = {
|
||||||
mod: filterAttribute(attributes,"Astralenergie").mod
|
mod: filterAttribute(attributes,"Astralenergie").mod
|
||||||
}
|
}
|
||||||
json.attribute.kap = {
|
json.kap = {
|
||||||
mod: filterAttribute(attributes,"Karmaenergie").mod
|
mod: filterAttribute(attributes,"Karmaenergie").mod
|
||||||
}
|
}
|
||||||
let attribute = filterAttribute(attributes,"Karmaenergie")
|
let attribute = filterAttribute(attributes,"Karmaenergie")
|
||||||
|
|
@ -242,7 +242,7 @@ function mapRawJson(actor, rawJson) {
|
||||||
aktuell: attribute.value
|
aktuell: attribute.value
|
||||||
}
|
}
|
||||||
attribute = filterAttribute(attributes,"ini")
|
attribute = filterAttribute(attributes,"ini")
|
||||||
json.attribute.ini = {
|
json.ini = {
|
||||||
mod: attribute.mod,
|
mod: attribute.mod,
|
||||||
aktuell: attribute.value
|
aktuell: attribute.value
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,7 @@
|
||||||
],
|
],
|
||||||
"documentTypes": {
|
"documentTypes": {
|
||||||
"Actor": {
|
"Actor": {
|
||||||
|
"creature": {},
|
||||||
"group": {
|
"group": {
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
@ -216,8 +217,7 @@
|
||||||
"distance": 10,
|
"distance": 10,
|
||||||
"units": "Schritt"
|
"units": "Schritt"
|
||||||
},
|
},
|
||||||
"primaryTokenAttribute": "resources.sp",
|
"primaryTokenAttribute": "lep.aktuell",
|
||||||
"secondaryTokenAttribute": "resources.aus",
|
|
||||||
"url": "https://git.macniel.online/macniel/foundry-dsa41-game",
|
"url": "https://git.macniel.online/macniel/foundry-dsa41-game",
|
||||||
"manifest": "https://git.macniel.online/macniel/foundry-dsa41-game/releases/download/{{VERSION}}/system.json",
|
"manifest": "https://git.macniel.online/macniel/foundry-dsa41-game/releases/download/{{VERSION}}/system.json",
|
||||||
"download": "https://git.macniel.online/macniel/foundry-dsa41-game/releases/download/{{VERSION}}/release.zip"
|
"download": "https://git.macniel.online/macniel/foundry-dsa41-game/releases/download/{{VERSION}}/release.zip"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue