diff --git a/src/main.mjs b/src/main.mjs index 229136b7..3d5d11c9 100644 --- a/src/main.mjs +++ b/src/main.mjs @@ -23,6 +23,7 @@ async function preloadHandlebarsTemplates() { 'systems/DSA_4-1/templates/ui/partial-talent-editable.hbs', 'systems/DSA_4-1/templates/ui/partial-die.hbs', 'systems/DSA_4-1/templates/ui/partial-advantage-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-action-button.hbs', 'systems/DSA_4-1/templates/ui/partial-equipment-button.hbs', 'systems/DSA_4-1/templates/ui/partial-equipment-group-button.hbs', 'systems/DSA_4-1/templates/ui/partial-array-editor.hbs' diff --git a/src/module/documents/character.mjs b/src/module/documents/character.mjs index b2de8c3a..fbe8fd15 100644 --- a/src/module/documents/character.mjs +++ b/src/module/documents/character.mjs @@ -66,14 +66,22 @@ export class Character extends Actor { if (this.type !== 'character' && this.type !== 'creature') return; - // Copy the ability scores to the top level, so that rolls can use - // formulas like `@str.mod + 4`. if (data.attribute) { for (let [k, v] of Object.entries(data.attribute)) { data[k] = foundry.utils.deepClone(v); } } - console.log(data); + + // move sonderfertigkeiten into data, if it isn't in data the actor doesn't have that sonderfertigkeit + + data.sf = {} + if(data.sonderfertigkeiten) { + data.sonderfertigkeiten.forEach(sf => { + data.sf[sf.name] = sf.auswahl; + }) + delete data.sonderfertigkeiten; + } + return data; } } diff --git a/src/module/sheets/actions/action-manager.mjs b/src/module/sheets/actions/action-manager.mjs new file mode 100644 index 00000000..db40932c --- /dev/null +++ b/src/module/sheets/actions/action-manager.mjs @@ -0,0 +1,220 @@ +export class ActionManager { + + static FREE = "free-action"; + static REGULAR = "regular-action"; + static CONTINUING = "continuing-action"; + + static MOVEMENT = "movement-action" + static DEFENSE = "defense-action" + static ATTACK = "attack-action" + static INTERACTION = "interaction"; + static TALENT = "talent-action" + static SPELL = "spell"; + static DEFAULT = "default" + static SF = "special-ability" + + constructor(actor) { + this.actor = actor + } + + #freeActions = [ + { + name: "Ausweichen", + cost: ActionManager.FREE, + type: ActionManager.DEFENSE, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Rufen", + cost: ActionManager.FREE, + type: ActionManager.INTERACTION, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Sich zu Boden fallen lassen", + cost: ActionManager.FREE, + type: ActionManager.MOVEMENT, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Waffe oder Gegenstand fallen lassen", + cost: ActionManager.FREE, + type: ActionManager.INTERACTION, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "getragenes Artefakt aktivieren", + cost: ActionManager.FREE, + type: ActionManager.INTERACTION, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Schnellziehen", + cost: ActionManager.FREE, + type: ActionManager.INTERACTION, + source: ActionManager.SF, + eval: () => this.#hatSonderfertigkeit("Schnellziehen") + } + ] + + #regularActions = [ + { + name: "Angriffsaktion", + type: ActionManager.ATTACK, + cost: ActionManager.REGULAR, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Schnellschuss", + type: ActionManager.INTERACTION, + cost: ActionManager.CONTINUING, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Schnellschuss (Scharfschütze)", + type: ActionManager.INTERACTION, + cost: ActionManager.CONTINUING, + source: ActionManager.SF, + eval: () => this.#hatSonderfertigkeit("Scharfschütze") + }, + { + name: "Abwehraktion", + type: ActionManager.DEFENSE, + cost: ActionManager.REGULAR, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Bewegen", + type: ActionManager.MOVEMENT, + cost: ActionManager.REGULAR, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Position", + type: ActionManager.MOVEMENT, + cost: ActionManager.REGULAR, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Finte", + type: ActionManager.ATTACK, + cost: ActionManager.REGULAR, + source: ActionManager.SF, + eval: () => this.#hatSonderfertigkeit("Finte") + }, + { + name: "Wuchtschlag", + type: ActionManager.ATTACK, + cost: ActionManager.REGULAR, + source: ActionManager.SF, + eval: () => this.#hatSonderfertigkeit("Wuchtschlag") + }, + { + name: "Betäubungsschlag", + type: ActionManager.ATTACK, + cost: ActionManager.REGULAR, + source: ActionManager.SF, + eval: () => this.#hatSonderfertigkeit("Betäubungsschlag") + } + ] + + #continuingActions = [ + { + name: "Orientieren", + type: ActionManager.TALENT, + cost: ActionManager.CONTINUING, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Waffe ziehen", + type: ActionManager.INTERACTION, + cost: ActionManager.CONTINUING, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Sprinten", + type: ActionManager.MOVEMENT, + cost: ActionManager.CONTINUING, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Gegenstand benutzen", + type: ActionManager.INTERACTION, + cost: ActionManager.CONTINUING, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Schnellladen (Bogen)", + type: ActionManager.INTERACTION, + cost: ActionManager.CONTINUING, + source: ActionManager.SF, + eval: () => this.#hatSonderfertigkeit("Schnellladen (Bogen)") + }, + { + name: "Schnellladen (Armbrust)", + type: ActionManager.INTERACTION, + cost: ActionManager.CONTINUING, + source: ActionManager.SF, + eval: () => this.#hatSonderfertigkeit("Schnellladen (Armbrust)") + }, + { + name: "Nachladen", + type: ActionManager.INTERACTION, + cost: ActionManager.CONTINUING, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Talenteinsatz", + type: ActionManager.TALENT, + cost: ActionManager.CONTINUING, + source: ActionManager.DEFAULT, + eval: () => true + }, + { + name: "Zaubern", + type: ActionManager.SPELL, + cost: ActionManager.CONTINUING, + source: ActionManager.SF, + eval: () => this.#hatSonderfertigkeitBeginnendMit("Repräsentation:") + }, + { + name: "Liturgie wirken", + type: ActionManager.SPELL, + cost: ActionManager.CONTINUING, + source: ActionManager.SF, + eval: () => this.#hatSonderfertigkeitBeginnendMit("Liturgiekenntnis") + } + ] + + #hatSonderfertigkeitBeginnendMit(name) { + return this.actor.system.sonderfertigkeiten.find( p => p.name.startsWith(name) ) != null + } + + #hatSonderfertigkeit(name) { + return this.actor.system.sonderfertigkeiten.find( p => p.name === name ) != null + } + + evaluate() { + let actionArray = [...this.#freeActions, ...this.#regularActions, ...this.#continuingActions] + + + + return actionArray.filter( action => action.eval() ); + } + +} diff --git a/src/module/sheets/characterSheet.mjs b/src/module/sheets/characterSheet.mjs index eb3f3be3..c76054d9 100644 --- a/src/module/sheets/characterSheet.mjs +++ b/src/module/sheets/characterSheet.mjs @@ -1,5 +1,6 @@ import {Character} from "../documents/character.mjs"; import {PlayerCharacterDataModel} from "../data/character.mjs"; +import { ActionManager } from "./actions/action-manager.mjs"; export class CharacterSheet extends ActorSheet { /**@override */ @@ -40,6 +41,7 @@ export class CharacterSheet extends ActorSheet { this.#addAttributesToContext(context) this.#addEquipmentsToContext(context) await this.#addCombatStatistics(context) + this.#addActionsToContext(context) return context; } @@ -181,6 +183,11 @@ export class CharacterSheet extends ActorSheet { } + #addActionsToContext(context) { + const am = new ActionManager(this.object) + context.actions = am.evaluate() + } + async #addCombatStatistics(context) { const actorData = context.data; diff --git a/src/packs/__source/talente-brw/kampf/anderthalbhaender.json b/src/packs/__source/talente-brw/kampf/anderthalbhaender.json new file mode 100644 index 00000000..f1343ccd --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/anderthalbhaender.json @@ -0,0 +1,11 @@ +{ + "_id": "1rZ9ZOobBzOWfqVT", + "_key": "!items!1rZ9ZOobBzOWfqVT", + "type": "Skill", + "name": "Anderthalbhänder", + "system": { + "gruppe": "Kampf", + "talent": "Die meisten ‘anderthalbhändig’ geführten Schwerter und Säbel können zwar – je nach Körperkraft des Helden – auch mit den Talenten Schwerter, Säbel oder Zweihandschwerter/-säbel geführt werden, ihre wahren Fähigkeiten erkennt man jedoch nur, wenn man die für sie typischen Manöver in einer Kampftechnik erlernt hat: der schnelle Wechsel von einhän-diger zu zweihändiger Führung und zurück, daher auch der Name ‘anderthalbhändig’. Trotz ihres nicht unbeträchtlichen Gewichts können gut geführte Anderthalbhänder ein fast so variantenreiches Klingenspiel ermöglichen wie Fechtwaffen, weswegen dieses Talent auch gerne als die ‘Königsdisziplin’ unter den Klingenwaffen angesehen wird." + + } +} diff --git a/src/packs/__source/talente-brw/kampf/armbrust.json b/src/packs/__source/talente-brw/kampf/armbrust.json new file mode 100644 index 00000000..ac7665d0 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/armbrust.json @@ -0,0 +1,10 @@ +{ + "_id": "Gaz7algdJ98nYFdW", + "_key": "!items!Gaz7algdJ98nYFdW", + "type": "Skill", + "name": "Armbrust", + "system": { + "gruppe": "Kampf", + "talent": "Zwar beziehen auch diese Waffen ihre Energie aus gespannten Bögen, verdrillten Sehnen oder mechanischen Federn, aber damit enden die Ähnlichkeiten mit Bögen auch schon. Alle armbrustähnlichen Waffen besitzen einen Schaft, einen Abzug und einen Spannmechanismus und sind prinzipiell durch Ausrichten aufs Ziel nund Auslösen des Abzugs abzuschießen." + } +} diff --git a/src/packs/__source/talente-brw/kampf/bogen.json b/src/packs/__source/talente-brw/kampf/bogen.json index 34e68e6c..60348f9d 100644 --- a/src/packs/__source/talente-brw/kampf/bogen.json +++ b/src/packs/__source/talente-brw/kampf/bogen.json @@ -5,6 +5,6 @@ "name": "Bogen", "system": { "gruppe": "Kampf", - "talent": "" + "talent": "Bögen sind die Waffe der Wahl für die Bewohner von Steppen, Wüsten und Auen, weswegen sowohl die Elfen wie auch die Orks, die Weidener wie auch die Novadis für ihre Künste mit dem Bogen bekannt sind. Die Größe dieser Schusswaffen reicht vom kompakten Kurzbogen der Novadis bis zum Weidener Langbogen. Der korrekte Umgang mit Pfeil und Bogen erfordert einiges an Übung." } } diff --git a/src/packs/__source/talente-brw/kampf/dolche.json b/src/packs/__source/talente-brw/kampf/dolche.json index 9294bcf1..7709ec0c 100644 --- a/src/packs/__source/talente-brw/kampf/dolche.json +++ b/src/packs/__source/talente-brw/kampf/dolche.json @@ -5,6 +5,6 @@ "name": "Dolche", "system": { "gruppe": "Kampf", - "talent": "" + "talent": "Hierzu gehören alle zum Stich (und so gut wie nicht zur Parade) geeigneten Klingenwaffen mit einer maximalen Gesamtlänge von einem halben Schritt – also vom als Waffe eingesetzten Essmesser bis hin zum Langdolch, dessen größte Exemplare fast schon als Kurzschwert gelten können. Fast alle Dolche haben eine gerade, beidseitig angeschliffene Klinge." } } diff --git a/src/packs/__source/talente-brw/kampf/fechtwaffen.json b/src/packs/__source/talente-brw/kampf/fechtwaffen.json new file mode 100644 index 00000000..bfe43269 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/fechtwaffen.json @@ -0,0 +1,10 @@ +{ + "_id": "YeCewrwiq59JNcXl", + "_key": "!items!YeCewrwiq59JNcXl", + "type": "Skill", + "name": "Fechtwaffen", + "system": { + "gruppe": "Kampf", + "talent": "Dies sind schmale, fast ausschließlich zum Stich geeignete Klingenwaffen von knapp unter einem Schritt Klingenlänge mit meist reich verzierten Griffkörben, Parierbügeln oder kompliziert verdrehten Parierstangen. Sie sind elegant, schnell und gelten den einen als überaus ‘modern’, den anderen als ‘lächerliche Geckenwaffen’." + } +} diff --git a/src/packs/__source/talente-brw/kampf/hiebwaffen.json b/src/packs/__source/talente-brw/kampf/hiebwaffen.json new file mode 100644 index 00000000..44cdb726 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/hiebwaffen.json @@ -0,0 +1,10 @@ +{ + "_id": "AyuUSXqf2vaOaU3Y", + "_key": "!items!AyuUSXqf2vaOaU3Y", + "type": "Skill", + "name": "Hiebwaffen", + "system": { + "gruppe": "Kampf", + "talent": "In diese Kategorie fallen all jene einhändig geführten Waffen, deren Schadenswirkung primär auf Wucht basiert und mit denen man ‘punktförmig’ Schaden anrichtet, also zum einen Äxte, die aus einer schweren, breiten Klinge an einem Stiel bestehen und deren Schadenswirkung sowohl auf Wucht als auch auf der Schneidwirkung der Klinge (egal ob mit einem oder als Doppelblatt) beruht, zum anderen all jene Streitkolben, Keulen und Kriegshämmer, die möglichst viel Wucht auf einem Fleck konzentrieren sollen, um Rüstungen zu verbeulen (oder gar mit Stacheln und Schneidblättern zu durchdringen) und Knochen zu brechen. Die Maximallänge dieser Waffen ist etwa ein Schritt, das Maximalgewicht etwa drei Stein; alles darüber sind Zweihandwaffen." + } +} diff --git a/src/packs/__source/talente-brw/kampf/infanteriewaffen.json b/src/packs/__source/talente-brw/kampf/infanteriewaffen.json new file mode 100644 index 00000000..8b3d519b --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/infanteriewaffen.json @@ -0,0 +1,10 @@ +{ + "_id": "wdEpxGfiElaeZjYp", + "_key": "!items!wdEpxGfiElaeZjYp", + "type": "Skill", + "name": "Infanteriewaffen", + "system": { + "gruppe": "Kampf", + "talent": "Bei diesen Waffen ist eine kurze Klinge an einem langen Stiel befestigt, wobei die Klinge meist sowohl zum Hieb als auch zum Stich geeignet ist; bisweilen finden sich auch Haken an der Waffe, um Gegner umzureißen oder vom Pferd zu ziehen." + } +} diff --git a/src/packs/__source/talente-brw/kampf/kettenwaffen.json b/src/packs/__source/talente-brw/kampf/kettenwaffen.json new file mode 100644 index 00000000..80db77e3 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/kettenwaffen.json @@ -0,0 +1,10 @@ +{ + "_id": "uHBlf6uD6X7TSsHq", + "_key": "!items!uHBlf6uD6X7TSsHq", + "type": "Skill", + "name": "Kettenwaffen", + "system": { + "gruppe": "Kampf", + "talent": "Bei diesen Waffen ist eine Kugel oder ein anderes schweres Gewicht, meist noch mit Dornen oder Stacheln gespickt, am Ende einer Kette befestigt, deren Länge knapp unter der des Stiels ist, an dem sie befestigt ist. Es ist hinreichend schwierig, mit solchen Waffen zu parieren – aber es ist auch schwer, den Angriff einer solchen Waffe abzuwehren, da man mit ihr auch um Schilde herumschlagen und einen solchen Hieb insgesamt schwer abwehren kann. Ebenfalls mit diesem Talent geführt werden alle Geißeln (als Disziplinierungsinstrumente) und kurzen Peitschen mit mehreren beschwerten Enden (wie die ‘Neunschwänzige Katze’)." + } +} diff --git a/src/packs/__source/talente-brw/kampf/lanzenreiten.json b/src/packs/__source/talente-brw/kampf/lanzenreiten.json new file mode 100644 index 00000000..767b3b50 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/lanzenreiten.json @@ -0,0 +1,10 @@ +{ + "_id": "Jd5V9Hr74weHdgFY", + "_key": "!items!Jd5V9Hr74weHdgFY", + "type": "Skill", + "name": "Lanzenreiten", + "system": { + "gruppe": "Kampf", + "talent": "Dieses Talent stellt den Sturmangriff eines Berittenen mit eingelegter Lanze dar. Es ist ein reines Angriffstalent, das ähnlich wie Fernkampf-Fertigkeiten gehandhabt wird. Mit einer eingelegten Lanze ist es nicht möglich zu parieren." + } +} diff --git a/src/packs/__source/talente-brw/kampf/raufen.json b/src/packs/__source/talente-brw/kampf/raufen.json new file mode 100644 index 00000000..3885643a --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/raufen.json @@ -0,0 +1,10 @@ +{ + "_id": "tc4y62VM5L2eUpEo", + "_key": "!items!tc4y62VM5L2eUpEo", + "type": "Skill", + "name": "Raufen", + "system": { + "gruppe": "Kampf", + "talent": "Dies ist die Fertigkeit, durch Einsatz von Händen, Füßen und Zähnen Schaden anzurichten (womit Schwinger und Geraden, Krallenhiebe, Kopfstöße und Bisse, hochgezogene Knie und eingedrehte Sprungtrittealle unter dieses Talent fallen) oder diesem durch Blockieren, Auspendeln, Seitschritte etc. zu entgehen. Angriffe mit der bloßen Hand oder dem Fuß richten üblicherweise 1W6 TP(A) an: Diese Punkte werden von der Ausdauer abgezogen, die Hälfte zusätzlich noch von den Lebenspunkten." + } +} diff --git a/src/packs/__source/talente-brw/kampf/ringen.json b/src/packs/__source/talente-brw/kampf/ringen.json new file mode 100644 index 00000000..86d46b58 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/ringen.json @@ -0,0 +1,10 @@ +{ + "_id": "xOgxMG12yiBKeThB", + "_key": "!items!xOgxMG12yiBKeThB", + "type": "Skill", + "name": "Ringen", + "system": { + "gruppe": "Kampf", + "talent": "Hierunter fallen alle Techniken, mit dennen man einen Gegner ergreifen, festhalten, umklammern, niederringen oder zu Boden schleudern kann sowie die Verteidigungsmöglichkeiten dagegen, die vom einfachen Auspendeln bis zum aktiven Entwinden reichen (womit man sich z.B. auch aus der Umschlingung eines Kraken oder einer Schlange befreien kann). Ringen-Angriffe richten als Wurf 1W6 TP(A) an oder bringen den Gegner in eine ungünstige Position und erleichtern damit folgende Angriffe oder halten ihn fest; mehr hierzu siehe Seite 151. Für TP(A) gilt allgemein: Diese Punkte werden von der Ausdauer abgezogen, die Hälfte zusätzlich noch von den LeP." + } +} diff --git a/src/packs/__source/talente-brw/kampf/schwerter.json b/src/packs/__source/talente-brw/kampf/schwerter.json index 6c6f1814..bf05793a 100644 --- a/src/packs/__source/talente-brw/kampf/schwerter.json +++ b/src/packs/__source/talente-brw/kampf/schwerter.json @@ -5,6 +5,6 @@ "name": "Schwerter", "system": { "gruppe": "Kampf", - "talent": "" + "talent": "Hierbei handelt es sich um Klingenwaffen mit einer Gesamtlänge von einem halben bis eineinviertel Schritt, wovon die beidseitig geschliffene Klinge mindestens drei Viertel der Länge ausmacht. Schwerter sind zum Hauen und Stechen gedacht, ihre Parierstange erlaubt auch anspruchsvollere Verteidigungsmanöver." } } diff --git a/src/packs/__source/talente-brw/kampf/speere.json b/src/packs/__source/talente-brw/kampf/speere.json new file mode 100644 index 00000000..b5893173 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/speere.json @@ -0,0 +1,10 @@ +{ + "_id": "rI8REyd1RykEwrWG", + "_key": "!items!rI8REyd1RykEwrWG", + "type": "Skill", + "name": "Speere", + "system": { + "gruppe": "Kampf", + "talent": "Dies sind zum einen Waffen von max. 2 Schritt Länge, die üblicherweise einhändig und mit Schild geführt werden, zum anderen alle überlangen Speere, die ausschließlich zum zweihändigen Stoß geeignet sind und zu denen man nicht gleichzeitig Schilde führen kann. Kennzeichen eines Speers ist, dass er – im Gegensatz zu Infanteriewaffen – ausschließlich zum Stoß benutzt wird, während die Parade meist mit dem stumpfen Ende erfolgt (wenn man überhaupt mit dem Speer pariert, was bei den überlangen Waffen ohnehin kaum der Fall sein wird). Einhändige Speere können geworfen werden (zweihändige ebenso, aber meist mit einem wenig beeindruckenden Resultat)." + } +} diff --git a/src/packs/__source/talente-brw/kampf/stäbe.json b/src/packs/__source/talente-brw/kampf/stäbe.json new file mode 100644 index 00000000..31df1422 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/stäbe.json @@ -0,0 +1,10 @@ +{ + "_id": "FuqulqVN3mVDpZcP", + "_key": "!items!FuqulqVN3mVDpZcP", + "type": "Skill", + "name": "Stäbe", + "system": { + "gruppe": "Kampf", + "talent": "Ein einfacher Holzstab von etwa acht Spann Länge kann eine durchaus effektive Waffe sein, wenn sie von einem Meister ihres Fachs geführt wird – und meist sind Kampfstäbe keine ‘einfachen Holzwaffen’, sondern speziell gehärtet, mit Metallbändern umwunden oder gar mit Klingen an beiden Enden versehen. Stäbe sind zweihändig geführte Waffen; die gleichzeitige Benutzung eines Schildes ist nicht möglich." + } +} diff --git a/src/packs/__source/talente-brw/kampf/säbel.json b/src/packs/__source/talente-brw/kampf/säbel.json index 057d3833..a9db314f 100644 --- a/src/packs/__source/talente-brw/kampf/säbel.json +++ b/src/packs/__source/talente-brw/kampf/säbel.json @@ -1,10 +1,10 @@ { - "_id": "Msv0bWdwlNlF2etU", - "_key": "!items!Msv0bWdwlNlF2etU", + "_id": "P84aRNsfuMDTqiCT", + "_key": "!items!P84aRNsfuMDTqiCT", "type": "Skill", "name": "Säbel", "system": { "gruppe": "Kampf", - "talent": "" + "talent": "Im Gegensatz zu Schwertern werden diese Waffen vornehmlich zum Hieb, selten einmal zum Stich eingesetzt, und ebenfalls im Unterschied zu Schwertern haben sie meist nur eine Schneide (und eventuell eine ausgearbeitete Spitze). Diese Waffenkategorie reicht von kurzen Haumessern über elegante Reitersäbel bis hin zu schweren, fast schon axtähnlichen Waffen." } } diff --git a/src/packs/__source/talente-brw/kampf/wurfbeile.json b/src/packs/__source/talente-brw/kampf/wurfbeile.json new file mode 100644 index 00000000..8a169271 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/wurfbeile.json @@ -0,0 +1,10 @@ +{ + "_id": "RlZCxOXeawtewWi9", + "_key": "!items!RlZCxOXeawtewWi9", + "type": "Skill", + "name": "Wurfbeile", + "system": { + "gruppe": "Kampf", + "talent": "Diese vor allem bei Piraten wie den Thorwalern gebräuchliche Fernkampfwaffe ist schwierig zu handhaben, da sie während des Fluges um die Querachse rotiert. Die meisten Wurfäxte sind ‘scharf an allen Kanten’ und bestehen gänzlich aus Metall. Ebenfalls mit diesem Talent eingesetzt werden alle sich ebenfalls überschlagenden Wurfkolben und Wurfhölzer." + } +} diff --git a/src/packs/__source/talente-brw/kampf/wurfmesser.json b/src/packs/__source/talente-brw/kampf/wurfmesser.json new file mode 100644 index 00000000..b0c0b6ad --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/wurfmesser.json @@ -0,0 +1,10 @@ +{ + "_id": "Iwgq2pQyTm7j9dso", + "_key": "!items!Iwgq2pQyTm7j9dso", + "type": "Skill", + "name": "Wurfmesser", + "system": { + "gruppe": "Kampf", + "talent": "Messer und Dolche sind die am weitesten verbreiteten Wurfwaffen, aber nicht jedes Messer, jeder Dolch ist zum Werfen geeignet. Wurftauglich sind nur speziell ausgewogene Waffen, die meistens über einen besonders leichten Griff verfügen. Auch Wurfscheiben und -ringe fallen in diese Kategorie, ebenso wie Wurfpfeile und -dorne." + } +} diff --git a/src/packs/__source/talente-brw/kampf/wurfspeere.json b/src/packs/__source/talente-brw/kampf/wurfspeere.json new file mode 100644 index 00000000..5cb75a72 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/wurfspeere.json @@ -0,0 +1,10 @@ +{ + "_id": "JDyuelQrB5Baha1V", + "_key": "!items!JDyuelQrB5Baha1V", + "type": "Skill", + "name": "Wurfspeere", + "system": { + "gruppe": "Kampf", + "talent": "Der Wurfspeer ist eine bei allen Völkern gebräuchliche Jagdwaffe und wurde einst auch in größerem Umfang in den aventurischen Armeen eingesetzt. Es gibt Wurfspeere in verschiedenen Größen und auch solche, die mit kurzen Schleuderhölzern beschleunigt werden." + } +} diff --git a/src/packs/__source/talente-brw/kampf/zweihand-hiebwaffen.json b/src/packs/__source/talente-brw/kampf/zweihand-hiebwaffen.json new file mode 100644 index 00000000..637d048d --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/zweihand-hiebwaffen.json @@ -0,0 +1,10 @@ +{ + "_id": "EWlqFBI5ThyexcTs", + "_key": "!items!EWlqFBI5ThyexcTs", + "type": "Skill", + "name": "Zweihand-Hiebwaffen", + "system": { + "gruppe": "Kampf", + "talent": "Bei diesen Waffen kommt es darauf an, die schwere (und bisweilen scharfe) Schlagfläche mit großer Wucht punktgenau ins Ziel zu bringen, da der Stiel der Waffe kaum Schaden anrichtet; für Stiche und Stöße sind diese Waffen nicht geeignet, ebenso sind ihre Paradefähigkeiten stark eingeschränkt." + } +} diff --git a/src/packs/__source/talente-brw/kampf/zweihandschwerter-säbel.json b/src/packs/__source/talente-brw/kampf/zweihandschwerter-säbel.json new file mode 100644 index 00000000..a452afd9 --- /dev/null +++ b/src/packs/__source/talente-brw/kampf/zweihandschwerter-säbel.json @@ -0,0 +1,10 @@ +{ + "_id": "WfSR1wXjmWJcdMLo", + "_key": "!items!WfSR1wXjmWJcdMLo", + "type": "Skill", + "name": "Zweihandschwerter/-säbel", + "system": { + "gruppe": "Kampf", + "talent": "Unter dieses Talent fallen alle besonders langen Klingenwaffen, die in erster Linie zum Hieb gedacht sind, mit denen sich allerdings auch auf kürzere Distanz zustoßen lässt und mit denen auch Paraden noch angemessen möglich sind (auch wenn sämtliche Aktionen etwas langsamer vonstatten gehen als mit den universell einsetzbaren Anderthalbhändern, die ebenfalls in diese Kategorie fallen, da sie ähnlich eingesetzt werden)." + } +} diff --git a/src/style/_colours.scss b/src/style/_colours.scss index fcf39887..1c562ed0 100644 --- a/src/style/_colours.scss +++ b/src/style/_colours.scss @@ -11,12 +11,16 @@ $talent-knowledge-color: #d319ba; $talent-language-color: #573bbc; $talent-crafting-color: #ae6813; +$harm-fill-color: #ff0000ff; +$harm-border-color: #3c0000ff; + $tab-border-color: #333; $tab-color: #000; $tab-inactive-background-color: unset; $tab-background-color: #fff8; $dice-box-shadow: rgba(0, 0, 0, 0.25); +$pill-box-shadow: rgba(0, 0, 0, 0.3); $attribute-die-border-color: #000; $attribute-die-color: #F00; @@ -28,3 +32,9 @@ $rollable-die-border-color: #000; $dice-box-border-color: #333; +$default-action: #c41; +$default-action-color: #FFF; + +$special-action: #42c; + +$special-action-color: #FFF; diff --git a/src/style/_creature-sheet.scss b/src/style/_creature-sheet.scss new file mode 100644 index 00000000..45bf7f39 --- /dev/null +++ b/src/style/_creature-sheet.scss @@ -0,0 +1,171 @@ +@use "_colours" as colour; +@use 'sass:color'; +@use "_numbers"; + +.dsa41.sheet.actor.creature { + + .window-content { + + form { + + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 74px 30px 1fr; + + .sheet-header { + + height: 64px; + display: grid; + grid-template-columns: 64px max-content; + grid-template-rows: 1fr; + gap: 0 8px; + + img { + width: 64px; + height: 64px; + } + + input { + line-height: 64px; + height: 64px; + font-size: 2rem; + + } + + } + + .sheet-body { + .tab { + margin: 8px; + + height: 100%; + + div.input { + + height: 32px; + display: grid; + grid-template-columns: 120px 1fr; + + &.compound { + + grid-template-columns: 120px 140px 1fr; + + span { + width: 120px; + } + + + input { + width: 100px; + } + + } + + label { + height: 32px; + width: 100%; + + span { + width: 120px; + text-align: left; + line-height: 32px; + vertical-align: middle; + display: inline-block; + } + + input { + text-align: right; + line-height: 32px; + vertical-align: middle; + padding-left: 120px; + display: inline-block; + } + + } + + } + + table.attacks-table { + + td { + padding: 2px 4px; + } + } + + .rollable.tablecell { + position: relative; + + + .attacks-die { + width: 24px; + height: 24px; + position: absolute; + left: 4px; + top: 4px; + bottom: 2px; + z-index: 1; + + + svg { + stroke-width: 0.5; + + .border { + fill: colour.$harm-fill-color; + stroke: colour.$harm-border-color; + } + + .center { + fill: colour.$harm-fill-color; + stroke: colour.$harm-border-color; + } + + .topleft { + fill: color.adjust(colour.$harm-fill-color, $lightness: numbers.$lighter_factor); + stroke: colour.$harm-border-color; + } + .bottomleft { + fill: color.adjust(colour.$harm-fill-color, $lightness: numbers.$lightest_factor); + stroke: colour.$harm-border-color; + } + + .topright { + fill: color.adjust(colour.$harm-fill-color, $lightness: numbers.$darken_factor); + stroke: colour.$harm-border-color; + } + .bottomright, .bottom { + fill: color.adjust(colour.$harm-fill-color, $lightness: numbers.$darkest_factor); + stroke: colour.$harm-border-color; + } + } + + + } + + input { + position: absolute; + left: 16px; + top: 4px; + bottom: 2px; + right: 4px; + width: unset; + text-indent: 12px; + } + } + + .button-inline { + border: unset; + background: unset; + } + + .editor { + height: 100%; + } + + } + } + + } + } + +} + diff --git a/src/style/_equipment-sheet.scss b/src/style/_equipment-sheet.scss index 3ef907d3..07d9de43 100644 --- a/src/style/_equipment-sheet.scss +++ b/src/style/_equipment-sheet.scss @@ -1,3 +1,5 @@ +@use "./_colours"; +@use "./_numbers"; .app.window-app.dsa41.sheet.item.equipment { .sheet-body { @@ -20,7 +22,7 @@ grid-auto-columns: 1fr 1fr; grid-template-columns: 80px auto; grid-template-rows: 24px 48px auto 48px; - gap: 0px 0px; + gap: 0 0; grid-template-areas: "category category" "quantity name" @@ -114,7 +116,7 @@ line-height: 24px; vertical-align: middle; padding: 0 8px; - box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); + box-shadow: numbers.$pill-box-inset numbers.$pill-box-inset numbers.$pill-box-blur-radius colours.$pill-box-shadow; } } diff --git a/src/style/_numbers.scss b/src/style/_numbers.scss index 9ede7a57..6781ec4b 100644 --- a/src/style/_numbers.scss +++ b/src/style/_numbers.scss @@ -13,4 +13,7 @@ $die-border-width: 1px; $dice-box-inset: 4px; $dice-box-blur-radius: 4px; -$dice-box-border-width: 1px; \ No newline at end of file +$dice-box-border-width: 1px; + +$pill-box-inset: 2px; +$pill-box-blur-radius: 4px; diff --git a/src/style/_player-action.scss b/src/style/_player-action.scss new file mode 100644 index 00000000..7655c8dd --- /dev/null +++ b/src/style/_player-action.scss @@ -0,0 +1,26 @@ +@use "./_colours"; +@use "./_numbers"; +@use "sass:color"; + +.player-action { + + display: inline-block; + width: 120px; + height: 80px; + float: left; + margin: 0 8px 8px 0; + + border: 1px solid #333; + background-color: color.scale(colours.$default-action, $alpha: 20%); + color: colours.$default-action-color; + border-radius: 4px; + box-shadow: numbers.$pill-box-inset numbers.$pill-box-inset numbers.$pill-box-blur-radius colours.$pill-box-shadow; + + + &.special-ability { + background-color: color.scale(colours.$special-action, $alpha: 20%); + color: colours.$special-action-color; + + } + +} diff --git a/src/style/_rollable.scss b/src/style/_rollable.scss index 0516e708..b062425e 100644 --- a/src/style/_rollable.scss +++ b/src/style/_rollable.scss @@ -205,4 +205,3 @@ $rollable_colours: ( @include coloring("Wissen"); @include coloring("Sprachen"); @include coloring("Handwerk"); - diff --git a/src/style/_tabs.scss b/src/style/_tabs.scss index a044082a..7f872530 100644 --- a/src/style/_tabs.scss +++ b/src/style/_tabs.scss @@ -10,6 +10,7 @@ display: flow; border-top: unset; border-bottom: unset; + margin-bottom: 9px; a.item[data-tab] { diff --git a/src/style/styles.scss b/src/style/styles.scss index 0810ee93..7f4dbfbe 100644 --- a/src/style/styles.scss +++ b/src/style/styles.scss @@ -7,3 +7,5 @@ @use "_tabs"; @use "_equipment-sheet"; @use "_paperdoll"; +@use "_creature-sheet"; +@use "_player-action"; diff --git a/src/templates/actor/actor-character-sheet.hbs b/src/templates/actor/actor-character-sheet.hbs index 16a9d356..5206e291 100644 --- a/src/templates/actor/actor-character-sheet.hbs +++ b/src/templates/actor/actor-character-sheet.hbs @@ -105,6 +105,12 @@ +