17 Commits

Author SHA1 Message Date
Sven Balzer b6b0411473 add anzahl to Gegenstaende 2025-11-09 12:44:37 +01:00
Sven Balzer bf5a3fa06b invert modifikator for talente 2025-10-24 00:39:32 +02:00
Sven Balzer f1fff6b6ba fix BE of some Talente 2025-10-18 20:11:44 +02:00
Sven Balzer 716d5b0413 add Anmerkung field to Attacke and Parade dialogs 2025-10-06 08:35:50 +02:00
Sven Balzer e320c2f9ac fix for zauber that do not take magieresistenz into account 2025-10-05 19:17:33 +02:00
Sven Balzer 80e6e1ad43 layout simplification 2025-09-23 00:18:08 +02:00
Sven Balzer 8c4dca3eed add slight color change for every other list item 2025-09-11 13:49:08 +02:00
Sven Balzer aa3a3e633d add different hover background color for list items 2025-09-11 13:24:54 +02:00
Sven Balzer e14506998f add display for Magische Sonderfertigkeiten 2025-09-11 13:16:48 +02:00
Sven Balzer e4067d46a3 Fix Singen talent in compendium 2025-09-09 13:01:27 +02:00
Sven Balzer 39c3f90240 fix broken sorting for talente 2025-09-07 08:29:44 +02:00
Sven Balzer e338b79d3a add Wunden 2025-08-04 10:05:42 +02:00
Sven Balzer 60036fc37f remove extraneous div in ActorSheet biography tab 2025-07-26 06:00:50 +02:00
Sven Balzer ae3e9a2fb9 Allow Kampftalente to be deleted from ActorSheet 2025-07-26 00:28:03 +02:00
Sven Balzer 2468c83e86 make .scroll-container persist scrolling through re-renders 2025-06-24 21:01:36 +02:00
Sven Balzer 44500ad6d7 add effects of low hp on rolls 2025-06-03 14:25:07 +02:00
Sven Balzer df484039a5 add Parierwaffen to Bewaffnungen compendium 2025-06-03 13:48:35 +02:00
33 changed files with 612 additions and 189 deletions
+88 -20
View File
@@ -92,9 +92,6 @@
</div> </div>
</div> </div>
<div>
</div>
<div> <div>
<div class="center">{{localize "DSA41.allgemein.biografie"}}</div> <div class="center">{{localize "DSA41.allgemein.biografie"}}</div>
{{DSA41_input "system.allgemein.biografie" elementType="prose-mirror"}} {{DSA41_input "system.allgemein.biografie" elementType="prose-mirror"}}
@@ -337,6 +334,7 @@
{{else}} {{else}}
<div></div> <div></div>
{{/if}} {{/if}}
<div class="center fas fa-trash" data-action="item-delete"></div>
</div> </div>
{{/each}} {{/each}}
</div> </div>
@@ -359,6 +357,7 @@
<div>{{localize "DSA41.inventar.bewaffnung"}}</div> <div>{{localize "DSA41.inventar.bewaffnung"}}</div>
<div></div> <div></div>
<div></div> <div></div>
<div></div>
<div class="center">{{localize "DSA41.weight.label"}}</div> <div class="center">{{localize "DSA41.weight.label"}}</div>
<div></div> <div></div>
</div> </div>
@@ -382,6 +381,7 @@
</div> </div>
</div> </div>
<div></div> <div></div>
<div></div>
<div class="center fas fa-sword" data-action="toggle_equipped" data-equipped="{{system.angelegt}}"></div> <div class="center fas fa-sword" data-action="toggle_equipped" data-equipped="{{system.angelegt}}"></div>
<div class="center">{{this.system.gewicht.value}} {{localize (concat "DSA41.weight." this.system.gewicht.unit)}}</div> <div class="center">{{this.system.gewicht.value}} {{localize (concat "DSA41.weight." this.system.gewicht.unit)}}</div>
<div class="center fas fa-trash" data-action="item-delete"></div> <div class="center fas fa-trash" data-action="item-delete"></div>
@@ -394,7 +394,9 @@
<div class="row">{{localize "DSA41.inventar.ruestungen"}}</div> <div class="row">{{localize "DSA41.inventar.ruestungen"}}</div>
<div></div> <div></div>
<div></div> <div></div>
<div></div>
<div class="center">{{localize "DSA41.weight.label"}}</div> <div class="center">{{localize "DSA41.weight.label"}}</div>
<div></div>
</div> </div>
{{#unless (ne actor.itemTypes.Ruestung.length 0)}} {{#unless (ne actor.itemTypes.Ruestung.length 0)}}
@@ -408,6 +410,7 @@
<span class="center">{{this.name}}</span> <span class="center">{{this.name}}</span>
</div> </div>
<div></div> <div></div>
<div></div>
<div class="center fas fa-shield-halved" data-action="toggle_equipped" data-equipped="{{system.angelegt}}"></div> <div class="center fas fa-shield-halved" data-action="toggle_equipped" data-equipped="{{system.angelegt}}"></div>
<div class="center">{{this.system.gewicht.value}} {{localize (concat "DSA41.weight." this.system.gewicht.unit)}}</div> <div class="center">{{this.system.gewicht.value}} {{localize (concat "DSA41.weight." this.system.gewicht.unit)}}</div>
<div class="center fas fa-trash" data-action="item-delete"></div> <div class="center fas fa-trash" data-action="item-delete"></div>
@@ -419,8 +422,10 @@
<div class="list-header"> <div class="list-header">
<div>{{localize "DSA41.inventar.gegenstaende"}}</div> <div>{{localize "DSA41.inventar.gegenstaende"}}</div>
<div></div> <div></div>
<div class="center">{{localize "DSA41.inventar.anzahl"}}</div>
<div></div> <div></div>
<div class="center">{{localize "DSA41.weight.label"}}</div> <div class="center">{{localize "DSA41.weight.label"}}</div>
<div></div>
</div> </div>
{{#unless (ne actor.itemTypes.Gegenstand.length 0)}} {{#unless (ne actor.itemTypes.Gegenstand.length 0)}}
@@ -434,8 +439,9 @@
<span class="center">{{this.name}}</span> <span class="center">{{this.name}}</span>
</div> </div>
<div></div> <div></div>
<div class="center anzahl">{{>editable-input type="number" size=(string-length system.anzahl) data-name="system.anzahl" value=system.anzahl}}</div>
<div></div> <div></div>
<div class="center">{{this.system.gewicht.value}} {{localize (concat "DSA41.weight." this.system.gewicht.unit)}}</div> <div class="center">{{mul this.system.gewicht.value this.system.anzahl}} {{localize (concat "DSA41.weight." this.system.gewicht.unit)}}</div>
<div class="center fas fa-trash" data-action="item-delete"></div> <div class="center fas fa-trash" data-action="item-delete"></div>
</div> </div>
{{/each}} {{/each}}
@@ -443,6 +449,46 @@
</div> </div>
<div class="tab Kampf {{#if (eq tabGroups.primary 'kampf')}}active{{/if}}" data-group="primary" data-tab="kampf"> <div class="tab Kampf {{#if (eq tabGroups.primary 'kampf')}}active{{/if}}" data-group="primary" data-tab="kampf">
<div class="list Wunden">
<div class="list-header">
<div>{{localize "DSA41.kampf.wunden.label"}}</div>
</div>
{{#*inline "wunden"}}
<div class="center" data-location="{{location}}">
<img class="wunde{{#if (gte (lookup @root.actor.system.wunden location) 1)}} active{{/if}}" data-action="toggle-wound">
<img class="wunde{{#if (gte (lookup @root.actor.system.wunden location) 2)}} active{{/if}}" data-action="toggle-wound">
<img class="wunde{{#if (gte (lookup @root.actor.system.wunden location) 3)}} active{{/if}}" data-action="toggle-wound">
</div>
{{/inline}}
<div class="list-item">
<div>{{localize "DSA41.kampf.wunden.kopf"}}</div>
{{>wunden location="kopf"}}
<div>{{localize "DSA41.kampf.wunden.brust"}}</div>
{{>wunden location="brust"}}
</div>
<div class="list-item">
<div>{{localize "DSA41.kampf.wunden.bauch"}}</div>
{{>wunden location="bauch"}}
</div>
<div class="list-item">
<div>{{localize "DSA41.kampf.wunden.linker_arm"}}</div>
{{>wunden location="linker_arm"}}
<div>{{localize "DSA41.kampf.wunden.rechter_arm"}}</div>
{{>wunden location="rechter_arm"}}
</div>
<div class="list-item">
<div>{{localize "DSA41.kampf.wunden.linkes_bein"}}</div>
{{>wunden location="linkes_bein"}}
<div>{{localize "DSA41.kampf.wunden.rechtes_bein"}}</div>
{{>wunden location="rechtes_bein"}}
</div>
</div>
<div class="list Bewaffnung"> <div class="list Bewaffnung">
<div class="list-header "> <div class="list-header ">
<div>{{localize "DSA41.kampf.bewaffnung"}}</div> <div>{{localize "DSA41.kampf.bewaffnung"}}</div>
@@ -542,25 +588,25 @@
</div> </div>
<div class="list Sonderfertigkeiten"> <div class="list Sonderfertigkeiten">
<div class="list-header"> <div class="list-header">
<div>{{localize (concat "DSA41.sonderfertigkeiten.label_kampf")}}</div> <div>{{localize (concat "DSA41.sonderfertigkeiten.label_kampf")}}</div>
</div> </div>
{{#unless (ne actor.system.computed.num_kampf_sonderfertigkeiten 0)}} {{#unless (ne actor.system.computed.num_kampf_sonderfertigkeiten 0)}}
<div class="list-item">{{localize "DSA41.list_empty"}}</div> <div class="list-item">{{localize "DSA41.list_empty"}}</div>
{{/unless}} {{/unless}}
{{#each actor.itemTypes.Sonderfertigkeit}} {{#each actor.itemTypes.Sonderfertigkeit}}
{{#if (eq this.system.kategorie "kampf")}} {{#if (eq this.system.kategorie "kampf")}}
<div class="list-item" data-item-id="{{_id}}"> <div class="list-item" data-item-id="{{_id}}">
<div> <div>
<div class="fit-content" data-action="item-open" data-tooltip="{{this.system.beschreibung}}">{{maybeLocalize name prefix=(concat "DSA41.sonderfertigkeiten." system.kategorie ".name")}}</div> <div class="fit-content" data-action="item-open" data-tooltip="{{this.system.beschreibung}}">{{maybeLocalize name prefix=(concat "DSA41.sonderfertigkeiten." system.kategorie ".name")}}</div>
</div>
<div></div>
<div class="center fas fa-trash" data-action="item-delete"></div>
</div> </div>
{{/if}} <div></div>
{{/each}} <div class="center fas fa-trash" data-action="item-delete"></div>
</div>
{{/if}}
{{/each}}
</div> </div>
</div> </div>
@@ -599,6 +645,28 @@
</div> </div>
{{/each}} {{/each}}
</div> </div>
<div class="list Sonderfertigkeiten">
<div class="list-header">
<div>{{localize (concat "DSA41.sonderfertigkeiten.label_magisch")}}</div>
</div>
{{#unless (ne actor.system.computed.num_magische_sonderfertigkeiten 0)}}
<div class="list-item">{{localize "DSA41.list_empty"}}</div>
{{/unless}}
{{#each actor.itemTypes.Sonderfertigkeit}}
{{#if (eq this.system.kategorie "magisch")}}
<div class="list-item" data-item-id="{{_id}}">
<div>
<div class="fit-content" data-action="item-open" data-tooltip="{{this.system.beschreibung}}">{{maybeLocalize name prefix=(concat "DSA41.sonderfertigkeiten." system.kategorie ".name")}}</div>
</div>
<div></div>
<div class="center fas fa-trash" data-action="item-delete"></div>
</div>
{{/if}}
{{/each}}
</div>
</div> </div>
</div> </div>
</div> </div>
+3
View File
@@ -2,6 +2,9 @@
<span class="colspan2">{{localize "DSA41.kampf.modifikator"}}</span> <span class="colspan2">{{localize "DSA41.kampf.modifikator"}}</span>
<input class="colspan2" type="number" name="modifikator" value="{{lookup formData "modifikator"}}"> <input class="colspan2" type="number" name="modifikator" value="{{lookup formData "modifikator"}}">
<span class="colspan2">{{localize "DSA41.kampf.anmerkung"}}</span>
<input class="colspan2" type="text" name="anmerkung" value="{{lookup formData "anmerkung"}}">
<div class="dsa41-calculation colspan4 center"> <div class="dsa41-calculation colspan4 center">
<ruby>{{options.item.basis_attacke}}<rt>{{localize "DSA41.bewaffnung.nahkampfwaffe.basis"}}</rt></ruby> <ruby>{{options.item.basis_attacke}}<rt>{{localize "DSA41.bewaffnung.nahkampfwaffe.basis"}}</rt></ruby>
+3
View File
@@ -5,6 +5,9 @@
<span>{{localize "DSA41.kampf.crit"}}</span> <span>{{localize "DSA41.kampf.crit"}}</span>
<input class="center" type="checkbox" name="crit" {{checked (lookup formData "crit")}}> <input class="center" type="checkbox" name="crit" {{checked (lookup formData "crit")}}>
<span>{{localize "DSA41.kampf.anmerkung"}}</span>
<input type="text" name="anmerkung" value="{{lookup formData "anmerkung"}}">
<div class="dsa41-calculation colspan4 center"> <div class="dsa41-calculation colspan4 center">
{{#if formData.crit}}({{/if}} {{#if formData.crit}}({{/if}}
<ruby>{{options.item.basis_parade}}<rt>{{localize "DSA41.bewaffnung.nahkampfwaffe.basis"}}</rt></ruby> <ruby>{{options.item.basis_parade}}<rt>{{localize "DSA41.bewaffnung.nahkampfwaffe.basis"}}</rt></ruby>
+1 -1
View File
@@ -2,7 +2,7 @@
{{#if (eq type "checkbox")}} {{#if (eq type "checkbox")}}
<input type="checkbox" name="{{name}}" {{#if data-name}}data-name="{{data-name}}"{{/if}} {{checked value}}> <input type="checkbox" name="{{name}}" {{#if data-name}}data-name="{{data-name}}"{{/if}} {{checked value}}>
{{else}} {{else}}
<input type="{{type}}" name="{{name}}" {{#if data-name}}data-name="{{data-name}}"{{/if}} value="{{value}}" placeholder="{{placeholder}}"> <input type="{{type}}" name="{{name}}" {{#if data-name}}data-name="{{data-name}}"{{/if}} {{#if size}}size="{{size}}"{{/if}} value="{{value}}" placeholder="{{placeholder}}">
{{/if}} {{/if}}
{{#if placeholder}} {{#if placeholder}}
+97 -97
View File
@@ -1,4 +1,4 @@
<div class="Bewaffnung {{ cssClass }}"> <div>
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img"> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img">
<div class="col"> <div class="col">
@@ -28,103 +28,103 @@
</div> </div>
</nav> </nav>
<div class="tab {{#if (eq tabGroups.primary 'tab1')}}active{{/if}}" data-group="primary" data-tab="tab1">
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.trefferpunkte"}}</span>
<div class="grid3 center">
{{DSA41_input "system.nahkampfwaffe.basis" subtitle="DSA41.bewaffnung.nahkampfwaffe.basis"}}
{{DSA41_input "system.nahkampfwaffe.schwellenwert" subtitle="DSA41.bewaffnung.nahkampfwaffe.schwellenwert"}}
{{DSA41_input "system.nahkampfwaffe.schadensschritte" subtitle="DSA41.bewaffnung.nahkampfwaffe.schadensschritte"}}
</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.modifikator"}}</span>
<div class="grid2">
{{DSA41_input "system.nahkampfwaffe.modifikator_attacke" subtitle="DSA41.bewaffnung.nahkampfwaffe.attacke"}}
{{DSA41_input "system.nahkampfwaffe.modifikator_parade" subtitle="DSA41.bewaffnung.nahkampfwaffe.parade"}}
</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.initiative"}}</span>
<div>{{DSA41_input "system.nahkampfwaffe.initiative"}}</div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
<div>{{DSA41_input "system.nahkampfwaffe.bruchfaktor"}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.distanzklasse"}}</span>
<div>{{DSA41_input "system.nahkampfwaffe.distanzklasse"}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.kampftalente"}}</span>
<div>{{DSA41_input "system.nahkampfwaffe.kampftalente"}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.laenge"}}</span>
<div>{{DSA41_input "system.nahkampfwaffe.laenge"}}</div>
<div class="colspan2"></div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.zweihaendig"}}</span>
<div>{{DSA41_input "system.nahkampfwaffe.zweihaendig"}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.werfbar"}}</span>
<div>{{DSA41_input "system.nahkampfwaffe.werfbar"}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.improvisiert"}}</span>
<div>{{DSA41_input "system.nahkampfwaffe.improvisiert"}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.priviligiert"}}</span>
<div>{{DSA41_input "system.nahkampfwaffe.priviligiert"}}</div>
</div>
<div class="tab {{#if (eq tabGroups.primary 'tab2')}}active{{/if}}" data-group="primary" data-tab="tab2">
<span>{{localize "DSA41.bewaffnung.parierwaffe.initiative"}}</span>
<div>{{DSA41_input "system.parierwaffe.initiative"}}</div>
<span>{{localize "DSA41.bewaffnung.parierwaffe.modifikator"}}</span>
<div class="grid2">
{{DSA41_input "system.parierwaffe.modifikator_attacke" subtitle="DSA41.bewaffnung.parierwaffe.attacke"}}
{{DSA41_input "system.parierwaffe.modifikator_parade" subtitle="DSA41.bewaffnung.parierwaffe.parade"}}
</div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
<div>{{DSA41_input "system.parierwaffe.bruchfaktor"}}</div>
</div>
<div class="tab {{#if (eq tabGroups.primary 'tab3')}}active{{/if}}" data-group="primary" data-tab="tab3">
<span>{{localize "DSA41.bewaffnung.schild.groesse.label"}}</span>
{{DSA41_input "system.schild.groesse"}}
<span>{{localize "DSA41.bewaffnung.schild.modifikator"}}</span>
<div class="grid2">
{{DSA41_input "system.schild.modifikator_attacke" subtitle="DSA41.bewaffnung.schild.attacke"}}
{{DSA41_input "system.schild.modifikator_parade" subtitle="DSA41.bewaffnung.schild.parade"}}
</div>
<span>{{localize "DSA41.bewaffnung.schild.initiative"}}</span>
<div>{{DSA41_input "system.schild.initiative"}}</div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
<div>{{DSA41_input "system.schild.bruchfaktor"}}</div>
</div>
<div class="tab {{#if (eq tabGroups.primary 'tab4')}}active{{/if}}" data-group="primary" data-tab="tab4">
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.trefferpunkte"}}</span>
<div class="center">{{DSA41_input "system.fernkampfwaffe.basis"}}</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.laden"}}</span>
<div>{{DSA41_input "system.fernkampfwaffe.laden"}}</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.munitionskosten"}}</span>
<div>{{DSA41_input "system.fernkampfwaffe.munitionskosten"}}</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.munitionsgewicht"}}</span>
<div>{{DSA41_input "system.fernkampfwaffe.munitionsgewicht"}}</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.reichweiten"}}</span>
<div class="colspan3 grid5">
{{DSA41_input "system.fernkampfwaffe.reichweite1"}}
{{DSA41_input "system.fernkampfwaffe.reichweite2"}}
{{DSA41_input "system.fernkampfwaffe.reichweite3"}}
{{DSA41_input "system.fernkampfwaffe.reichweite4"}}
{{DSA41_input "system.fernkampfwaffe.reichweite5"}}
</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.modifikator"}}</span>
<div class="row colspan3 grid5">
{{DSA41_input "system.fernkampfwaffe.modifikator1"}}
{{DSA41_input "system.fernkampfwaffe.modifikator2"}}
{{DSA41_input "system.fernkampfwaffe.modifikator3"}}
{{DSA41_input "system.fernkampfwaffe.modifikator4"}}
{{DSA41_input "system.fernkampfwaffe.modifikator5"}}
</div>
</div>
<div> <div>
<div class="tab {{#if (eq tabGroups.primary 'tab1')}}active{{/if}}" data-group="primary" data-tab="tab1">
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.trefferpunkte"}}</span>
<div class="grid3 center">
{{DSA41_input "system.nahkampfwaffe.basis" subtitle="DSA41.bewaffnung.nahkampfwaffe.basis"}}
{{DSA41_input "system.nahkampfwaffe.schwellenwert" subtitle="DSA41.bewaffnung.nahkampfwaffe.schwellenwert"}}
{{DSA41_input "system.nahkampfwaffe.schadensschritte" subtitle="DSA41.bewaffnung.nahkampfwaffe.schadensschritte"}}
</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.modifikator"}}</span>
<div class="grid2">
{{DSA41_input "system.nahkampfwaffe.modifikator_attacke" subtitle="DSA41.bewaffnung.nahkampfwaffe.attacke"}}
{{DSA41_input "system.nahkampfwaffe.modifikator_parade" subtitle="DSA41.bewaffnung.nahkampfwaffe.parade"}}
</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.initiative"}}</span>
{{DSA41_input "system.nahkampfwaffe.initiative"}}
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
{{DSA41_input "system.nahkampfwaffe.bruchfaktor"}}
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.distanzklasse"}}</span>
{{DSA41_input "system.nahkampfwaffe.distanzklasse"}}
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.kampftalente"}}</span>
{{DSA41_input "system.nahkampfwaffe.kampftalente"}}
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.laenge"}}</span>
{{DSA41_input "system.nahkampfwaffe.laenge"}}
<div class="colspan2"></div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.zweihaendig"}}</span>
{{DSA41_input "system.nahkampfwaffe.zweihaendig"}}
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.werfbar"}}</span>
{{DSA41_input "system.nahkampfwaffe.werfbar"}}
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.improvisiert"}}</span>
{{DSA41_input "system.nahkampfwaffe.improvisiert"}}
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.priviligiert"}}</span>
{{DSA41_input "system.nahkampfwaffe.priviligiert"}}
</div>
<div class="tab {{#if (eq tabGroups.primary 'tab2')}}active{{/if}}" data-group="primary" data-tab="tab2">
<span>{{localize "DSA41.bewaffnung.parierwaffe.initiative"}}</span>
{{DSA41_input "system.parierwaffe.initiative"}}
<span>{{localize "DSA41.bewaffnung.parierwaffe.modifikator"}}</span>
<div class="grid2">
{{DSA41_input "system.parierwaffe.modifikator_attacke" subtitle="DSA41.bewaffnung.parierwaffe.attacke"}}
{{DSA41_input "system.parierwaffe.modifikator_parade" subtitle="DSA41.bewaffnung.parierwaffe.parade"}}
</div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
{{DSA41_input "system.parierwaffe.bruchfaktor"}}
</div>
<div class="tab {{#if (eq tabGroups.primary 'tab3')}}active{{/if}}" data-group="primary" data-tab="tab3">
<span>{{localize "DSA41.bewaffnung.schild.groesse.label"}}</span>
{{DSA41_input "system.schild.groesse"}}
<span>{{localize "DSA41.bewaffnung.schild.modifikator"}}</span>
<div class="grid2">
{{DSA41_input "system.schild.modifikator_attacke" subtitle="DSA41.bewaffnung.schild.attacke"}}
{{DSA41_input "system.schild.modifikator_parade" subtitle="DSA41.bewaffnung.schild.parade"}}
</div>
<span>{{localize "DSA41.bewaffnung.schild.initiative"}}</span>
{{DSA41_input "system.schild.initiative"}}
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
{{DSA41_input "system.schild.bruchfaktor"}}
</div>
<div class="tab {{#if (eq tabGroups.primary 'tab4')}}active{{/if}}" data-group="primary" data-tab="tab4">
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.trefferpunkte"}}</span>
<div class="center">{{DSA41_input "system.fernkampfwaffe.basis"}}</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.laden"}}</span>
{{DSA41_input "system.fernkampfwaffe.laden"}}
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.munitionskosten"}}</span>
{{DSA41_input "system.fernkampfwaffe.munitionskosten"}}
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.munitionsgewicht"}}</span>
{{DSA41_input "system.fernkampfwaffe.munitionsgewicht"}}
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.reichweiten"}}</span>
<div class="colspan3 grid5">
{{DSA41_input "system.fernkampfwaffe.reichweite1"}}
{{DSA41_input "system.fernkampfwaffe.reichweite2"}}
{{DSA41_input "system.fernkampfwaffe.reichweite3"}}
{{DSA41_input "system.fernkampfwaffe.reichweite4"}}
{{DSA41_input "system.fernkampfwaffe.reichweite5"}}
</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.modifikator"}}</span>
<div class="row colspan3 grid5">
{{DSA41_input "system.fernkampfwaffe.modifikator1"}}
{{DSA41_input "system.fernkampfwaffe.modifikator2"}}
{{DSA41_input "system.fernkampfwaffe.modifikator3"}}
{{DSA41_input "system.fernkampfwaffe.modifikator4"}}
{{DSA41_input "system.fernkampfwaffe.modifikator5"}}
</div>
</div>
{{DSA41_input "system.beschreibung" elementType="prose-mirror"}} {{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
</div> </div>
</div> </div>
+2 -5
View File
@@ -1,4 +1,4 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off"> <div>
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img"> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img">
<div class="col"> <div class="col">
@@ -9,8 +9,5 @@
</div> </div>
</div> </div>
</div> </div>
{{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
<div>
{{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
</div>
</div> </div>
+2 -4
View File
@@ -1,4 +1,4 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off"> <div>
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img"> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img">
<div class="col"> <div class="col">
@@ -12,7 +12,5 @@
</div> </div>
</div> </div>
</div> </div>
<div> {{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
{{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
</div>
</div> </div>
+12 -14
View File
@@ -1,4 +1,4 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off"> <div>
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img"> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img">
<div class="col"> <div class="col">
@@ -12,32 +12,30 @@
<div class="tab active"> <div class="tab active">
<span>{{localize "DSA41.ruestungen.kopf"}}</span> <span>{{localize "DSA41.ruestungen.kopf"}}</span>
<div>{{DSA41_input "system.kopf"}}</div> {{DSA41_input "system.kopf"}}
<span>{{localize "DSA41.ruestungen.brust"}}</span> <span>{{localize "DSA41.ruestungen.brust"}}</span>
<div>{{DSA41_input "system.brust"}}</div> {{DSA41_input "system.brust"}}
<span>{{localize "DSA41.ruestungen.ruecken"}}</span> <span>{{localize "DSA41.ruestungen.ruecken"}}</span>
<div>{{DSA41_input "system.ruecken"}}</div> {{DSA41_input "system.ruecken"}}
<span>{{localize "DSA41.ruestungen.bauch"}}</span> <span>{{localize "DSA41.ruestungen.bauch"}}</span>
<div>{{DSA41_input "system.bauch"}}</div> {{DSA41_input "system.bauch"}}
<span>{{localize "DSA41.ruestungen.linker_arm"}}</span> <span>{{localize "DSA41.ruestungen.linker_arm"}}</span>
<div>{{DSA41_input "system.linker_arm"}}</div> {{DSA41_input "system.linker_arm"}}
<span>{{localize "DSA41.ruestungen.rechter_arm"}}</span> <span>{{localize "DSA41.ruestungen.rechter_arm"}}</span>
<div>{{DSA41_input "system.rechter_arm"}}</div> {{DSA41_input "system.rechter_arm"}}
<span>{{localize "DSA41.ruestungen.linkes_bein"}}</span> <span>{{localize "DSA41.ruestungen.linkes_bein"}}</span>
<div>{{DSA41_input "system.linkes_bein"}}</div> {{DSA41_input "system.linkes_bein"}}
<span>{{localize "DSA41.ruestungen.rechtes_bein"}}</span> <span>{{localize "DSA41.ruestungen.rechtes_bein"}}</span>
<div>{{DSA41_input "system.rechtes_bein"}}</div> {{DSA41_input "system.rechtes_bein"}}
<span>{{localize "DSA41.ruestungen.gesamt_ruestungsschutz"}}</span> <span>{{localize "DSA41.ruestungen.gesamt_ruestungsschutz"}}</span>
<div>{{DSA41_input "system.gesamt_ruestungsschutz"}}</div> {{DSA41_input "system.gesamt_ruestungsschutz"}}
<span>{{localize "DSA41.ruestungen.gesamt_behinderung"}}</span> <span>{{localize "DSA41.ruestungen.gesamt_behinderung"}}</span>
<div>{{DSA41_input "system.gesamt_behinderung"}}</div> {{DSA41_input "system.gesamt_behinderung"}}
</div>
<div> {{DSA41_input "system.beschreibung" elementType="prose-mirror" classes="colspan-all"}}
{{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
</div> </div>
</div> </div>
+2 -4
View File
@@ -1,4 +1,4 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off"> <div>
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img"> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img">
<div class="col"> <div class="col">
@@ -12,7 +12,5 @@
</div> </div>
</div> </div>
</div> </div>
<div> {{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
{{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
</div>
</div> </div>
+2 -4
View File
@@ -1,4 +1,4 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off"> <div>
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img"> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img">
<div class="col"> <div class="col">
@@ -14,7 +14,5 @@
</div> </div>
</div> </div>
</div> </div>
<div> {{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
{{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
</div>
</div> </div>
+2 -4
View File
@@ -1,4 +1,4 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off"> <div>
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img"> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img">
<div class="col"> <div class="col">
@@ -11,7 +11,5 @@
</div> </div>
</div> </div>
</div> </div>
<div> {{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
{{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
</div>
</div> </div>
+2 -5
View File
@@ -1,4 +1,4 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off"> <div>
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img"> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" data-action="editImage" data-edit="img">
<div class="col"> <div class="col">
@@ -28,8 +28,5 @@
<span>{{localize "DSA41.zauber.label_magieresistenz"}}</span> <span>{{localize "DSA41.zauber.label_magieresistenz"}}</span>
{{DSA41_input "system.magieresistenz"}} {{DSA41_input "system.magieresistenz"}}
</div> </div>
{{DSA41_input "system.beschreibung" elementType="prose-mirror" classes="colspan-all"}}
<div>
{{DSA41_input "system.beschreibung" elementType="prose-mirror"}}
</div>
</div> </div>
+15 -1
View File
@@ -479,7 +479,8 @@
"inventar": { "inventar": {
"bewaffnung": "Bewaffnung", "bewaffnung": "Bewaffnung",
"ruestungen": "Rüstungen", "ruestungen": "Rüstungen",
"gegenstaende": "Gegenstände" "gegenstaende": "Gegenstände",
"anzahl": "Anzahl"
}, },
"kampf": { "kampf": {
@@ -491,6 +492,7 @@
"modifikator": "Modifikator", "modifikator": "Modifikator",
"crit": "Glückliche Attacke", "crit": "Glückliche Attacke",
"zauber": "Zauber", "zauber": "Zauber",
"anmerkung": "Anmerkung",
"zielgroesse": { "zielgroesse": {
"label": "Zielgröße", "label": "Zielgröße",
@@ -537,6 +539,18 @@
"still": "Still", "still": "Still",
"seitenwind": "Böiger Seitenwind", "seitenwind": "Böiger Seitenwind",
"starker_seitenwind": "Starker Seitenwind" "starker_seitenwind": "Starker Seitenwind"
},
"wunden": {
"label": "Wunden",
"kopf": "Kopf",
"brust": "Brust",
"bauch": "Bauch",
"linker_arm": "Linker Arm",
"rechter_arm": "Rechter Arm",
"linkes_bein": "Linkes Bein",
"rechtes_bein": "Rechtes Bein"
} }
}, },
+51 -2
View File
@@ -424,6 +424,14 @@ html {
border: none; border: none;
border-radius: 0px 0px 5px 5px; border-radius: 0px 0px 5px 5px;
} }
&:nth-child(odd) {
background: #272b33;
}
&:hover {
background: #3b404d;
}
} }
&.Dialog > .window-content { &.Dialog > .window-content {
@@ -575,12 +583,12 @@ html {
} }
& .Kampftalente { & .Kampftalente {
grid-template-columns: minmax(0, max-content) repeat(5, minmax(0, 1fr)); grid-template-columns: minmax(0, max-content) repeat(5, minmax(0, 1fr)) min-content;
} }
} }
&[data-tab="inventar"] { &[data-tab="inventar"] {
grid-template-columns: minmax(min-content, max-content) auto min-content minmax(min-content, max-content) min-content; grid-template-columns: minmax(min-content, max-content) auto max-content min-content minmax(min-content, max-content) min-content;
& > * { & > * {
grid-column: 1 / -1; grid-column: 1 / -1;
@@ -589,9 +597,46 @@ html {
& [data-equipped="false"] { & [data-equipped="false"] {
color: #464c5f; color: #464c5f;
} }
& .anzahl input {
background: transparent;
field-sizing: content;
}
} }
&[data-tab="kampf"] { &[data-tab="kampf"] {
& .Wunden {
grid-template-columns: minmax(0, max-content) minmax(0, 1fr) minmax(0, max-content) minmax(0, 1fr);
& .wunde {
display: inline;
width: 2em;
height: 2em;
margin: 0 .25em 0 .25em;
content: url("/icons/skills/wounds/injury-triple-slash-bleed.webp");
mix-blend-mode: difference;
&.active {
filter: grayscale(0.0);
&:hover, &:hover ~ .wunde.active {
filter: grayscale(0.75);
}
}
&:not(.active) {
filter: grayscale(1.0);
&:hover, &:has( ~ .wunde:hover) {
filter: grayscale(0.25);
}
}
}
}
& .Bewaffnung { & .Bewaffnung {
grid-template-columns: minmax(0, max-content) repeat(3, minmax(0, auto)); grid-template-columns: minmax(0, max-content) repeat(3, minmax(0, auto));
@@ -616,6 +661,10 @@ html {
& > * { & > * {
grid-column: 1 / -1; grid-column: 1 / -1;
} }
& .Sonderfertigkeiten {
grid-template-columns: minmax(min-content, max-content) auto min-content;
}
} }
} }
} }
+176 -22
View File
@@ -80,6 +80,18 @@ Hooks.once("init", async function() {
] ]
}); });
Handlebars.registerHelper({
"string-length": (value, options) => {
return value.toString().length;
}
});
Handlebars.registerHelper({
"mul": (a, b, options) => {
return a * b;
}
});
Handlebars.registerHelper({ Handlebars.registerHelper({
maybeLocalize: (value, options) => { maybeLocalize: (value, options) => {
const prefix = options.hash.prefix ? options.hash.prefix.string : null; const prefix = options.hash.prefix ? options.hash.prefix.string : null;
@@ -151,6 +163,10 @@ Hooks.once("init", async function() {
}); });
}); });
function string_compare(a, b) {
return a > b ? 1 : a < b ? -1 : 0;
}
function get_targeted_actors() { function get_targeted_actors() {
const targets = []; const targets = [];
@@ -505,6 +521,14 @@ class DSA41_CharacterDocument extends Actor {
return actor; return actor;
} }
get_hp_roll_modifier() {
if (this.system.lebenspunkte.aktuell < Math.round(this.system.computed.lebenspunkte.max / 4)) return 3;
if (this.system.lebenspunkte.aktuell < Math.round(this.system.computed.lebenspunkte.max / 3)) return 2;
if (this.system.lebenspunkte.aktuell < Math.round(this.system.computed.lebenspunkte.max / 2)) return 1;
return 0;
}
} }
class DSA41_CharacterData extends TypeDataModel { class DSA41_CharacterData extends TypeDataModel {
@@ -590,6 +614,16 @@ class DSA41_CharacterData extends TypeDataModel {
modifikator_attacke: new NumberField({integer: true, initial: 0}), modifikator_attacke: new NumberField({integer: true, initial: 0}),
modifikator_parade: new NumberField({integer: true, initial: 0}), modifikator_parade: new NumberField({integer: true, initial: 0}),
modifikator_fernkampf: new NumberField({integer: true, initial: 0}), modifikator_fernkampf: new NumberField({integer: true, initial: 0}),
wunden: new SchemaField({
kopf: new NumberField({integer: true, initial: 0, min: 0, max: 3 }),
brust: new NumberField({integer: true, initial: 0, min: 0, max: 3 }),
bauch: new NumberField({integer: true, initial: 0, min: 0, max: 3 }),
linker_arm: new NumberField({integer: true, initial: 0, min: 0, max: 3 }),
rechter_arm: new NumberField({integer: true, initial: 0, min: 0, max: 3 }),
linkes_bein: new NumberField({integer: true, initial: 0, min: 0, max: 3 }),
rechtes_bein: new NumberField({integer: true, initial: 0, min: 0, max: 3 }),
}),
} }
} }
@@ -604,6 +638,7 @@ class DSA41_CharacterData extends TypeDataModel {
num_nachteile: 0, num_nachteile: 0,
num_allgemeine_sonderfertigkeiten: 0, num_allgemeine_sonderfertigkeiten: 0,
num_kampf_sonderfertigkeiten: 0, num_kampf_sonderfertigkeiten: 0,
num_magische_sonderfertigkeiten: 0,
num_waffen: 0, num_waffen: 0,
num_fernkampf_waffen: 0, num_fernkampf_waffen: 0,
@@ -626,14 +661,97 @@ class DSA41_CharacterData extends TypeDataModel {
gesamt_behinderung: 0.0, gesamt_behinderung: 0.0,
}, },
}, },
wunden_modifiers: {
courage: 0,
cleverness: 0,
intuition: 0,
dexterity: 0,
agility: 0,
constitution: 0,
strength: 0,
initiative_basis: 0,
initiative: "",
attacke: 0,
parade: 0,
schaden: "",
},
}; };
if (this.wunden.kopf >= 1) {
this.computed.wunden_modifiers.courage += -2 * this.wunden.kopf;
this.computed.wunden_modifiers.cleverness += -2 * this.wunden.kopf;
this.computed.wunden_modifiers.intuition += -2 * this.wunden.kopf;
this.computed.wunden_modifiers.initiative_basis += -2 * this.wunden.kopf;
this.computed.wunden_modifiers.initiative += (-2 * this.wunden.kopf) + "d6";
if (this.wunden.kopf >= 3) this.computed.wunden_modifiers.schaden += "+ 2d6";
}
if (this.wunden.brust >= 1) {
this.computed.wunden_modifiers.attacke += -this.wunden.brust;
this.computed.wunden_modifiers.parade += -this.wunden.brust;
this.computed.wunden_modifiers.constitution += -this.wunden.brust;
this.computed.wunden_modifiers.strength += -this.wunden.brust;
this.computed.wunden_modifiers.schaden += "+" + this.wunden.brust + "d6";
}
if (this.wunden.bauch >= 1) {
this.computed.wunden_modifiers.attacke += -this.wunden.bauch;
this.computed.wunden_modifiers.parade += -this.wunden.bauch;
this.computed.wunden_modifiers.constitution += -this.wunden.bauch;
this.computed.wunden_modifiers.strength += -this.wunden.bauch;
this.computed.wunden_modifiers.initiative_basis += -this.wunden.bauch;
this.computed.wunden_modifiers.schaden += "+" + this.wunden.bauch + "d6";
}
if (this.wunden.linker_arm >= 1) {
this.computed.wunden_modifiers.attacke += -2 * this.wunden.linker_arm;
this.computed.wunden_modifiers.parade += -2 * this.wunden.linker_arm;
this.computed.wunden_modifiers.strength += -2 * this.wunden.linker_arm;
this.computed.wunden_modifiers.dexterity += -2 * this.wunden.linker_arm;
}
if (this.wunden.rechter_arm >= 1) {
this.computed.wunden_modifiers.attacke += -2 * this.wunden.rechter_arm;
this.computed.wunden_modifiers.parade += -2 * this.wunden.rechter_arm;
this.computed.wunden_modifiers.strength += -2 * this.wunden.rechter_arm;
this.computed.wunden_modifiers.dexterity += -2 * this.wunden.rechter_arm;
}
if (this.wunden.linkes_bein >= 1) {
this.computed.wunden_modifiers.attacke += -2 * this.wunden.linkes_bein;
this.computed.wunden_modifiers.parade += -2 * this.wunden.linkes_bein;
this.computed.wunden_modifiers.agility += -2 * this.wunden.linkes_bein;
this.computed.wunden_modifiers.initiative_basis += -2 * this.wunden.linkes_bein;
}
if (this.wunden.rechtes_bein >= 1) {
this.computed.wunden_modifiers.attacke += -2 * this.wunden.rechtes_bein;
this.computed.wunden_modifiers.parade += -2 * this.wunden.rechtes_bein;
this.computed.wunden_modifiers.agility += -2 * this.wunden.rechtes_bein;
this.computed.wunden_modifiers.initiative_basis += -2 * this.wunden.rechtes_bein;
}
this.computed.abenteuerpunkte.uebrig = this.abenteuerpunkte.gesamt - this.abenteuerpunkte.ausgegeben; this.computed.abenteuerpunkte.uebrig = this.abenteuerpunkte.gesamt - this.abenteuerpunkte.ausgegeben;
for (const [attribute, values] of Object.entries(this.attributes)) { this.computed.attributes_without_modifiers.courage = this.attributes.courage.initial + this.attributes.courage.advancement;
this.computed.attributes[attribute] = values.initial + values.advancement + values.modifier; this.computed.attributes_without_modifiers.cleverness = this.attributes.cleverness.initial + this.attributes.cleverness.advancement;
this.computed.attributes_without_modifiers[attribute] = values.initial + values.advancement; this.computed.attributes_without_modifiers.intuition = this.attributes.intuition.initial + this.attributes.intuition.advancement;
} this.computed.attributes_without_modifiers.charisma = this.attributes.charisma.initial + this.attributes.charisma.advancement;
this.computed.attributes_without_modifiers.dexterity = this.attributes.dexterity.initial + this.attributes.dexterity.advancement;
this.computed.attributes_without_modifiers.agility = this.attributes.agility.initial + this.attributes.agility.advancement;
this.computed.attributes_without_modifiers.constitution = this.attributes.constitution.initial + this.attributes.constitution.advancement;
this.computed.attributes_without_modifiers.strength = this.attributes.strength.initial + this.attributes.strength.advancement;
this.computed.attributes.courage = this.computed.attributes_without_modifiers.courage + this.attributes.courage.modifier + this.computed.wunden_modifiers.courage;
this.computed.attributes.cleverness = this.computed.attributes_without_modifiers.cleverness + this.attributes.cleverness.modifier + this.computed.wunden_modifiers.cleverness;
this.computed.attributes.intuition = this.computed.attributes_without_modifiers.intuition + this.attributes.intuition.modifier + this.computed.wunden_modifiers.intuition;
this.computed.attributes.charisma = this.computed.attributes_without_modifiers.charisma + this.attributes.charisma.modifier;
this.computed.attributes.dexterity = this.computed.attributes_without_modifiers.dexterity + this.attributes.dexterity.modifier + this.computed.wunden_modifiers.dexterity;
this.computed.attributes.agility = this.computed.attributes_without_modifiers.agility + this.attributes.agility.modifier + this.computed.wunden_modifiers.agility;
this.computed.attributes.constitution = this.computed.attributes_without_modifiers.constitution + this.attributes.constitution.modifier + this.computed.wunden_modifiers.constitution;
this.computed.attributes.strength = this.computed.attributes_without_modifiers.strength + this.attributes.strength.modifier + this.computed.wunden_modifiers.strength;
this.computed.lebenspunkte = {}; this.computed.lebenspunkte = {};
this.computed.ausdauer = {}; this.computed.ausdauer = {};
@@ -686,12 +804,12 @@ class DSA41_CharacterData extends TypeDataModel {
this.computed.kampf.ruestungen_gesamt[key] = Math.round(value); this.computed.kampf.ruestungen_gesamt[key] = Math.round(value);
} }
this.computed.initiative.wert = this.computed.initiative.basiswert + this.modifikator_initiative - this.computed.kampf.ruestungen_gesamt.gesamt_behinderung; this.computed.initiative.wert = this.computed.initiative.basiswert + this.modifikator_initiative - this.computed.kampf.ruestungen_gesamt.gesamt_behinderung + this.computed.wunden_modifiers.initiative_basis;
this.computed.attacke.wert = this.computed.attacke.basiswert + this.modifikator_attacke; this.computed.attacke.wert = this.computed.attacke.basiswert + this.modifikator_attacke + this.computed.wunden_modifiers.attacke;
this.computed.parade.wert = this.computed.parade.basiswert + this.modifikator_parade; this.computed.parade.wert = this.computed.parade.basiswert + this.modifikator_parade + this.computed.wunden_modifiers.parade;
this.computed.fernkampf.wert = this.computed.fernkampf.basiswert + this.modifikator_fernkampf; this.computed.fernkampf.wert = this.computed.fernkampf.basiswert + this.modifikator_fernkampf;
this.kampftalente = this.parent.items.filter((x) => x.type === "Kampftalent").sort((a, b) => a.name > b.name); this.kampftalente = this.parent.items.filter((x) => x.type === "Kampftalent").sort((a, b) => string_compare(a.name, b.name));
for(const talent of this.kampftalente) { for(const talent of this.kampftalente) {
this.computed.kampf.talente[talent.name] = {}; this.computed.kampf.talente[talent.name] = {};
this.computed.kampf.talente[talent.name].attacke = (talent.system.kategorie === "fernkampf" ? this.computed.fernkampf.wert : this.computed.attacke.wert) + talent.system.attacke; this.computed.kampf.talente[talent.name].attacke = (talent.system.kategorie === "fernkampf" ? this.computed.fernkampf.wert : this.computed.attacke.wert) + talent.system.attacke;
@@ -799,7 +917,7 @@ class DSA41_CharacterData extends TypeDataModel {
computed.trefferpunkte_display = computed.trefferpunkte.replace(/[\+\-]/, (op) => "<br>" + op); computed.trefferpunkte_display = computed.trefferpunkte.replace(/[\+\-]/, (op) => "<br>" + op);
} }
const talente = this.parent.items.filter((x) => x.type === "Talent").sort((a, b) => a.name > b.name); const talente = this.parent.items.filter((x) => x.type === "Talent").sort((a, b) => string_compare(a.name, b.name));
this.talente = { this.talente = {
koerperliche: talente.filter((x) => x.system.kategorie === "koerperliche"), koerperliche: talente.filter((x) => x.system.kategorie === "koerperliche"),
gesellschaftliche: talente.filter((x) => x.system.kategorie === "gesellschaftliche"), gesellschaftliche: talente.filter((x) => x.system.kategorie === "gesellschaftliche"),
@@ -808,10 +926,11 @@ class DSA41_CharacterData extends TypeDataModel {
handwerks: talente.filter((x) => x.system.kategorie === "handwerks"), handwerks: talente.filter((x) => x.system.kategorie === "handwerks"),
}; };
this.computed.num_allgemeine_sonderfertigkeiten = this.parent.items.filter((x) => x.type === "Sonderfertigkeit" && x.system.kategorie === "allgemein").length; this.computed.num_allgemeine_sonderfertigkeiten = this.parent.items.filter((x) => x.type === "Sonderfertigkeit" && x.system.kategorie === "allgemein").length;
this.computed.num_kampf_sonderfertigkeiten = this.parent.items.filter((x) => x.type === "Sonderfertigkeit" && x.system.kategorie === "kampf").length; this.computed.num_kampf_sonderfertigkeiten = this.parent.items.filter((x) => x.type === "Sonderfertigkeit" && x.system.kategorie === "kampf").length;
this.computed.num_vorteile = this.parent.items.filter((x) => x.type === "VorNachteil" && x.system.kategorie === "vorteil").length; this.computed.num_magische_sonderfertigkeiten = this.parent.items.filter((x) => x.type === "Sonderfertigkeit" && x.system.kategorie === "magisch").length;
this.computed.num_nachteile = this.parent.items.filter((x) => x.type === "VorNachteil" && x.system.kategorie === "nachteil").length; this.computed.num_vorteile = this.parent.items.filter((x) => x.type === "VorNachteil" && x.system.kategorie === "vorteil").length;
this.computed.num_nachteile = this.parent.items.filter((x) => x.type === "VorNachteil" && x.system.kategorie === "nachteil").length;
} }
} }
@@ -820,6 +939,7 @@ class DSA41_GegenstandData extends TypeDataModel {
return { return {
gewicht: new GewichtField(), gewicht: new GewichtField(),
preis: new PreisField(), preis: new PreisField(),
anzahl: new NumberField({ integer: true, initial: 1, min: 0 }),
beschreibung: new StringField({ initial: "" }), beschreibung: new StringField({ initial: "" }),
}; };
@@ -1174,10 +1294,12 @@ class DSA41_Dialog extends DSA41_ApplicationMixin(ApplicationV2) {
}; };
get formData() { get formData() {
const inputs = this.element.querySelector("[data-application-part]")?.querySelectorAll("input") ?? [];
const types = Object.fromEntries(Array.from(inputs, x => [x.name, x.type]));
const data = Object.fromEntries( const data = Object.fromEntries(
new FormData(this.element).entries().map(([key, value])=>{ new FormData(this.element).entries().map(([key, value])=>{
if (typeof value != "string") return [key, value]; if (types[key] == "number") return [key, Number(value)];
return isNaN(value) ? [key, value] : [key, Number(value)]; return [key, value];
}) })
); );
@@ -1222,7 +1344,7 @@ class DSA41_Dialog extends DSA41_ApplicationMixin(ApplicationV2) {
class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) { class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
static PARTS = { static PARTS = {
ActorSheet: { template: "systems/dsa-4th-edition/src/ActorSheet.hbs" }, ActorSheet: { template: "systems/dsa-4th-edition/src/ActorSheet.hbs", scrollable: [".scroll-container"] },
}; };
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
@@ -1236,6 +1358,8 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
const item_id = event.target.closest("[data-item-id]")?.dataset.itemId; const item_id = event.target.closest("[data-item-id]")?.dataset.itemId;
const item = this.document.items.get(item_id); const item = this.document.items.get(item_id);
const hp_roll_modifier = this.document.get_hp_roll_modifier();
let flavor = game.i18n.localize("DSA41.roll_types." + roll_type); let flavor = game.i18n.localize("DSA41.roll_types." + roll_type);
if (typeof success_value !== 'undefined') { if (typeof success_value !== 'undefined') {
flavor += " <= " + success_value; flavor += " <= " + success_value;
@@ -1251,6 +1375,9 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
flavor += " <= " + (Number(success_value) + data.modifikator); flavor += " <= " + (Number(success_value) + data.modifikator);
} }
if (hp_roll_modifier !== 0)
roll_formula = roll_formula + " + " + hp_roll_modifier;
let roll = new Roll(roll_formula, this.document.system); let roll = new Roll(roll_formula, this.document.system);
roll.toMessage({ roll.toMessage({
speaker: ChatMessage.getSpeaker({ actor: this.document }), speaker: ChatMessage.getSpeaker({ actor: this.document }),
@@ -1271,10 +1398,13 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
const data = await DSA41_Dialog.wait("Talent", { window: {title: title}, item: item }); const data = await DSA41_Dialog.wait("Talent", { window: {title: title}, item: item });
const eBE = (await new Roll(item.system.behinderung || "0", { BE: this.document.system.computed.kampf.ruestungen_gesamt.gesamt_behinderung }).evaluate()).total; const eBE = (await new Roll(item.system.behinderung || "0", { BE: this.document.system.computed.kampf.ruestungen_gesamt.gesamt_behinderung }).evaluate()).total;
data.modifikator += eBE; data.modifikator -= eBE;
const talentwert = item.system.talentwert - data.modifikator; const talentwert = item.system.talentwert + data.modifikator;
const roll_modifier = talentwert < 0 ? -talentwert: 0; const roll_modifier = talentwert < 0 ? -talentwert: 0;
if (hp_roll_modifier !== 0)
roll_modifier += hp_roll_modifier;
const roll1 = (await new Roll("1d20").evaluate()).total + roll_modifier; const roll1 = (await new Roll("1d20").evaluate()).total + roll_modifier;
const roll2 = (await new Roll("1d20").evaluate()).total + roll_modifier; const roll2 = (await new Roll("1d20").evaluate()).total + roll_modifier;
@@ -1292,7 +1422,7 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
const context = { const context = {
talent: item, talent: item,
modifikator: -data.modifikator, modifikator: data.modifikator,
attribute1: { type: item.system.attribute1, value: attribute1 }, attribute1: { type: item.system.attribute1, value: attribute1 },
attribute2: { type: item.system.attribute2, value: attribute2 }, attribute2: { type: item.system.attribute2, value: attribute2 },
@@ -1330,6 +1460,13 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
flavor += " <= " + (Number(success_value) + data.modifikator); flavor += " <= " + (Number(success_value) + data.modifikator);
} }
if (data.anmerkung) {
flavor += "<br>" + data.anmerkung;
}
if (hp_roll_modifier !== 0)
roll_formula = roll_formula + " + " + hp_roll_modifier;
let roll = new Roll(roll_formula, this.document.system); let roll = new Roll(roll_formula, this.document.system);
roll.toMessage({ roll.toMessage({
speaker: ChatMessage.getSpeaker({ actor: this.document }), speaker: ChatMessage.getSpeaker({ actor: this.document }),
@@ -1353,6 +1490,13 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
let flavor = game.i18n.localize("DSA41.roll_types." + roll_type); let flavor = game.i18n.localize("DSA41.roll_types." + roll_type);
flavor += " <= " + (Number((data.crit == "on") ? item.parade_crit : item.parade) + data.modifikator); flavor += " <= " + (Number((data.crit == "on") ? item.parade_crit : item.parade) + data.modifikator);
if (data.anmerkung) {
flavor += "<br>" + data.anmerkung;
}
if (hp_roll_modifier !== 0)
roll_formula = roll_formula + " + " + hp_roll_modifier;
let roll = new Roll(roll_formula, this.document.system); let roll = new Roll(roll_formula, this.document.system);
roll.toMessage({ roll.toMessage({
speaker: ChatMessage.getSpeaker({ actor: this.document }), speaker: ChatMessage.getSpeaker({ actor: this.document }),
@@ -1399,7 +1543,7 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
const groessen_modifikator = Math.max(data.ziel_groesse + data.deckung + data.ziel_bewegung, -2); const groessen_modifikator = Math.max(data.ziel_groesse + data.deckung + data.ziel_bewegung, -2);
const andere_modifikator = data.entfernung + data.wind + data.modifikator; const andere_modifikator = data.entfernung + data.wind + data.modifikator;
const total_modifikator = groessen_modifikator + andere_modifikator; const total_modifikator = groessen_modifikator + andere_modifikator + hp_roll_modifier;
let roll = new Roll(roll_formula + " + " + total_modifikator, this.document.system); let roll = new Roll(roll_formula + " + " + total_modifikator, this.document.system);
roll.toMessage({ roll.toMessage({
@@ -1444,9 +1588,12 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
const title = game.i18n.localize("DSA41.roll_types." + roll_type) + ": " + item.name; const title = game.i18n.localize("DSA41.roll_types." + roll_type) + ": " + item.name;
const data = await DSA41_Dialog.wait("Zauber", { window: {title: title}, item: item }); const data = await DSA41_Dialog.wait("Zauber", { window: {title: title}, item: item });
const zauberfertigkeitswert = item.system.zauberfertigkeitswert - data.modifikator - data.magieresistenz; const zauberfertigkeitswert = item.system.zauberfertigkeitswert - data.modifikator - (data.magieresistenz ?? null);
const roll_modifier = zauberfertigkeitswert < 0 ? -zauberfertigkeitswert: 0; const roll_modifier = zauberfertigkeitswert < 0 ? -zauberfertigkeitswert: 0;
if (hp_roll_modifier !== 0)
roll_modifier += hp_roll_modifier;
const roll1 = (await new Roll("1d20").evaluate()).total + roll_modifier; const roll1 = (await new Roll("1d20").evaluate()).total + roll_modifier;
const roll2 = (await new Roll("1d20").evaluate()).total + roll_modifier; const roll2 = (await new Roll("1d20").evaluate()).total + roll_modifier;
const roll3 = (await new Roll("1d20").evaluate()).total + roll_modifier; const roll3 = (await new Roll("1d20").evaluate()).total + roll_modifier;
@@ -1465,7 +1612,7 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
zauber: item, zauber: item,
modifikator: -data.modifikator, modifikator: -data.modifikator,
magieresistenz: -data.magieresistenz, magieresistenz: -(data.magieresistenz ?? 0),
attribute1: { type: item.system.attribute1, value: attribute1 }, attribute1: { type: item.system.attribute1, value: attribute1 },
attribute2: { type: item.system.attribute2, value: attribute2 }, attribute2: { type: item.system.attribute2, value: attribute2 },
@@ -1535,6 +1682,13 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
content: item.system.beschreibung, content: item.system.beschreibung,
}); });
}, },
"toggle-wound": async function(event, target) {
const location = event.target.closest("[data-location]").dataset.location;
const current_count = this.document.system.wunden[location];
const toggled_count = Array.prototype.indexOf.call(event.target.parentNode.children, event.target) + 1;
this.document.update({ ["system.wunden." + location]: toggled_count > current_count ? toggled_count : toggled_count - 1 });
}
}, },
}; };
+11 -1
View File
@@ -51,7 +51,17 @@
.initiative = 0, .initiative = 0,
.bruchfaktor = 0, .bruchfaktor = 0,
} },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = -1,
.modifikator_parade = 1,
.initiative = 0,
.bruchfaktor = 0,
},
} }
} }
} }
+10
View File
@@ -24,6 +24,16 @@
.initiative = 0, .initiative = 0,
.bruchfaktor = 0, .bruchfaktor = 0,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = 0,
.modifikator_parade = 1,
.initiative = 0,
.bruchfaktor = 0,
},
} }
} }
} }
+10
View File
@@ -51,6 +51,16 @@
.initiative = 0, .initiative = 0,
.bruchfaktor = 0, .bruchfaktor = 0,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = -2,
.modifikator_parade = 1,
.initiative = 0,
.bruchfaktor = 0,
},
} }
} }
} }
@@ -51,6 +51,16 @@
.initiative = 0, .initiative = 0,
.bruchfaktor = 0 .bruchfaktor = 0
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = -2,
.modifikator_parade = 1,
.initiative = 0,
.bruchfaktor = 0,
},
} }
} }
} }
@@ -51,6 +51,16 @@
.initiative = 0, .initiative = 0,
.bruchfaktor = 0, .bruchfaktor = 0,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = -2,
.modifikator_parade = 1,
.initiative = 0,
.bruchfaktor = 0,
},
} }
} }
} }
@@ -51,6 +51,16 @@
.initiative = 0, .initiative = 0,
.bruchfaktor = 0, .bruchfaktor = 0,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = -2,
.modifikator_parade = 1,
.initiative = 0,
.bruchfaktor = 0,
},
} }
} }
} }
@@ -24,6 +24,16 @@
.initiative = 0, .initiative = 0,
.bruchfaktor = -2, .bruchfaktor = -2,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = 0,
.modifikator_parade = 2,
.initiative = 0,
.bruchfaktor = -2,
},
} }
} }
} }
+10
View File
@@ -39,6 +39,16 @@
.improvisiert = false, .improvisiert = false,
.priviligiert = false, .priviligiert = false,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = -1,
.modifikator_parade = 3,
.initiative = 0,
.bruchfaktor = -2,
},
} }
} }
} }
+10
View File
@@ -39,6 +39,16 @@
.improvisiert = false, .improvisiert = false,
.priviligiert = false, .priviligiert = false,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = 0,
.modifikator_parade = 2,
.initiative = 1,
.bruchfaktor = 3,
},
} }
} }
} }
+10
View File
@@ -40,6 +40,16 @@
.improvisiert = false, .improvisiert = false,
.priviligiert = false, .priviligiert = false,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = 0,
.modifikator_parade = 1,
.initiative = 0,
.bruchfaktor = 1,
},
} }
} }
} }
+10
View File
@@ -40,6 +40,16 @@
.improvisiert = false, .improvisiert = false,
.priviligiert = false, .priviligiert = false,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = 0,
.modifikator_parade = 2,
.initiative = 1,
.bruchfaktor = 0,
},
} }
} }
} }
+10
View File
@@ -52,6 +52,16 @@
.initiative = 0, .initiative = 0,
.bruchfaktor = -2, .bruchfaktor = -2,
}, },
.parierwaffe = .{
.aktiv = true,
.modifikator_attacke = -2,
.modifikator_parade = 1,
.initiative = 0,
.bruchfaktor = -2,
},
} }
} }
} }
+1 -1
View File
@@ -3,7 +3,7 @@
.name = "Betören", .name = "Betören",
.system = .{ .system = .{
.kategorie = .gesellschaftliche, .kategorie = .gesellschaftliche,
.behinderung = "BE - 2", .behinderung = "@BE - 2",
.attribute1 = .IN, .attribute1 = .IN,
.attribute2 = .CH, .attribute2 = .CH,
.attribute3 = .CH, .attribute3 = .CH,
+1 -1
View File
@@ -3,7 +3,7 @@
.name = "Etikette", .name = "Etikette",
.system = .{ .system = .{
.kategorie = .gesellschaftliche, .kategorie = .gesellschaftliche,
.behinderung = "BE - 2", .behinderung = "@BE - 2",
.attribute1 = .KL, .attribute1 = .KL,
.attribute2 = .IN, .attribute2 = .IN,
.attribute3 = .CH, .attribute3 = .CH,
+1 -1
View File
@@ -3,7 +3,7 @@
.name = "Gassenwissen", .name = "Gassenwissen",
.system = .{ .system = .{
.kategorie = .gesellschaftliche, .kategorie = .gesellschaftliche,
.behinderung = "BE - 4", .behinderung = "@BE - 4",
.attribute1 = .KL, .attribute1 = .KL,
.attribute2 = .IN, .attribute2 = .IN,
.attribute3 = .CH, .attribute3 = .CH,
+13
View File
@@ -0,0 +1,13 @@
.{
.Talent = .{
.name = "Singen",
.system = .{
.kategorie = .koerperliche,
.behinderung = "@BE - 3",
.attribute1 = .IN,
.attribute2 = .CH,
.attribute3 = .CH,
}
}
}
+17 -2
View File
@@ -17,8 +17,8 @@ const talente: system.ItemCompendium = .{ .entries = &.{
@import("Items/Talente/Schwimmen.zon"), @import("Items/Talente/Schwimmen.zon"),
@import("Items/Talente/Selbstbeherrschung.zon"), @import("Items/Talente/Selbstbeherrschung.zon"),
@import("Items/Talente/Sich_Verstecken.zon"), @import("Items/Talente/Sich_Verstecken.zon"),
@import("Items/Talente/Singen.zon"), @import("Items/Talente/Singen1.zon"),
@import("Items/Talente/Singen.zon"), @import("Items/Talente/Singen2.zon"),
@import("Items/Talente/Sinnenschaerfe1.zon"), @import("Items/Talente/Sinnenschaerfe1.zon"),
@import("Items/Talente/Sinnenschaerfe2.zon"), @import("Items/Talente/Sinnenschaerfe2.zon"),
@import("Items/Talente/Skifahren.zon"), @import("Items/Talente/Skifahren.zon"),
@@ -483,6 +483,21 @@ const bewaffnungen: system.ItemCompendium = .{ .entries = &.{
@import("Items/Bewaffnungen/Drachenklaue_Klingenfaenger.zon"), @import("Items/Bewaffnungen/Drachenklaue_Klingenfaenger.zon"),
@import("Items/Bewaffnungen/Drachenklaue_Klingenbrecher.zon"), @import("Items/Bewaffnungen/Drachenklaue_Klingenbrecher.zon"),
}}}, }}},
.{ .Folder = .{ .name = "Parierwaffen", .entries = &.{
@import("Items/Bewaffnungen/Buckler.zon"),
@import("Items/Bewaffnungen/Großer_Vollmetall_Buckler.zon"),
@import("Items/Bewaffnungen/Panzerarm.zon"),
@import("Items/Bewaffnungen/Bock.zon"),
@import("Items/Bewaffnungen/Drachenklaue.zon"),
@import("Items/Bewaffnungen/Drachenklaue_lange_Klinge.zon"),
@import("Items/Bewaffnungen/Drachenklaue_Klingenfaenger.zon"),
@import("Items/Bewaffnungen/Drachenklaue_Klingenbrecher.zon"),
@import("Items/Bewaffnungen/Hakendolch.zon"),
@import("Items/Bewaffnungen/Kriegsfaecher.zon"),
@import("Items/Bewaffnungen/Linkhand.zon"),
@import("Items/Bewaffnungen/Langdolch.zon"),
}}},
}}; }};
pub fn main() !void { pub fn main() !void {