diff --git a/.gitea/workflows/add-issue-to-project.yaml b/.gitea/workflows/add-issue-to-project.yaml new file mode 100644 index 0000000..e8af0bb --- /dev/null +++ b/.gitea/workflows/add-issue-to-project.yaml @@ -0,0 +1,15 @@ +name: Move new issues into To Do + +on: + issues: + types: [opened] +jobs: + createCard: + runs-on: ubuntu-latest + steps: + - name: Close Issue + run: > + curl -X PATCH -H "Content-Type: application/xml" + -H "Authorization: token ${{ secrets.GITEA_TOKEN }} + -d '{ "state": "To Do" }' + "${{ gitea.event.issue.url }}" \ No newline at end of file diff --git a/assets/icons/backgrounds/bg1.webp b/assets/icons/backgrounds/bg1.webp new file mode 100644 index 0000000..a911203 Binary files /dev/null and b/assets/icons/backgrounds/bg1.webp differ diff --git a/assets/icons/icon/battle-gear.svg b/assets/icons/icon/battle-gear.svg new file mode 100644 index 0000000..7160628 --- /dev/null +++ b/assets/icons/icon/battle-gear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/icon/black-hand-shield.svg b/assets/icons/icon/black-hand-shield.svg deleted file mode 100644 index 38ba4cd..0000000 --- a/assets/icons/icon/black-hand-shield.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/icon/confirmed.svg b/assets/icons/icon/confirmed.svg new file mode 100644 index 0000000..e43f621 --- /dev/null +++ b/assets/icons/icon/confirmed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/logo/banner01.webp b/assets/icons/logo/banner01.webp new file mode 100644 index 0000000..deae56f Binary files /dev/null and b/assets/icons/logo/banner01.webp differ diff --git a/assets/icons/logo/banner02.webp b/assets/icons/logo/banner02.webp new file mode 100644 index 0000000..0cc9f58 Binary files /dev/null and b/assets/icons/logo/banner02.webp differ diff --git a/assets/icons/logo/banner03.webp b/assets/icons/logo/banner03.webp new file mode 100644 index 0000000..b809c85 Binary files /dev/null and b/assets/icons/logo/banner03.webp differ diff --git a/assets/icons/logo/banner04.webp b/assets/icons/logo/banner04.webp new file mode 100644 index 0000000..29ce03b Binary files /dev/null and b/assets/icons/logo/banner04.webp differ diff --git a/docs/de.md b/docs/de.md index 95a8efa..a1a54ce 100644 --- a/docs/de.md +++ b/docs/de.md @@ -6,7 +6,7 @@ _**Warnung:** Das System befindet sich noch in der Entwicklung._ Gehe auf die Setup-Seite deiner Foundry VTT Instanz. Klicke im Reiter **Game Systems** auf den Button **Install System**. In dem dann geöffneten Dialog, unten in der Zeile **Manifest URL** den Link zur aktuellen (oder gewünschten) Version der _system.json_ eintragen und auf **Install** klicken: -https://github.com/byroks/foundry-vtt-system-midgard5/releases/download/v1.3.0/system.json +https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v1.3.0/system.json Danach kann eine Spielwelt mit dem System erstellt werden. @@ -32,7 +32,7 @@ Dieser Reiter enthält (mit Ausname von Zaubern) alle zu erlernenden Dinge des C ![Blaupausen für Gegenstände](compendium-items.de.png) -Es kann einfach per Drag'n'Drop die entsprechende Blaupause auf den Charakterbogen gezogen werden, um eine Fertigkeit/Fähigkeit/Sprache zu *lernen.* Alternativ kann auch der **Lernen** Button bei den **ungelernten Fertigkeiten** geklickt werden. +Es kann einfach per Drag'n'Drop die entsprechende Blaupause auf den Charakterbogen gezogen werden, um eine Fertigkeit/Fähigkeit/Sprache zu _lernen._ Alternativ kann auch der **Lernen** Button bei den **ungelernten Fertigkeiten** geklickt werden. Um den **Fertigkeitswert** und die **Leiteigenschaft** einer Fertigkeit anzupassen, kann man auf die Fertigkeit klicken. Dann geht folgender Dialog auf: diff --git a/foundryconfig.json b/foundryconfig.json index 0b75816..1386868 100644 --- a/foundryconfig.json +++ b/foundryconfig.json @@ -1,5 +1,4 @@ { "moduleName": "Midgard 5. Edition", - "repository": "https://github.com/Byroks/foundry-vtt-system-midgard5", - "rawURL": "https://raw.githubusercontent.com/Byroks/foundry-vtt-system-midgard5" + "repository": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5" } diff --git a/gulpfile.ts b/gulpfile.ts index d17b9ea..73b2ee5 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -423,7 +423,7 @@ const updateManifest = (cb: any) => { cb(Error("Manifest JSON not found")); return; } - if (!rawURL || !repoURL) cb(Error("Repository URLs not configured in foundryconfig.json")); + if (!repoURL) cb(Error("Repository URLs not configured in foundryconfig.json")); try { const version = argv.update || argv.u; diff --git a/lang/de.json b/lang/de.json index f5d6679..56d02d2 100644 --- a/lang/de.json +++ b/lang/de.json @@ -29,11 +29,20 @@ "midgard5.label": "Bezeichnung", "midgard5.description": "Beschreibung", - "midgard5.attribute": "Leiteigenschaft", + "midgard5.Characteristic": "Merkmal", + "midgard5.characteristics": "Merkmale", + "midgard5.background": "Hintergrund", + "midgard5.attribute": "Eigenschaft", + "midgard5.attributes": "Eigenschaften", + "midgard5.points": "Punkte", + "midgard5.calculated-value": "Berechneter Wert", + "midgard5.calculated-values": "Sonstige Werte", + "midgard5.skill": "Fertigkeit", "midgard5.skill-value": "Fertigkeitswert", "midgard5.fw": "FW", "midgard5.bonus": "Bonus", + "midgard5.bonuses": "Boni", "midgard5.ew": "EW", "midgard5.pp-short": "PP", "midgard5.pp": "Praxispunkte", @@ -81,8 +90,12 @@ "midgard5.spells": "Zauber", "midgard5.effects": "Aktive Effekte", "midgard5.kampfkuenste": "Kampfkünste", + "midgard5.combat": "Kampf", - "midgard5.class": "Klasse", + + "midgard5.actor-name": "Figur", + "midgard5.level": "Grad", + "midgard5.class": "Typ", "midgard5.race": "Rasse", "midgard5.magicUsing": "Zauberkundig", "midgard5.gender": "Geschlecht", @@ -227,13 +240,21 @@ "midgard5.new-skill": "Neue Fertigkeit", "midgard5.special": "Spezial", "midgard5.learned-skill": "Gelernte Fertigkeit", + "midgard5.learned-skills": "Gelernte Fertigkeiten", "midgard5.language": "Sprache", + "midgard5.languages": "Sprachen", "midgard5.weapon-skill": "Waffenfertigkeit", + "midgard5.weapon-skills": "Waffenfertigkeiten", "midgard5.unlearned-skill": "Ungelernte Fertigkeit", - "midgard5.innate-ability": "Angeborene Fähigkeit", + "midgard5.unlearned-skills": "Ungelernte Fertigkeiten", + "midgard5.innate-ability": "Angeborene/Besondere Fertigkeit", + "midgard5.innate-abilities": "Angeborene/Besondere Fertigkeit", "midgard5.base-damage": "Grundschaden", + "midgard5.weapon": "Waffe", + "midgard5.weapons": "Waffen", "midgard5.defensive-weapon": "Verteidigungswaffe", + "midgard5.defensive-weapons": "Verteidigungswaffen", "midgard5.no-skill": "Keine Fertigkeit", "midgard5.magic": "magisch", "midgard5.valuable": "Vermögen", @@ -284,6 +305,7 @@ "midgard5.kampfkunst-type": "Kampfkunst Art", "midgard5.kampfkunst-variante": "Kampfkunst Variante", + "midgard5.kampfkunst-variante-short": "Var", "midgard5.kido-type": "Kido Art", "midgard5.kido-variante": "Kido Variante", diff --git a/package.json b/package.json index 949eb7f..efe783e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "foundry-system-midgard5", - "version": "2.3.1", + "version": "2.4.0", "description": "", "main": "index.js", "scripts": { diff --git a/source/PreloadTemplates.ts b/source/PreloadTemplates.ts index bbd4ae9..b2f2d19 100644 --- a/source/PreloadTemplates.ts +++ b/source/PreloadTemplates.ts @@ -6,13 +6,14 @@ const preloadTemplates = async (): Promise[]> = // const templates = [ rootPath + "actor/actor-sheet.hbs" ] // This would map to our local folder of /Assets/Templates/Actor/actor-sheet.hbs const templates: Array = [ + "sheets/character/description.hbs", "sheets/character/attribute.hbs", "sheets/character/base_values.hbs", "sheets/character/main.hbs", "sheets/character/skills.hbs", "sheets/character/gear.hbs", "sheets/character/spells.hbs", - "sheets/character/kampfkuenste.hbs", + "sheets/character/combat.hbs", "sheets/character/effects.hbs", "sheets/partial/mod.hbs", "sheets/item/rolls.hbs", diff --git a/source/module/M5Base.ts b/source/module/M5Base.ts index b3deb2f..7f7f7bc 100644 --- a/source/module/M5Base.ts +++ b/source/module/M5Base.ts @@ -49,6 +49,18 @@ export interface M5RollResult extends M5RollTemplate { css: string; } +export enum M5ItemType { + SKILL = "skill", + ITEM = "item", + WEAPON = "weapon", + DEFENSIVE_WEAPON = "defensiveWeapon", + ARMOR = "armor", + CONTAINER = "container", + SPELL = "spell", + KAMPFKUNST = "kampfkunst", + EFFECT = "effect", +} + export enum M5EwResult { TBD = "", FUMBLE = "roll-ew-result-fumble", diff --git a/source/module/actors/M5Character.ts b/source/module/actors/M5Character.ts index e52efce..bbd5132 100644 --- a/source/module/actors/M5Character.ts +++ b/source/module/actors/M5Character.ts @@ -1,5 +1,5 @@ import { M5Item } from "../items/M5Item"; -import { M5Attribute, M5Attributes, M5CharacterCalculatedData, M5ItemMod, M5ModOperation, M5ModResult, M5RollData, M5Skill, M5SkillCalculated, M5SkillLearned, M5Stats } from "../M5Base"; +import { M5Attribute, M5CharacterCalculatedData, M5ItemMod, M5ItemType, M5ModOperation, M5ModResult, M5RollData, M5Skill, M5SkillCalculated, M5SkillLearned } from "../M5Base"; import M5ModAggregate from "./M5ModAggregate"; export class M5Character extends Actor { // constructor( @@ -198,9 +198,9 @@ export class M5Character extends Actor { ret.stats.perceptionFW = 6; ret.stats.drinking = this.modResult(0); ret.stats.drinkingFW = Math.floor(ret.attributes.ko.value / 10); - ret.stats.hoardMin = M5Character.levelThreshold.at (ret.level - 1)/2; - ret.stats.hoardNext = M5Character.levelThreshold.at (ret.level)/2; - ret.stats.wealth = data.info.gold + data.info.silver/10 + data.info.copper/100; + ret.stats.hoardMin = M5Character.levelThreshold.at(ret.level - 1) / 2; + ret.stats.hoardNext = M5Character.levelThreshold.at(ret.level) / 2; + ret.stats.wealth = parseFloat((data.info.gold + data.info.silver / 10 + data.info.copper / 100).toPrecision(3)); ret.stats.hoard = 0; ret.stats.load = M5Character.loadValue(data.attributes.st); ret.stats.heavyLoad = M5Character.heavyLoadValue(data.attributes.st); @@ -212,19 +212,19 @@ export class M5Character extends Actor { // if (data.info.encumbrance > data.info.loadMax && !loadMessage) { // let messageContent = `Höchstlast von ${data.info.name} überschritten: [[1d1]] AP Schaden durch Belastung alle 10 Minuten abziehen!`; - // let chatData = { - // speaker: ChatMessage.getSpeaker({actor: Actor.name}), - // content: messageContent, - // }; - // ChatMessage.create(chatData, {}); + // let chatData = { + // speaker: ChatMessage.getSpeaker({actor: Actor.name}), + // content: messageContent, + // }; + // ChatMessage.create(chatData, {}); // loadMessage = true; - // // ui.notifications.warn(messageContent); + // // ui.notifications.warn(messageContent); // } // if (data.info.encumbrance < data.info.loadMax && loadMessage) { // loadMessage = false; // } - + if (!skip?.mods) { const aggregate = new M5ModAggregate(data, ret); @@ -251,17 +251,17 @@ export class M5Character extends Actor { let label = item.name; if (item.system.magic) { label += "*"; - }; - if (item.system.valuable) { - ret.stats.wealth += item.system.value || 0; - }; + } + if (item.system.valuable) { + ret.stats.wealth += this.calculateValue(item.system.value, item.system.currency); + } if (item.system.hoarded) { ret.stats.hoard += item.system.value || 0; - }; + } if (item.system.equipped) { ret.stats.encumbrance += item.system.weight || 0; } - + let icon = item.img; let rollable = false; @@ -272,7 +272,7 @@ export class M5Character extends Actor { break; } } - + ret.gear.items[item.id] = { label: label, icon: icon, @@ -320,13 +320,11 @@ export class M5Character extends Actor { calc: item.system.calc, equipped: item.system?.equipped, weight: item.system.weight || 0, - containerId: item.system.containerId || "", value: item.system.value || 0, currency: item.system.currency || "", quantity: item.system.quantity || 0, rollExist: rollable, }; - }); } @@ -339,8 +337,8 @@ export class M5Character extends Actor { let label = item.name; if (item.system.magic) { label += "*"; - }; - + } + ret.gear.effects[item.id] = { label: label, magic: item.system.magic, @@ -383,25 +381,29 @@ export class M5Character extends Actor { (item.system.stats.damageBonus < 0 ? "" : "+") + item.system.stats.damageBonus + ")"; - }; + } if (item.system.valuable) { - ret.stats.wealth += item.system.value || 0; - }; + ret.stats.wealth += this.calculateValue(item.system.value, item.system.currency); + } if (item.system.hoarded) { ret.stats.hoard += item.system.value || 0; - }; + } if (item.system.equipped) { ret.stats.encumbrance += item.system.weight || 0; } - + ret.gear.weapons[item.id] = { label: label, skillId: item.system.skillId, magic: item.system.magic, valuable: item.system?.valuable, hoarded: item.system?.hoarded, - value: item.system.value || 0, + value: item.system.value || 0, calc: item.system.calc, + special: item.system.special, + damageBase: item.system.damageBase, + equipped: item.system?.equipped, + containerId: item.system.containerId || "", }; }); } @@ -415,17 +417,17 @@ export class M5Character extends Actor { let label = item.name; if (item.system.magic) { label += "*(" + (item.system.stats.defenseBonus < 0 ? "" : "+") + item.system.stats.defenseBonus + ")"; - }; + } if (item.system.valuable) { - ret.stats.wealth += item.system.value || 0; - }; + ret.stats.wealth += this.calculateValue(item.system.value, item.system.currency); + } if (item.system.hoarded) { ret.stats.hoard += item.system.value || 0; - }; + } if (item.system.equipped) { ret.stats.encumbrance += item.system.weight || 0; } - + ret.gear.defensiveWeapons[item.id] = { label: label, skillId: item.system.skillId, @@ -433,7 +435,10 @@ export class M5Character extends Actor { valuable: item.system?.valuable, hoarded: item.system?.hoarded, value: item.system.value || 0, + defenseBonus: item.system.stats.defenseBonus, calc: item.system.calc, + equipped: item.system?.equipped, + containerId: item.system.containerId || "", }; }); } @@ -447,25 +452,29 @@ export class M5Character extends Actor { let label = item.name; if (item.system.magic) { label += "*"; - }; + } if (item.system.valuable) { - ret.stats.wealth += item.system.value || 0; - }; + ret.stats.wealth += this.calculateValue(item.system.value, item.system.currency); + } if (item.system.hoarded) { ret.stats.hoard += item.system.value || 0; - }; + } if (item.system.equipped) { ret.stats.encumbrance += 0; - } else {ret.stats.encumbrance += item.system.weight || 0} - + } else { + ret.stats.encumbrance += item.system.weight || 0; + } + ret.gear.armor[item.id] = { label: label, magic: item.system.magic, valuable: item.system?.valuable, hoarded: item.system?.hoarded, value: item.system.value || 0, + lpProtection: item.system.lpProtection, calc: item.system.calc, equipped: item.system?.equipped, + containerId: item.system.containerId || "", }; }); } @@ -602,11 +611,36 @@ export class M5Character extends Actor { }); } + createItem(itemName: string, itemType: M5ItemType): Promise { + const itemData = { + name: itemName, + type: itemType, + }; + + return (this as any).createEmbeddedDocuments("Item", [itemData]).then((docs) => { + const item = docs[0]; + return item; + }); + } + getItem(itemId: string): any { if (!(this as any).items) return null; return (this as any).getEmbeddedDocument("Item", itemId); } + private calculateValue(value: number, currency: string): number { + switch (currency) { + case "gold": + return value; + case "silver": + return parseFloat((value / 10).toPrecision(3)); + case "copper": + return parseFloat((value / 100).toPrecision(3)); + default: + return 0; + } + } + private modResult(value: number): M5ModResult { return { value: value, diff --git a/source/module/items/M5Item.ts b/source/module/items/M5Item.ts index d9138da..74bd118 100644 --- a/source/module/items/M5Item.ts +++ b/source/module/items/M5Item.ts @@ -79,14 +79,23 @@ export class M5Item extends Item { calc.special = itemData.special ? 2 : 0; calc.ew = calc.special + itemData.stats.attackBonus; calc.combatSkills = null; + calc.containers = null; + if (actor) { const actorCalc = character.derivedData({ weapons: true, defensiveWeapons: true, armor: true, items: true, spells: true, effects: true, kampfkuenste: true }); if (actorCalc) { calc.ew += actorCalc.stats.attackBonus.value; calc.combatSkills = actorCalc.skills.combat; + calc.containers = actorCalc.gear.containers; } - + const container = character.getItem(itemData.containerId); + //console.log("M5Item.prepareDerivedData:containers", itemData, container?.system) + if (container) { + container.prepareDerivedData(); + const containerData = container.system; + } + const skill = character.getItem(itemData.skillId); //console.log("M5Item.prepareDerivedData:weapon", itemData, skill?.system) if (skill) { @@ -103,14 +112,23 @@ export class M5Item extends Item { calc.special = itemData.special ? 2 : 0; calc.ew = calc.special + itemData.stats.defenseBonus; calc.combatSkills = null; + calc.containers = null; if (actor) { const actorCalc = character.derivedData({ weapons: true, defensiveWeapons: true, armor: true, items: true, spells: true, effects: true, kampfkuenste: true }); if (actorCalc) { calc.ew += actorCalc.stats.defense.value + actorCalc.stats.defenseBonus.value; calc.combatSkills = actorCalc.skills.combat; + calc.containers = actorCalc.gear.containers; } + const container = character.getItem(itemData.containerId); + //console.log("M5Item.prepareDerivedData:containers", itemData, container?.system) + if (container) { + container.prepareDerivedData(); + const containerData = container.system; + } + const skill = character.getItem(itemData.skillId); //console.log("M5Item.prepareDerivedData:weapon", itemData, skill?.system) if (skill) { @@ -128,6 +146,19 @@ export class M5Item extends Item { itemData.mods[3] = { type: "attribute", id: "gw", operation: "add100", value: itemData.attributeMod.gw }; itemData.mods[4] = { type: "stat", id: "lpProtection", operation: "set", value: itemData.lpProtection }; itemData.mods[5] = { type: "stat", id: "apProtection", operation: "set", value: itemData.apProtection }; + calc.containers = null; + if (actor) { + const actorCalc = actor.derivedData({ weapons: true, defensiveWeapons: true, armor: true, items: true, spells: true, effects: true, kampfkuenste: true }); + if (actorCalc) { + calc.containers = actorCalc.gear.containers; + } + const container = character.getItem(itemData.containerId); + //console.log("M5Item.prepareDerivedData:containers", itemData, container?.system) + if (container) { + container.prepareDerivedData(); + const containerData = container.system; + } + } } else if (itemType === "spell") { calc.fw = 0; if (actor) { diff --git a/source/module/sheets/M5CharacterSheet.ts b/source/module/sheets/M5CharacterSheet.ts index ff225fe..d2ffa4c 100644 --- a/source/module/sheets/M5CharacterSheet.ts +++ b/source/module/sheets/M5CharacterSheet.ts @@ -1,14 +1,14 @@ import Logger from "../../utils/Logger"; import { M5Character } from "../actors/M5Character"; import { M5Item } from "../items/M5Item"; -import { M5SkillLearned, M5SkillUnlearned } from "../M5Base"; +import { M5ItemType, M5SkillLearned, M5SkillUnlearned } from "../M5Base"; import { M5Roll } from "../rolls/M5Roll"; export default class M5CharacterSheet extends ActorSheet { static get defaultOptions() { return mergeObject(super.defaultOptions, { template: "systems/midgard5/templates/sheets/character/main.hbs", - width: 1200, + width: 1000, height: 800, classes: ["midgard5", "sheet", "character"], tabs: [{ navSelector: ".sheet-navigation", contentSelector: ".sheet-content", initial: "base_values" }], @@ -111,7 +111,11 @@ export default class M5CharacterSheet extends ActorSheet { if (!item.system.quantity) { item.system.quantity = 0; } - item.system.quantity += 1; + item.update({ + data: { + quantity: item.system.quantity + 1, + }, + }); this.render(); }); @@ -127,7 +131,11 @@ export default class M5CharacterSheet extends ActorSheet { const context = this.actor as any; const item = context.items.get(itemId); if (item.system.quantity > 0) { - item.system.quantity -= 1; + item.update({ + data: { + quantity: item.system.quantity - 1, + }, + }); } this.render(); }); @@ -144,7 +152,11 @@ export default class M5CharacterSheet extends ActorSheet { const context = this.actor as any; const item = context.items.get(itemId); if (item.system.quantity > 0) { - item.system.quantity -= 1; + item.update({ + data: { + quantity: item.system.quantity - 1, + }, + }); } await item.roll(); @@ -246,6 +258,111 @@ export default class M5CharacterSheet extends ActorSheet { const roll = M5Roll.resistanceBody(this.actor); await roll.toMessage(); }); + + html.find(".change-equipped").on("click", async (event) => { + let row = event.target.parentElement; + let itemId = row.dataset["item"]; + while (!itemId) { + row = row.parentElement; + if (!row) return; + itemId = row.dataset["item"]; + } + + const context = this.actor as any; + const item = context.items.get(itemId); + if (item.system.equipped === true) { + item.system.equipped = false; + } else { + item.system.equipped = true; + } + this.render(); + }); + + html.find(".add-item").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.item"), M5ItemType.ITEM).then((i) => { + const item = i as any; + item.update({ + data: { + quantity: 1, + }, + }); + }); + }); + + html.find(".add-weapon").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.weapon"), M5ItemType.WEAPON); + }); + + html.find(".add-defensiveWeapon").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.defensiveWeapon"), M5ItemType.DEFENSIVE_WEAPON); + }); + + html.find(".add-armor").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.armor"), M5ItemType.ARMOR); + }); + + html.find(".add-container").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.container"), M5ItemType.CONTAINER).then((i) => { + const item = i as any; + item.update({ + data: { + quantity: 1, + }, + }); + }); + }); + + html.find(".add-spell").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.spell"), M5ItemType.SPELL).then((i) => { + const item = i as any; + item.update({ + data: { + process: "none", + }, + }); + }); + }); + + html.find(".add-kampfkunst").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.kampfkunst"), M5ItemType.KAMPFKUNST).then((i) => { + const item = i as any; + item.update({ + data: { + type: "angriff", + variante: "anstuermen", + }, + }); + }); + }); + + html.find(".add-effect").on("click", async (event) => { + const data = this.actor.system; + + const character = this.actor as M5Character; + character.createItem((game as Game).i18n.localize("TYPES.Item.effect"), M5ItemType.EFFECT); + }); + // Drag & Drop const dragDrop = new DragDrop({ dragSelector: ".items-list .item", diff --git a/source/style/Character-sheet.less b/source/style/Character-sheet.less index a88acb5..75a86bb 100644 --- a/source/style/Character-sheet.less +++ b/source/style/Character-sheet.less @@ -6,17 +6,42 @@ .flexbox { display: flex; flex-direction: row; - flex-wrap: wrap + flex-wrap: wrap; + } + + .flexcolumn { + flex-wrap: wrap; + } + + .flexcolumn-1 { + flex: 100%; + flex-wrap: wrap; } .flexcolumn-2 { flex: 50%; + flex-wrap: wrap; + } + + .flexcolumn-3 { + flex: 33%; + flex-wrap: wrap; + } + + .flexcolumn-4 { + flex: 25%; + flex-wrap: wrap; + } + + .flexcolumn-5 { + flex: 20%; + flex-wrap: wrap; } .flexpart { gap: 0; padding: 0; - margin: 10px; + margin: 5px; background-color: beige; border: 2px solid black; } @@ -46,6 +71,15 @@ color: white; } + .profile-img { + display: block; + margin-left: auto; + margin-right: auto; + height: 100%; + width: auto; + border: 0px solid black; + } + .sheet.character { form { display: flex; @@ -62,12 +96,6 @@ } } - .profile-img { - max-width: 128px; - height: 128px; - border: 0px solid black; - } - .description { flex: 0 0 100%; margin: 0; @@ -100,6 +128,13 @@ table { background-color: beige; border: 0px solid transparent; + &.bordered { + border-collapse: separate; + border: 2px solid black; + border-radius: 10px; + font-size: larger; + font-weight: bolder; + } } td, @@ -137,6 +172,11 @@ text-align: left; font-weight: bold; } + + &.highlight { + font-weight: bold; + font-style: italic; + } } .table-icon { @@ -146,6 +186,10 @@ border: 0px solid transparent; } + input { + border: 0px solid black; + } + input.skill { width: 5rem; } @@ -154,22 +198,34 @@ width: 5rem; } + input.checkbox { + width: 1rem; + height: 1rem; + } + .new-skill { font-style: italic; background: rgba(0, 0, 0, 0.3); color: rgba(255, 255, 255); - - button { - background: rgba(255, 255, 255, 0.5); - } } - button.roll-button { + .roll-button { background: url(/icons/svg/d20-black.svg) no-repeat; - background-size: 24px 24px; + background-size: 1rem 1rem; border: #000000 solid 0px; - width: 26px; - height: 26px; + width: 1rem; + height: 1rem; + } + + .learn-button { + padding: 0; + margin: 0; + height: 1rem; + width: 4rem; + background: rgba(255, 255, 255, 0.5); + font-size: smaller; + text-align: center; + line-height: 0.8rem; } span.spell-process { @@ -222,15 +278,27 @@ } } + .biography { + margin: 0.5rem 0.5rem 0.5rem 0.5rem; + height: 180px; + background-color: #eaead7; + .editor { + height: 100%; + width: 100%; + } + } + .attributes { padding: 0.5rem 0.5rem 0.5rem 0.5rem; display: flex; flex-direction: row; margin-bottom: 0.5rem; background-color: beige; + flex-wrap: wrap; + justify-content: center; .attribute { - flex: 0 0 7rem; + flex: 0 0 6rem; margin: 0; border: 1px solid @attributeBorderColor; //border-bottom: none; diff --git a/source/system.json b/source/system.json index 27c4125..829b8ca 100644 --- a/source/system.json +++ b/source/system.json @@ -3,13 +3,17 @@ "name": "midgard5", "title": "Midgard 5. Edition", "description": "The German RPG Midgard 5. Edition", - "version": "2.3.1", + "version": "2.4.0", "compatibility": { "minimum": "10", "verified": "11", "maximum": "11" }, - "authors": [{"name": "Byroks"}], + "authors": [ + {"name": "Byroks"}, + {"name": "Le-Frique"}, + {"name": "Oskaloq"} + ], "scripts": ["bundle.js"], "styles": ["bundle.css"], "packs": [ @@ -153,9 +157,9 @@ "gridUnits": "m", "primaryTokenAttribute": "lp", "secondaryTokenAttribute": "ap", - "url": "https://github.com/Byroks/foundry-vtt-system-midgard5", - "manifest": "https://github.com/Byroks/foundry-vtt-system-midgard5/releases/download/v2.3.1/system.json", - "download": "https://github.com/Byroks/foundry-vtt-system-midgard5/releases/download/v2.3.1/midgard5-v2.3.1.zip", + "url": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5", + "manifest": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v2.4.0/system.json", + "download": "https://git.byroks.de/MidgardVTT-Entwicklung/foundry-vtt-system-midgard5/releases/download/v2.4.0/midgard5-v2.4.0.zip", "initiative": "@c.calc.attributes.gw.value", "license": "LICENSE.txt" } \ No newline at end of file diff --git a/source/template.json b/source/template.json index 454e250..5dd1d3b 100644 --- a/source/template.json +++ b/source/template.json @@ -5,9 +5,11 @@ "characterDescription": { "info": { "description": "", + "background": "", "class": "", "race": "", "magicUsing": false, + "showAllItems": false, "gender": "", "weight": "", "height": "", @@ -202,7 +204,7 @@ }, "equippable": { "equippable": false, - "equipped": true + "equipped": false }, "valuable": { "valuable": false, diff --git a/templates/sheets/character/base_values.hbs b/templates/sheets/character/base_values.hbs index ad10c13..6ac423c 100644 --- a/templates/sheets/character/base_values.hbs +++ b/templates/sheets/character/base_values.hbs @@ -1,168 +1,120 @@ +
+ +
+
{{localize "midgard5.attributes"}}
+
+
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="st" attribute=data.attributes.st calc=data.calc.attributes.st}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="gs" attribute=data.attributes.gs calc=data.calc.attributes.gs}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="gw" attribute=data.attributes.gw calc=data.calc.attributes.gw}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="ko" attribute=data.attributes.ko calc=data.calc.attributes.ko}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="in" attribute=data.attributes.in calc=data.calc.attributes.in}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="zt" attribute=data.attributes.zt calc=data.calc.attributes.zt}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="au" attribute=data.attributes.au calc=data.calc.attributes.au}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="pa" attribute=data.attributes.pa calc=data.calc.attributes.pa}} +
+ {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="wk" attribute=data.attributes.wk calc=data.calc.attributes.wk}} +
+
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Eigenschaften
{{localize "midgard5.magicUsing"}}  
{{localize "midgard5.grace"}}{{localize "midgard5.exp-overall"}}
{{localize "midgard5.destiny"}}{{localize "midgard5.exp-available"}}
{{localize "midgard5.luckPoints"}}{{localize "midgard5.movementRange"}}
+
+
+
{{localize "midgard5.points"}}
+ + + + + + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.grace"}}{{localize "midgard5.exp-overall"}}
{{localize "midgard5.destiny"}}{{localize "midgard5.exp-available"}}
{{localize "midgard5.luckPoints"}}
+
+
- - - - - - - - - - - - - - -
Leiteigenschaften
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="st" attribute=data.attributes.st calc=data.calc.attributes.st}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="gs" attribute=data.attributes.gs calc=data.calc.attributes.gs}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="gw" attribute=data.attributes.gw calc=data.calc.attributes.gw}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="ko" attribute=data.attributes.ko calc=data.calc.attributes.ko}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="in" attribute=data.attributes.in calc=data.calc.attributes.in}} -
-
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="zt" attribute=data.attributes.zt calc=data.calc.attributes.zt}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="au" attribute=data.attributes.au calc=data.calc.attributes.au}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="pa" attribute=data.attributes.pa calc=data.calc.attributes.pa}} -
- {{> "systems/midgard5/templates/sheets/character/attribute.hbs" attributeId="wk" attribute=data.attributes.wk calc=data.calc.attributes.wk}} -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{#if (eq data.info.race "Zwerg")}} - - - {{/if}} - - - {{#if (eq data.info.race "Zwerg")}} - - - - - {{/if}} - - - -
Berechnete Werte
{{localize "midgard5.brawl"}}{{data.calc.stats.brawl.value}}{{localize "midgard5.enduranceBonus"}}{{data.calc.stats.enduranceBonus}}
{{localize "midgard5.defense"}}{{data.calc.stats.defense.value}}{{localize "midgard5.defenseBonus"}}{{data.calc.stats.defenseBonus.value}}
{{localize "midgard5.damageBonus"}}{{data.calc.stats.damageBonus.value}}{{localize "midgard5.attackBonus"}}{{data.calc.stats.attackBonus.value}}
{{localize "midgard5.spellCasting"}}{{data.calc.stats.spellCasting.value}}{{localize "midgard5.poisonResistance"}}{{data.calc.stats.poisonResistance.value}}
{{localize "midgard5.resistanceMind"}}{{data.calc.stats.resistanceMind.value}}{{localize "midgard5.resistanceBody"}}{{data.calc.stats.resistanceBody.value}}
{{localize "midgard5.movementRange"}}{{data.calc.stats.movement.value}}{{localize "midgard5.hoard"}}{{data.calc.stats.hoard}}
{{localize "midgard5.hoardMin"}}{{data.calc.stats.hoardMin}}{{localize "midgard5.hoard-next"}}{{data.calc.stats.hoardNext}}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Beschreibung
{{localize "midgard5.origin"}}{{localize "midgard5.gender"}}
{{localize "midgard5.weight"}}{{localize "midgard5.height"}}
{{localize "midgard5.shape"}}{{localize "midgard5.age"}}
{{localize "midgard5.caste"}}{{localize "midgard5.faith"}}
- -{{editor content=data.description target="data.description" button=true owner=owner editable=editable}} +
+
+
{{localize "midgard5.calculated-values"}}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{#if (eq data.info.race "Zwerg")}} + + + + + + + + + + + + + {{/if}} + + + +
{{localize "midgard5.magicUsing"}}{{localize "midgard5.movementRange"}}
{{localize "midgard5.brawl"}}{{data.calc.stats.brawl.value}}{{localize "midgard5.enduranceBonus"}}{{data.calc.stats.enduranceBonus}}
{{localize "midgard5.defense"}}{{data.calc.stats.defense.value}}{{localize "midgard5.defenseBonus"}}{{data.calc.stats.defenseBonus.value}}
{{localize "midgard5.damageBonus"}}{{data.calc.stats.damageBonus.value}}{{localize "midgard5.attackBonus"}}{{data.calc.stats.attackBonus.value}}
{{localize "midgard5.spellCasting"}}{{data.calc.stats.spellCasting.value}}{{localize "midgard5.poisonResistance"}}{{data.calc.stats.poisonResistance.value}}
{{localize "midgard5.resistanceMind"}}{{data.calc.stats.resistanceMind.value}}{{localize "midgard5.resistanceBody"}}{{data.calc.stats.resistanceBody.value}}
{{localize "midgard5.hoard"}}{{data.calc.stats.hoard}}
{{localize "midgard5.hoardMin"}}{{data.calc.stats.hoardMin}}{{localize "midgard5.hoard-next"}}{{data.calc.stats.hoardNext}}
+
+
+
\ No newline at end of file diff --git a/templates/sheets/character/combat.hbs b/templates/sheets/character/combat.hbs new file mode 100644 index 0000000..e26b12a --- /dev/null +++ b/templates/sheets/character/combat.hbs @@ -0,0 +1,189 @@ +
+
+
+
{{localize "midgard5.attack"}}
+ + + + + + + + + + + + {{#each data.calc.gear.weapons as |item itemId|}} + {{#if item.equipped}} + + + + + + + + {{/if}} + {{/each}} + + + + + + + + + +
{{localize "TYPES.Item.weapon"}}{{localize "midgard5.ew"}}{{localize "midgard5.damage"}}
{{item.label}}{{#if item.special}}(*){{/if}}{{item.calc.ew}}{{item.damageBase}} + {{#if item.equipped}} + + {{else}} + + {{/if}} +
{{localize "midgard5.brawl"}}{{data.calc.stats.brawlFw}}1d6 -4 
+ + + + + + + + + + + + + {{#each data.calc.kampfkuenste as |item itemId|}} + + + + + + + + {{/each}} + +
{{localize "TYPES.Item.kampfkunst"}}{{localize "midgard5.kampfkunst-variante-short"}}{{localize "midgard5.ew"}}
{{item.label}} + {{#if item.isKido}} + {{localize (m5concat "midgard5.kido-type-" item.type)}} + {{#unless (eq item.type "finte")}} + ({{localize (m5concat "midgard5.kido-variante-" item.variante)}}) + {{/unless}} + {{else}} + {{localize (m5concat "midgard5.kampfkunst-type-" item.type)}} + {{#if (eq item.type "angriff")}} + ({{localize (m5concat "midgard5.kampfkunst-variante-" item.variante)}}) + {{/if}} + {{/if}} + {{item.calc.ew}}
+
+
+ +
+
+
{{localize "midgard5.calculated-values"}}
+ + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.movementRange"}}{{data.calc.stats.movement.value}}  
{{localize "midgard5.defense"}}{{data.calc.stats.defense.value}}{{localize "midgard5.defenseBonus"}}{{data.calc.stats.defenseBonus.value}}
{{localize "midgard5.damageBonus"}}{{data.calc.stats.damageBonus.value}}{{localize "midgard5.attackBonus"}}{{data.calc.stats.attackBonus.value}}
+
+
+ +
+
+
{{localize "midgard5.defense"}}
+ + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.defense"}}{{add data.calc.stats.defense.value data.calc.stats.defenseBonus.value}}
{{localize "midgard5.resistanceMind"}}{{data.calc.stats.resistanceMind.value}}
{{localize "midgard5.resistanceBody"}}{{data.calc.stats.resistanceBody.value}}
+ + + + + + + + + + + + {{#each data.calc.gear.defensiveWeapons as |item itemId|}} + {{#if item.equipped}} + + + + + + + + {{/if}} + {{/each}} + +
{{localize "TYPES.Item.defensiveWeapon"}}{{localize "midgard5.ew"}}{{localize "midgard5.defenseBonus-short"}}
{{item.label}}{{item.calc.ew}}{{item.defenseBonus}} + {{#if item.equipped}} + + {{else}} + + {{/if}} +
+ + + + + + + + + + + {{#each data.calc.gear.armor as |item itemId|}} + {{#if item.equipped}} + + + + + + {{/if}} + {{/each}} + +
{{localize "TYPES.Item.armor"}}{{localize "midgard5.actor-lp-short"}}
{{item.label}}{{lpProtection}} + {{#if item.equipped}} + + {{else}} + + {{/if}} +
+
+
+
diff --git a/templates/sheets/character/description.hbs b/templates/sheets/character/description.hbs new file mode 100644 index 0000000..b8dd005 --- /dev/null +++ b/templates/sheets/character/description.hbs @@ -0,0 +1,50 @@ +
+
+
+
{{localize "midgard5.characteristics"}}
+ + + + + + + + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.origin"}}{{localize "midgard5.gender"}}{{localize "midgard5.shape"}}{{localize "midgard5.age"}}
{{localize "midgard5.weight"}}{{localize "midgard5.height"}}{{localize "midgard5.caste"}}{{localize "midgard5.faith"}}
+
+
+ +
+
+
{{localize "midgard5.description"}}
+
+
{{editor content=data.info.description target="data.info.description" button=true owner=owner editable=editable}}
+
+
+ +
+
+
{{localize "midgard5.background"}}
+
+
{{editor content=data.info.background target="data.info.background" button=true owner=owner editable=editable}}
+
+
+ +
\ No newline at end of file diff --git a/templates/sheets/character/effects.hbs b/templates/sheets/character/effects.hbs index 986629d..7af454d 100644 --- a/templates/sheets/character/effects.hbs +++ b/templates/sheets/character/effects.hbs @@ -2,7 +2,8 @@ {{localize "TYPES.Item.effect"}} - + + diff --git a/templates/sheets/character/gear.hbs b/templates/sheets/character/gear.hbs index 629d9a6..5d9ed07 100644 --- a/templates/sheets/character/gear.hbs +++ b/templates/sheets/character/gear.hbs @@ -2,7 +2,7 @@
-
Geld
+
{{localize "midgard5.currency"}}
@@ -31,32 +31,32 @@
-
{{localize "TYPES.Item.item"}}
+
+ + {{localize "midgard5.gear"}} + (alle ) +
- - - + + + {{#each data.calc.gear.items as |item itemId|}} + {{#if (or ../data.info.showAllItems (eq item.containerId ""))}} - - - + + + + + {{/if}} + {{/each}} + +
{{localize "TYPES.Item.item"}}{{localize "midgard5.equipped"}} {{localize "midgard5.item-quantity"}} {{localize "midgard5.item-value"}} {{localize "midgard5.item-weight"}}
{{item.label}} - {{#if item.equipped}} - - {{/if}} - {{item.quantity}} @@ -72,8 +72,119 @@ {{item.weight}} kg {{/unless}} {{#if item.rollExist}}{{/if}} + {{#if item.equipped}} + + {{else}} + + {{/if}} + {{#if item.rollExist}}{{/if}}
+
+ +
+
{{localize "midgard5.weapons"}}
+ + + + + + + + + + + + {{#each data.calc.gear.weapons as |item itemId|}} + + + + + + + {{/each}} + +
{{localize "TYPES.Item.weapon"}}{{localize "midgard5.item-value"}}
{{item.label}} + {{#unless (or (eq item.value 0) (eq item.currency ""))}} + {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} + {{/unless}} + + {{#if item.equipped}} + + {{else}} + + {{/if}} +
+
+ +
+
{{localize "midgard5.defensive-weapons"}}
+ + + + + + + + + + + {{#each data.calc.gear.defensiveWeapons as |item itemId|}} + + + + + + + {{/each}} + +
{{localize "TYPES.Item.defensiveWeapon"}}{{localize "midgard5.item-value"}}
{{item.label}} + {{#unless (or (eq item.value 0) (eq item.currency ""))}} + {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} + {{/unless}} + + {{#if item.equipped}} + + {{else}} + + {{/if}} +
+
+ +
+
{{localize "midgard5.armor"}}
+ + + + + + + + + + + {{#each data.calc.gear.armor as |item itemId|}} + + + + + {{/each}} @@ -89,26 +200,20 @@ - - - + + + - {{#each data.calc.gear.containers as |item itemId|}} - - - + + + {{/each}} @@ -134,32 +246,22 @@ - - - - + + + - {{#each ../data.calc.gear.items as |item itemId|}} {{#if (eq item.containerId containerId)}} - - - - + + + {{/if}} {{/each}} diff --git a/templates/sheets/character/kampfkuenste.hbs b/templates/sheets/character/kampfkuenste.hbs deleted file mode 100644 index c1e7cf8..0000000 --- a/templates/sheets/character/kampfkuenste.hbs +++ /dev/null @@ -1,136 +0,0 @@ -
{{localize "TYPES.Item.armor"}}{{localize "midgard5.item-value"}}
{{item.label}} + {{#unless (or (eq item.value 0) (eq item.currency ""))}} + {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} + {{/unless}} + + {{#if item.equipped}} + + {{else}} + + {{/if}} +
{{localize "TYPES.Item.container"}}{{localize "midgard5.equipped"}} {{localize "midgard5.item-value"}} {{localize "midgard5.item-weight"}}
{{item.label}} - {{#if item.equipped}} - - {{/if}} - {{#unless (or (eq item.value 0) (eq item.currency ""))}} {{item.value}} {{localize (m5concat "midgard5.currency-" item.currency)}} @@ -119,8 +224,15 @@ {{item.weight}} kg {{/unless}} {{#if item.rollExist}}{{/if}} + {{#if item.equipped}} + + {{else}} + + {{/if}} + {{#if item.rollExist}}{{/if}}
{{localize "TYPES.Item.item"}}{{localize "midgard5.equipped"}}{{localize "TYPES.Item.container"}} {{localize "midgard5.item-quantity"}} {{localize "midgard5.item-value"}} {{localize "midgard5.item-weight"}} 
{{item.label}} - {{#if item.equipped}} - - {{/if}} - - {{localize "TYPES.Item.container"}} - {{item.quantity}} @@ -175,8 +277,15 @@ {{item.weight}} kg {{/unless}} {{#if item.rollExist}}{{/if}} + {{#if item.equipped}} + + {{else}} + + {{/if}} + {{#if item.rollExist}}{{/if}}
- - - - - - - - - - {{#each data.calc.kampfkuenste as |item itemId|}} - - - - - - - {{/each}} - -
{{localize "TYPES.Item.kampfkunst"}}{{localize "midgard5.ew"}}
- {{item.label}} - {{#if item.isKido}} - {{localize (m5concat "midgard5.kido-type-" item.type)}} - {{#unless (eq item.type "finte")}} - ({{localize (m5concat "midgard5.kido-variante-" item.variante)}}) - {{/unless}} - {{else}} - {{localize (m5concat "midgard5.kampfkunst-type-" item.type)}} - {{#if (eq item.type "angriff")}} - ({{localize (m5concat "midgard5.kampfkunst-variante-" item.variante)}}) - {{/if}} - {{/if}} - {{item.calc.ew}}
- - - - - - - - - - - {{#each data.calc.gear.weapons as |item itemId|}} - - - - - - - {{/each}} - - - - - - - - -
{{localize "TYPES.Item.weapon"}}{{localize "midgard5.ew"}}
{{item.label}}{{item.calc.ew}}
{{localize "midgard5.brawl"}}{{data.calc.stats.brawlFw}}
- - - - - - - - - - - - {{#each data.calc.gear.defensiveWeapons as |item itemId|}} - - - - - - - {{/each}} - - - - - - - - - - - - - - - - - - - - - - -
{{localize "TYPES.Item.defensiveWeapon"}}{{localize "midgard5.ew"}}
{{item.label}}{{item.calc.ew}}
{{localize "midgard5.defense"}}{{add data.calc.stats.defense.value data.calc.stats.defenseBonus.value}}
{{localize "midgard5.resistanceMind"}}{{data.calc.stats.resistanceMind.value}}
{{localize "midgard5.resistanceBody"}}{{data.calc.stats.resistanceBody.value}}
- - - - - - - - - - - - - - - - {{#each data.calc.gear.armor as |item itemId|}} - - - - - - - - - - - {{/each}} - -
{{localize "TYPES.Item.armor"}}{{localize "midgard5.actor-lp-short"}}{{localize "midgard5.actor-ap-short"}}{{localize "midgard5.attackBonus-short"}}{{localize "midgard5.defenseBonus-short"}}BGw
- {{item.label}} - {{#if item.equipped}} - {{localize "midgard5.equipped"}} - {{/if}} - {{actorItemValue ../actor._id itemId "lpProtection" ../actor.isToken}}{{actorItemValue ../actor._id itemId "apProtection"}}{{actorItemValue ../actor._id itemId "stats.attackBonus"}}{{actorItemValue ../actor._id itemId "stats.defenseBonus"}}{{actorItemValue ../actor._id itemId "stats.movementBonus"}}{{actorItemValue ../actor._id itemId "attributeMod.gw"}}
\ No newline at end of file diff --git a/templates/sheets/character/main.hbs b/templates/sheets/character/main.hbs index bfd17bf..7ca7632 100644 --- a/templates/sheets/character/main.hbs +++ b/templates/sheets/character/main.hbs @@ -1,101 +1,116 @@
-
- - - - - - - +
+ + +
+ Midgard +
+ + +
+
Midgard
{{data.calc.level}}
+ + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{localize "midgard5.actor-name"}}
NameGrad
- - - -
{{localize "midgard5.race"}}{{localize "midgard5.class"}}{{localize "midgard5.occupation"}}
{{localize "midgard5.actor-lp-short"}} -
- - {{#times data.lp.max}} - {{#if (lt this ../data.lp.value)}} -
- {{else}} -
- {{/if}} - {{/times}} - -
-
{{localize "midgard5.actor-ap-short"}} -
- - {{#times data.ap.max}} - {{#if (lt this ../data.ap.value)}} -
- {{else}} -
- {{/if}} - {{/times}} - -
-
{{localize "midgard5.actor-st"}}{{localize "midgard5.actor-gs"}}{{localize "midgard5.actor-gw"}}{{localize "midgard5.actor-ko"}}{{localize "midgard5.actor-in"}}{{localize "midgard5.actor-zt"}}{{localize "midgard5.actor-au"}}{{localize "midgard5.actor-pa"}}{{localize "midgard5.actor-wk"}}{{localize "midgard5.actor-git"}}
{{data.calc.attributes.st.value}}{{data.calc.attributes.gs.value}}{{data.calc.attributes.gw.value}}{{data.calc.attributes.ko.value}}{{data.calc.attributes.in.value}}{{data.calc.attributes.zt.value}}{{data.calc.attributes.au.value}}{{data.calc.attributes.pa.value}}{{data.calc.attributes.wk.value}}{{data.calc.stats.poisonResistance.value}}
+ + {{localize "midgard5.class"}} + + {{localize "midgard5.level"}} + {{data.calc.level}} + + + + + + + + + + + + +
+ + + +
{{localize "midgard5.race"}}{{localize "midgard5.occupation"}}
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{{localize "midgard5.actor-st"}}{{localize "midgard5.actor-gs"}}{{localize "midgard5.actor-gw"}}{{localize "midgard5.actor-ko"}}{{localize "midgard5.actor-in"}}{{localize "midgard5.actor-zt"}}{{localize "midgard5.actor-au"}}{{localize "midgard5.actor-pa"}}{{localize "midgard5.actor-wk"}}{{localize "midgard5.actor-git"}}
{{data.calc.attributes.st.value}}{{data.calc.attributes.gs.value}}{{data.calc.attributes.gw.value}}{{data.calc.attributes.ko.value}}{{data.calc.attributes.in.value}}{{data.calc.attributes.zt.value}}{{data.calc.attributes.au.value}}{{data.calc.attributes.pa.value}}{{data.calc.attributes.wk.value}}{{data.calc.stats.poisonResistance.value}}
+
+ + +
+ +
+ + +
+ + + + + + + + + +
{{localize "midgard5.actor-lp-short"}} +
+ + {{#times data.lp.max}} + {{#if (lt this ../data.lp.value)}} +
+ {{else}} +
+ {{/if}} + {{/times}} + +
+
{{localize "midgard5.actor-ap-short"}} +
+ + {{#times data.ap.max}} + {{#if (lt this ../data.ap.value)}} +
+ {{else}} +
+ {{/if}} + {{/times}} + +
+
+
{{!-- Character Sheet Navigation --}} @@ -103,11 +118,12 @@ {{ localize "midgard5.base_values" }} {{ localize "midgard5.skills" }} {{ localize "midgard5.gear" }} + {{ localize "midgard5.combat" }} {{#if actor.system.info.magicUsing }} {{ localize "midgard5.spells" }} {{/if}} - {{ localize "midgard5.kampfkuenste" }} {{ localize "midgard5.effects" }} + {{ localize "midgard5.description" }}
@@ -124,16 +140,20 @@ {{> "systems/midgard5/templates/sheets/character/gear.hbs"}}
-
- {{> "systems/midgard5/templates/sheets/character/spells.hbs"}} +
+ {{> "systems/midgard5/templates/sheets/character/combat.hbs"}}
-
- {{> "systems/midgard5/templates/sheets/character/kampfkuenste.hbs"}} +
+ {{> "systems/midgard5/templates/sheets/character/spells.hbs"}}
{{> "systems/midgard5/templates/sheets/character/effects.hbs"}}
+
+ {{> "systems/midgard5/templates/sheets/character/description.hbs"}} +
+ \ No newline at end of file diff --git a/templates/sheets/character/skills.hbs b/templates/sheets/character/skills.hbs index 9ca501e..b666208 100644 --- a/templates/sheets/character/skills.hbs +++ b/templates/sheets/character/skills.hbs @@ -1,153 +1,171 @@ - - - - - - - - - - - - - - {{#each data.calc.skills.general as |skill skillId|}} - - - - - - - - - - {{/each}} - -
{{localize "midgard5.learned-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
+
- - - - - - - - - - - - - - {{#each data.calc.skills.language as |skill skillId|}} - - - - - - - - - - {{/each}} - -
{{localize "midgard5.language"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
+
{{localize "midgard5.innate-abilities"}}
+ + + + + + + + + + + + + {{#each data.calc.skills.innate as |skill skillId|}} + + + + + + + + + {{/each}} + + + + + + + + + + + + + + + + + +
{{localize "midgard5.innate-ability"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}
{{localize "midgard5.perception"}}{{data.calc.stats.perceptionFW}}{{data.calc.stats.perception.value}}{{add data.calc.stats.perception.value data.calc.stats.perceptionFW}}
{{localize "midgard5.drinking"}}{{data.calc.stats.drinkingFW}}{{data.calc.stats.drinking.value}}{{add data.calc.stats.drinking.value data.calc.stats.drinkingFW}}
+
- - - - - - - - - - - - - {{#each data.calc.skills.innate as |skill skillId|}} - - - - - - - - - {{/each}} - - - - - - - - +
+
{{localize "midgard5.learned-skills"}}
+
{{localize "midgard5.innate-ability"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}
{{localize "midgard5.perception"}}{{data.calc.stats.perceptionFW}}{{data.calc.stats.perception.value}}{{add data.calc.stats.perception.value data.calc.stats.perceptionFW}}
+ + + + + + + + + + + + + {{#each data.calc.skills.general as |skill skillId|}} + + + + + + + + + + {{/each}} + +
{{localize "midgard5.learned-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}
+
- - {{localize "midgard5.drinking"}} - {{data.calc.stats.drinkingFW}} - {{data.calc.stats.drinking.value}} - {{add data.calc.stats.drinking.value data.calc.stats.drinkingFW}} - - - - - +
+
{{localize "midgard5.weapon-skills"}}
+ + + + + + + + + + + + + + {{#each data.calc.skills.combat as |skill skillId|}} + + + + + + + + + + {{/each}} + +
{{localize "midgard5.weapon-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
- - - - - - - - - - - - - - {{#each data.calc.skills.combat as |skill skillId|}} - - - - - - - - - - {{/each}} - -
{{localize "midgard5.weapon-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
+
{{localize "midgard5.languages"}}
+ + + + + + + + + + + + + + {{#each data.calc.skills.language as |skill skillId|}} + + + + + + + + + + {{/each}} + +
{{localize "midgard5.language"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{skill.label}}{{skill.fw}}{{skill.calc.bonus}}{{skill.calc.ew}}{{skill.pp}}
+
+
- - - - - - - - - - - - - - - {{#each data.skills.general as |skill key|}} - {{#unless (isSkillInList (localizeMidgard key) ../actor.system.calc.skills.general) }} - - - - - - - - - - - {{/unless}} - {{/each}} - -
{{localize "midgard5.unlearned-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}{{localize "midgard5.pp-short"}}
{{localizeMidgard key}}{{skill.fw}}{{skillBonus ../actor._id skill}}{{skillEw ../actor._id skill}}
\ No newline at end of file +
+ +
+
{{localize "midgard5.unlearned-skills"}}
+ + + + + + + + + + + + + {{#each data.skills.general as |skill key|}} + {{#unless (isSkillInList (localizeMidgard key) ../actor.system.calc.skills.general) }} + + + + + + + + + {{/unless}} + {{/each}} + +
{{localize "midgard5.unlearned-skill"}}{{localize "midgard5.fw"}}{{localize "midgard5.bonus"}}{{localize "midgard5.ew"}}
{{localizeMidgard key}}{{skill.fw}}{{skillBonus ../actor._id skill}}{{skillEw ../actor._id skill}}
+
+
+
\ No newline at end of file diff --git a/templates/sheets/character/spells.hbs b/templates/sheets/character/spells.hbs index 2bf55a7..ff5db64 100644 --- a/templates/sheets/character/spells.hbs +++ b/templates/sheets/character/spells.hbs @@ -4,7 +4,7 @@ {{localize "TYPES.Item.spell"}} {{localize "midgard5.ew"}} - + diff --git a/templates/sheets/item/armor.hbs b/templates/sheets/item/armor.hbs index 1daba6b..6826f32 100644 --- a/templates/sheets/item/armor.hbs +++ b/templates/sheets/item/armor.hbs @@ -55,6 +55,25 @@
+ + +
+ {{localize "TYPES.Item.container"}} + {{#if data.calc.containers}} + + {{else}} + {{localize "midgard5.assignItemToCharacter"}} + {{/if}} +
+ + {{localize "midgard5.lpProtection"}} diff --git a/templates/sheets/item/defensiveWeapon.hbs b/templates/sheets/item/defensiveWeapon.hbs index 50904c8..26ad39d 100644 --- a/templates/sheets/item/defensiveWeapon.hbs +++ b/templates/sheets/item/defensiveWeapon.hbs @@ -9,6 +9,10 @@
+ + + + @@ -55,6 +59,25 @@
+ + +
+ {{localize "TYPES.Item.container"}} + {{#if data.calc.containers}} + + {{else}} + {{localize "midgard5.assignItemToCharacter"}} + {{/if}} +
+ + {{localize "midgard5.defenseBonus"}} diff --git a/templates/sheets/item/weapon.hbs b/templates/sheets/item/weapon.hbs index 5fbb700..b1c2f79 100644 --- a/templates/sheets/item/weapon.hbs +++ b/templates/sheets/item/weapon.hbs @@ -9,6 +9,10 @@
+ + + + @@ -60,6 +64,25 @@
+ + +
+ {{localize "TYPES.Item.container"}} + {{#if data.calc.containers}} + + {{else}} + {{localize "midgard5.assignItemToCharacter"}} + {{/if}} +
+ + {{localize "midgard5.base-damage"}}