Compare commits

...

7 Commits

Author SHA1 Message Date
Sven Balzer
fea5de6596 add bars for Ausdauer and Astralenergie, make basiswerte have modifiers 2024-12-20 14:14:07 +01:00
Sven Balzer
4079a40d6b change Kampftalente to be Items 2024-12-19 10:28:29 +01:00
Sven Balzer
57eb581ae7 add lebenspunkte 2024-12-18 07:55:27 +01:00
Sven Balzer
b011a65510 fix BE of some talents 2024-12-18 07:48:43 +01:00
Sven Balzer
3dff7555e5 add VorNachteil 2024-12-05 23:56:22 +01:00
Sven Balzer
5ef47a483f add Sozialstatus 2024-12-05 22:50:42 +01:00
Sven Balzer
f824286243 add Sonderfertigkeiten 2024-12-05 22:20:20 +01:00
11 changed files with 689 additions and 163 deletions

View File

@ -15,19 +15,35 @@
</div> </div>
{{/inline}} {{/inline}}
<div class="actor-sheet ActorSheet"> <div class="actor-sheet ActorSheet" data-tooltip-class="DSA41">
<div class="grid4 gap"> <div class="grid5 gap">
{{>editable-input type="text" name="name" value=actor.name placeholder=(localize "DSA41.name")}} {{>editable-input type="text" name="name" value=actor.name placeholder=(localize "DSA41.name")}}
{{>editable-input type="text" name="system.race" value=actor.system.race placeholder=(localize "DSA41.race")}} {{>editable-input type="text" name="system.race" value=actor.system.race placeholder=(localize "DSA41.race")}}
{{>editable-input type="text" name="system.culture" value=actor.system.culture placeholder=(localize "DSA41.culture")}} {{>editable-input type="text" name="system.culture" value=actor.system.culture placeholder=(localize "DSA41.culture")}}
{{>editable-input type="text" name="system.profession" value=actor.system.profession placeholder=(localize "DSA41.profession")}} {{>editable-input type="text" name="system.profession" value=actor.system.profession placeholder=(localize "DSA41.profession")}}
{{>editable-input type="number" name="system.sozialstatus" value=actor.system.sozialstatus placeholder=(localize "DSA41.sozialstatus")}}
</div> </div>
<div class="row"> <div class="row">
<img class="character-image" src="{{ actor.img }}" title="{{ actor.name }}" {{#if editable}}data-edit="img"{{/if}}> <img class="character-image" src="{{ actor.img }}" title="{{ actor.name }}" {{#if editable}}data-edit="img"{{/if}}>
{{#each actor.system.attributes}} <div class="col">
{{>die-value type=@key header=(localize (concat "DSA41.attributes.short." @key)) value=(lookup @root.actor.system.computed.attributes @key) success-value=(lookup @root.actor.system.computed.attributes @key) data-roll="1d20" data-tooltip="attribute_tooltip"}} <div class="row">
{{/each}} {{#each actor.system.attributes}}
{{>die-value type=@key header=(localize (concat "DSA41.attributes.short." @key)) value=(lookup @root.actor.system.computed.attributes @key) success-value=(lookup @root.actor.system.computed.attributes @key) data-roll="1d20" data-tooltip="attribute_tooltip"}}
{{/each}}
</div>
<div class="grid3">
<div class="bar hp" style="--bar-percentage: {{actor.system.computed.lebenspunkte.prozent}}%;">
{{>editable-input type="number" name="system.lebenspunkte.aktuell" value=actor.system.lebenspunkte.aktuell}} / <span>{{actor.system.computed.lebenspunkte.max}}</span>
</div>
<div class="bar ausdauer" style="--bar-percentage: {{actor.system.computed.ausdauer.prozent}}%;">
{{>editable-input type="number" name="system.ausdauer.aktuell" value=actor.system.ausdauer.aktuell}} / <span>{{actor.system.computed.ausdauer.max}}</span>
</div>
<div class="bar astralenergie" style="--bar-percentage: {{actor.system.computed.astralenergie.prozent}}%;">
{{>editable-input type="number" name="system.astralenergie.aktuell" value=actor.system.astralenergie.aktuell}} / <span>{{actor.system.computed.astralenergie.max}}</span>
</div>
</div>
</div>
</div> </div>
@ -71,26 +87,144 @@
{{/each}} {{/each}}
</div> </div>
</fieldset> </fieldset>
<div class="Basiswerte">
<span>Lebenspunkte</span>
<span>{{actor.system.computed.max_lebenspunkte}}</span>
<span>Ausdauer</span>
<span>{{actor.system.computed.max_ausdauer}}</span>
<span>Astralenergie</span> <div class="list Basiswerte">
<span>{{actor.system.computed.max_atralenergie}}</span> <div class="list-header">
<span>Magieresistenz</span> <span></span>
<span>{{actor.system.computed.magieresistenz}}</span> <span>{{localize "DSA41.basiswerte.label_basiswert"}}</span>
<span>{{localize "DSA41.basiswerte.label_modifikator"}}</span>
<span>{{localize "DSA41.basiswerte.label_zukauf"}}</span>
<span>{{localize "DSA41.basiswerte.label_verlust"}}</span>
<span>{{localize "DSA41.basiswerte.label_total"}}</span>
</div>
<span>INI-Basiswert</span> <div class="list-item">
<span>{{actor.system.computed.ini_basiswert}}</span> <span>{{localize "DSA41.basiswerte.lebenspunkte"}}</span>
<span>AT-Basiswert</span> <span>{{actor.system.computed.lebenspunkte.basiswert}}</span>
<span>{{actor.system.computed.at_basiswert}}</span> <span>{{>editable-input type="number" name="system.lebenspunkte.modifikator" value=actor.system.lebenspunkte.modifikator}}</span>
<span>{{>editable-input type="number" name="system.lebenspunkte.zukauf" value=actor.system.lebenspunkte.zukauf}}</span>
<span>{{>editable-input type="number" name="system.lebenspunkte.verlust" value=actor.system.lebenspunkte.verlust}}</span>
<span>{{actor.system.computed.lebenspunkte.max}}</span>
</div>
<span>PA-Basiswert</span> <div class="list-item">
<span>{{actor.system.computed.pa_basiswert}}</span> <span>{{localize "DSA41.basiswerte.ausdauer"}}</span>
<span>FK-Basiswert</span> <span>{{actor.system.computed.ausdauer.basiswert}}</span>
<span>{{actor.system.computed.fk_basiswert}}</span> <span>{{>editable-input type="number" name="system.ausdauer.modifikator" value=actor.system.ausdauer.modifikator}}</span>
<span>{{>editable-input type="number" name="system.ausdauer.zukauf" value=actor.system.ausdauer.zukauf}}</span>
<span>{{>editable-input type="number" name="system.ausdauer.verlust" value=actor.system.ausdauer.verlust}}</span>
<span>{{actor.system.computed.ausdauer.max}}</span>
</div>
<div class="list-item">
<span>{{localize "DSA41.basiswerte.astralenergie"}}</span>
<span>{{actor.system.computed.astralenergie.basiswert}}</span>
<span>{{>editable-input type="number" name="system.astralenergie.modifikator" value=actor.system.astralenergie.modifikator}}</span>
<span>{{>editable-input type="number" name="system.astralenergie.zukauf" value=actor.system.astralenergie.zukauf}}</span>
<span>{{>editable-input type="number" name="system.astralenergie.verlust" value=actor.system.astralenergie.verlust}}</span>
<span>{{actor.system.computed.astralenergie.max}}</span>
</div>
<div class="list-item">
<span>{{localize "DSA41.basiswerte.magieresistenz"}}</span>
<span>{{actor.system.computed.magieresistenz.basiswert}}</span>
<span>{{>editable-input type="number" name="system.magieresistenz.modifikator" value=actor.system.magieresistenz.modifikator}}</span>
<span>{{>editable-input type="number" name="system.magieresistenz.zukauf" value=actor.system.magieresistenz.zukauf}}</span>
<span></span>
<span>{{actor.system.computed.magieresistenz.max}}</span>
</div>
<div class="list-item">
<span>{{localize "DSA41.basiswerte.initiative"}}</span>
<span>{{actor.system.computed.initiative.basiswert}}</span>
<span>{{>editable-input type="number" name="system.modifikator_initiative" value=actor.system.modifikator_initiative}}</span>
<span></span>
<span></span>
<span>{{actor.system.computed.initiative.wert}}</span>
</div>
<div class="list-item">
<span>{{localize "DSA41.basiswerte.attacke"}}</span>
<span>{{actor.system.computed.attacke.basiswert}}</span>
<span>{{>editable-input type="number" name="system.modifikator_attacke" value=actor.system.modifikator_attacke}}</span>
<span></span>
<span></span>
<span>{{actor.system.computed.attacke.wert}}</span>
</div>
<div class="list-item">
<span>{{localize "DSA41.basiswerte.parade"}}</span>
<span>{{actor.system.computed.parade.basiswert}}</span>
<span>{{>editable-input type="number" name="system.modifikator_parade" value=actor.system.modifikator_parade}}</span>
<span></span>
<span></span>
<span>{{actor.system.computed.parade.wert}}</span>
</div>
<div class="list-item">
<span>{{localize "DSA41.basiswerte.fernkampf"}}</span>
<span>{{actor.system.computed.fernkampf.basiswert}}</span>
<span>{{>editable-input type="number" name="system.modifikator_fernkampf" value=actor.system.modifikator_fernkampf}}</span>
<span></span>
<span></span>
<span>{{actor.system.computed.fernkampf.wert}}</span>
</div>
</div>
<div class="grid2 gap">
<div class="list Vorteile">
<div class="list-header">
<div>{{localize (concat "DSA41.vornachteil.label_vorteile")}}</div>
</div>
{{#each actor.itemTypes.VorNachteil}}
{{#if (eq system.kategorie "vorteil")}}
<div class="list-item" data-item-id="{{_id}}">
<div>
<div class="fit-content" data-action="item-open" data-tooltip="<h4>{{name}}</h4>{{system.beschreibung}}">{{maybeLocalize name prefix=(concat "DSA41.vornachteil." system.kategorie ".name")}}</div>
</div>
<div></div>
<div class="center fas fa-trash" data-action="item-delete"></div>
</div>
{{/if}}
{{/each}}
</div>
<div class="list Nachteile subgrid-rows">
<div class="list-header">
<div>{{localize (concat "DSA41.vornachteil.label_nachteile")}}</div>
</div>
{{#each actor.itemTypes.VorNachteil}}
{{#if (eq system.kategorie "nachteil")}}
<div class="list-item" data-item-id="{{_id}}">
<div>
<div class="fit-content" data-action="item-open" data-tooltip="<h4>{{name}}</h4>{{system.beschreibung}}">{{maybeLocalize name prefix=(concat "DSA41.vornachteil." system.kategorie ".name")}}</div>
</div>
<div></div>
<div class="center fas fa-trash" data-action="item-delete"></div>
</div>
{{/if}}
{{/each}}
</div>
</div>
<div class="list Sonderfertigkeiten">
<div class="list-header">
<div>{{localize (concat "DSA41.sonderfertigkeiten.label_allgemein")}}</div>
</div>
{{#each actor.itemTypes.Sonderfertigkeit}}
{{#if (eq this.system.kategorie "allgemein")}}
<div class="list-item" data-item-id="{{_id}}">
<div>
<div class="fit-content" data-action="item-open">{{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>
@ -105,15 +239,13 @@
{{#each this}} {{#each this}}
<div class="list-item" data-item-id="{{_id}}"> <div class="list-item" data-item-id="{{_id}}">
<div> <div data-action="item-open">{{maybeLocalize name prefix=(concat "DSA41.talente." system.kategorie ".name")}}</div>
<div class="fit-content" data-action="item-open">{{maybeLocalize name prefix=(concat "DSA41.talente." system.kategorie ".name")}}</div>
</div>
<div class="center" data-action="roll" data-roll-type="talent"> <div class="center" data-action="roll" data-roll-type="talent">
{{>die-type type=system.attribute1}} {{>die-type type=system.attribute1}}
{{>die-type type=system.attribute2}} {{>die-type type=system.attribute2}}
{{>die-type type=system.attribute3}} {{>die-type type=system.attribute3}}
</div> </div>
<div>{{>editable-input type="number" data-name="system.talentwert" value=system.talentwert}}</div> <div>{{>editable-input name=(concat name "system.talentwert") type="number" data-name="system.talentwert" value=system.talentwert}}</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}}
@ -130,14 +262,14 @@
<div class="center">{{localize "DSA41.talente.kampf.label_parade_total"}}</div> <div class="center">{{localize "DSA41.talente.kampf.label_parade_total"}}</div>
</div> </div>
{{#each actor.system.kampf_talente}} {{#each actor.system.kampftalente}}
<div class="list-item"> <div class="list-item" data-item-id="{{_id}}">
<div>{{localize (concat "DSA41.talente.kampf.name." @key)}}</div> <div data-action="item-open">{{maybeLocalize name prefix="DSA41.talente.kampf.name."}}</div>
<div>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".talentwert") value=(lookup this "talentwert")}}</div> <div>{{>editable-input type="number" name=(concat name "system.talentwert") data-name="system.talentwert" value=system.talentwert}}</div>
<div>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".attacke") value=(lookup this "attacke")}}</div> <div>{{>editable-input type="number" name=(concat name "system.attacke") data-name="system.attacke" value=system.attacke}}</div>
<div>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".parade") value=(lookup this "parade")}}</div> <div>{{>editable-input type="number" name=(concat name "system.parade") data-name="system.parade" value=system.parade}}</div>
<div class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente @key) "attacke"}}</div> <div class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente name) "attacke"}}</div>
<div class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente @key) "parade"}}</div> <div class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente name) "parade"}}</div>
</div> </div>
{{/each}} {{/each}}
</div> </div>
@ -305,5 +437,23 @@
<div>{{actor.system.computed.kampf.ruestungen_gesamt.gesamt_behinderung}}</div> <div>{{actor.system.computed.kampf.ruestungen_gesamt.gesamt_behinderung}}</div>
</div> </div>
</div> </div>
<div class="list Sonderfertigkeiten">
<div class="list-header">
<div>{{localize (concat "DSA41.sonderfertigkeiten.label_kampf")}}</div>
</div>
{{#each actor.itemTypes.Sonderfertigkeit}}
{{#if (eq this.system.kategorie "kampf")}}
<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>

View File

@ -1,8 +1,8 @@
<div class="editable-input editable-{{type}} {{class}}"> <div class="editable-input editable-{{type}} {{class}}">
{{#if (eq type "checkbox")}} {{#if (eq type "checkbox")}}
<input type="checkbox" name="{{name}}" data-name="{{data-name}}" {{checked value}}> <input type="checkbox" name="{{name}}" {{#if data-name}}data-name="{{data-name}}"{{/if}} {{checked value}}>
{{else}} {{else}}
<input type="{{type}}" name="{{name}}" data-name="{{data-name}}" value="{{value}}" placeholder="{{placeholder}}"> <input type="{{type}}" name="{{name}}" {{#if data-name}}data-name="{{data-name}}"{{/if}} value="{{value}}" placeholder="{{placeholder}}">
{{/if}} {{/if}}
{{#if placeholder}} {{#if placeholder}}

View File

@ -0,0 +1,39 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off">
<div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}>
<div class="col">
<div class="grid3 gap">
{{>editable-input type="text" name="name" value=item.name placeholder=(localize "DSA41.name")}}
<div>
<select name="system.steigern">
<option value="A_Star" {{#if (eq item.system.steigern "A_Star")}}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.A_Star"}}</option>
<option value="A" {{#if (eq item.system.steigern "A") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.A"}} </option>
<option value="B" {{#if (eq item.system.steigern "B") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.B"}} </option>
<option value="C" {{#if (eq item.system.steigern "C") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.C"}} </option>
<option value="D" {{#if (eq item.system.steigern "D") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.D"}} </option>
<option value="E" {{#if (eq item.system.steigern "E") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.E"}} </option>
<option value="F" {{#if (eq item.system.steigern "F") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.F"}} </option>
<option value="G" {{#if (eq item.system.steigern "G") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.G"}} </option>
<option value="H" {{#if (eq item.system.steigern "H") }}selected{{/if}}>{{localize "DSA41.kampftalent.steigern.H"}} </option>
</select>
<div class="placeholder">{{localize "DSA41.kampftalent.label_steigern"}}</div>
</div>
{{>editable-input type="text" name="system.behinderung" value=item.system.behinderung placeholder=(localize "DSA41.talente.label_behinderung")}}
</div>
<div class="grid gap">
<div>
<select name="system.kategorie">
<option value="waffenlos" {{#if (eq item.system.kategorie "waffenlos")}}selected{{/if}}>{{localize "DSA41.kampftalent.kategorie.waffenlos"}}</option>
<option value="nahkampf" {{#if (eq item.system.kategorie "nahkampf") }}selected{{/if}}>{{localize "DSA41.kampftalent.kategorie.nahkampf"}} </option>
<option value="fernkampf" {{#if (eq item.system.kategorie "fernkampf")}}selected{{/if}}>{{localize "DSA41.kampftalent.kategorie.fernkampf"}}</option>
</select>
<div class="placeholder">{{localize "DSA41.talente.label_kategorie"}}</div>
</div>
</div>
</div>
</div>
<div>
<prose-mirror name="system.beschreibung" value="{{item.system.beschreibung}}" compact="true">
</prose-mirror>
</div>
</div>

View File

@ -0,0 +1,28 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off">
<div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}>
<div class="col">
<div class="grid2 gap">
{{>editable-input type="text" name="name" value=item.name placeholder=(localize "DSA41.name")}}
<div>
<select name="system.kategorie">
<option value="allgemein" {{#if (eq item.system.kategorie "allgemein")}}selected{{/if}}>{{localize "DSA41.sonderfertigkeiten.kategorie.allgemein"}}</option>
<option value="kampf" {{#if (eq item.system.kategorie "kampf") }}selected{{/if}}>{{localize "DSA41.sonderfertigkeiten.kategorie.kampf"}} </option>
<option value="magisch" {{#if (eq item.system.kategorie "magisch") }}selected{{/if}}>{{localize "DSA41.sonderfertigkeiten.kategorie.magisch"}} </option>
<option value="klerikal" {{#if (eq item.system.kategorie "klerikal") }}selected{{/if}}>{{localize "DSA41.sonderfertigkeiten.kategorie.klerikal"}} </option>
</select>
<div class="placeholder">{{localize "DSA41.sonderfertigkeiten.kategorie.label"}}</div>
</div>
</div>
<div class="grid2 gap">
{{>editable-input type="number" name="system.kosten" value=item.system.kosten placeholder=(localize "DSA41.sonderfertigkeiten.kosten")}}
{{>editable-input type="number" name="system.verbreitung" value=item.system.verbreitung placeholder=(localize "DSA41.sonderfertigkeiten.verbreitung")}}
</div>
</div>
</div>
<div>
<prose-mirror name="system.beschreibung" value="{{item.system.beschreibung}}" compact="true">
</prose-mirror>
</div>
</div>

View File

@ -0,0 +1,22 @@
<div class="item-sheet {{ cssClass }}" autocomplete="off">
<div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}>
<div class="col">
<div class="grid2 gap">
{{>editable-input type="text" name="name" value=item.name placeholder=(localize "DSA41.name")}}
{{>editable-input type="number" name="system.kosten" value=item.system.kosten placeholder=(localize "DSA41.vornachteil.kosten")}}
</div>
<div>
<select name="system.kategorie">
<option value="vorteil" {{#if (eq item.system.kategorie "vorteil") }}selected{{/if}}>{{localize "DSA41.vornachteil.kategorie.vorteil"}} </option>
<option value="nachteil" {{#if (eq item.system.kategorie "nachteil")}}selected{{/if}}>{{localize "DSA41.vornachteil.kategorie.nachteil"}} </option>
</select>
<div class="placeholder">{{localize "DSA41.vornachteil.kategorie.label"}}</div>
</div>
</div>
</div>
<div>
<prose-mirror name="system.beschreibung" value="{{item.system.beschreibung}}" compact="true">
</prose-mirror>
</div>
</div>

View File

@ -1,20 +1,28 @@
{ {
"TYPES": { "TYPES": {
"Actor": {
"Player": "Spieler"
},
"Item": { "Item": {
"Gegenstand": "Gegenstand", "Gegenstand": "Gegenstand",
"Ruestung": "Rüstung", "Ruestung": "Rüstung",
"Bewaffnung": "Bewaffnung", "Bewaffnung": "Bewaffnung",
"Talent": "Talent" "Talent": "Talent",
"Kampftalent": "Kampftalent",
"Sonderfertigkeit": "Sonderfertigkeit",
"VorNachteil": "Vor-/Nachteil"
} }
}, },
"DSA41": { "DSA41": {
"name": "Name", "name": "Name",
"race": "Rasse", "race": "Rasse",
"culture": "Kultur", "culture": "Kultur",
"profession": "Profession", "profession": "Profession",
"weight": "Gewicht", "sozialstatus": "Sozialstatus",
"price": "Preis", "weight": "Gewicht",
"price": "Preis",
"chat": { "chat": {
"result": "Ergebnis", "result": "Ergebnis",
@ -28,6 +36,56 @@
"talentwert_short": "TaW" "talentwert_short": "TaW"
}, },
"basiswerte": {
"label_basiswert": "Basiswert",
"label_modifikator": "Modifikator",
"label_zukauf": "Zukauf",
"label_verlust": "Verlust",
"label_total": "Total",
"lebenspunkte": "Lebenspunkte",
"ausdauer": "Ausdauer",
"astralenergie": "Astralenergie",
"magieresistenz": "Magieresistenz",
"initiative": "Initiative",
"attacke": "Attacke",
"parade": "Parade",
"fernkampf": "Fernkampf"
},
"vornachteil": {
"label_vorteile": "Vorteile",
"label_nachteile": "Nachteile",
"kosten": "Kosten",
"kategorie": {
"label": "Kategorie",
"vorteil": "Vorteil",
"nachteil": "Nachteil"
}
},
"sonderfertigkeiten": {
"label_allgemein": "Allgemeine Sonderfertigkeiten",
"label_kampf": "Kampf-Sonderfertigkeiten",
"label_magisch": "Magische Sonderfertigkeiten",
"label_klerikal": "Klerikale Sonderfertigkeiten",
"kosten": "Kosten",
"verbreitung": "Verbreitung",
"kategorie": {
"label": "Kategorie",
"allgemein": "Allgemein",
"kampf": "Kampf",
"magisch": "Magisch",
"klerikal": "Klerikal"
}
},
"roll_types": { "roll_types": {
"courage": "Mut", "courage": "Mut",
"cleverness": "Klugheit", "cleverness": "Klugheit",
@ -84,6 +142,30 @@
} }
}, },
"kampftalent": {
"label": "Kampftalent",
"label_kategorie": "Kategorie",
"label_steigern": "Steigern",
"kategorie":{
"waffenlos": "Waffenlos",
"nahkampf": "Bewaffneter Nahkampf",
"fernkampf": "Fernkampf"
},
"steigern": {
"A_Star": "A*",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"G": "G",
"H": "H"
}
},
"talente":{ "talente":{
"label": "Talent", "label": "Talent",
"label_eigenschaften": "Eigenschaften", "label_eigenschaften": "Eigenschaften",
@ -96,37 +178,7 @@
"label_attacke": "Attacke", "label_attacke": "Attacke",
"label_parade": "Parade", "label_parade": "Parade",
"label_attacke_total": "Attacke", "label_attacke_total": "Attacke",
"label_parade_total": "Parade", "label_parade_total": "Parade"
"name": {
"anderthalbhaender": "Anderthalbhänder",
"armbrust": "Armbrust",
"belagerungswaffen": "Belagerungswaffen",
"blasrohr": "Blasrohr",
"bogen": "Bogen",
"diskus": "Diskus",
"dolche": "Dolche",
"fechtwaffen": "Fechtwaffen",
"hiebwaffen": "Hiebwaffen",
"infanteriewaffen": "Infanteriewaffen",
"kettenstaebe": "Kettenstäbe",
"kettenwaffen": "Kettenwaffen",
"lanzenreiten": "Lanzenreiten",
"peitsche": "Peitsche",
"raufen": "Raufen",
"ringen": "Ringen",
"saebel": "Saebel",
"schleuder": "Schleuder",
"schwerter": "Schwerter",
"speere": "Speere",
"staebe": "Stäbe",
"wurfbeile": "Wurfbeile",
"wurfmesser": "Wurfmesser",
"wurfspeere": "Wurfspeere",
"zweihandflegel": "Zweihandflegel",
"zweihand_hiebwaffen": "Zweihand-Hiebwaffen",
"zweihandschwerter": "Zweihandschwerter/-säbel"
}
}, },
"koerperliche": { "koerperliche": {

View File

@ -1,6 +1,8 @@
.DSA41 { html {
font-size: 14px; font-size: 16px !important;
}
.DSA41 {
/* Change from FoundryVTT's default of 'none' to 'auto' to allow checkboxes in the nav bar */ /* Change from FoundryVTT's default of 'none' to 'auto' to allow checkboxes in the nav bar */
& .tabs > [data-tab] > * { & .tabs > [data-tab] > * {
pointer-events: auto; pointer-events: auto;
@ -180,6 +182,61 @@
&.die-fernkampf-trefferpunkte { fill: #a2a0ee; } &.die-fernkampf-trefferpunkte { fill: #a2a0ee; }
} }
& .bar {
--bar-percentage: 100%;
--bar-color-left: #951a84;
--bar-color-right: #cd22b6;
position: relative;
overflow: hidden;
margin: 1em;
border: 1px solid #9f9275;
border-radius: 5px;
text-align: center;
&::before {
position: absolute;
z-index: -1;
left: 0;
width: var(--bar-percentage);
height: 100%;
content: "";
background: linear-gradient(90deg, var(--bar-color-left) 0%, var(--bar-color-right) 100%);
}
& .editable-input, & span {
display: inline-block;
width: 4ch;
& input {
background: transparent;
padding: 0;
}
}
&.hp {
--bar-color-left: #401f25;
--bar-color-right: #861212;
}
&.ausdauer {
--bar-color-left: #114f0c;
--bar-color-right: #178010;
}
&.astralenergie {
--bar-color-left: #0e1155;
--bar-color-right: #141cb7;
}
}
& .tabs { & .tabs {
padding: .5rem; padding: .5rem;
margin-top: .5rem; margin-top: .5rem;
@ -204,6 +261,9 @@
& .list { & .list {
display: grid; display: grid;
grid-template-rows: max-content;
grid-auto-rows: max-content;
border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px;
box-shadow: 0 0 6px rgba(0, 0, 0, 0.45); box-shadow: 0 0 6px rgba(0, 0, 0, 0.45);
@ -217,7 +277,7 @@
display: grid; display: grid;
grid-column: 1 / -1; grid-column: 1 / -1;
grid-template-rows: subgrid; grid-template-rows: subgrid;
grid-template-columns: subgrid; grid-template-columns: subgrid;
align-items: center; align-items: center;
@ -231,7 +291,7 @@
display: grid; display: grid;
grid-column: 1 / -1; grid-column: 1 / -1;
grid-template-rows: subgrid; grid-template-rows: subgrid;
grid-template-columns: subgrid; grid-template-columns: subgrid;
align-items: center; align-items: center;
@ -282,10 +342,26 @@
gap: 0.5rem; gap: 0.5rem;
} }
& .Basiswerte { & .Basiswerte {
display: grid; display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr)); grid-template-columns: minmax(0, max-content) repeat(5, minmax(0, 1fr));
align-items: center;
& .list-header :not(:nth-child(1)), .list-item :not(:nth-child(1)) {
text-align: center;
}
}
& .Sonderfertigkeiten {
grid-template-columns: minmax(min-content, max-content) auto min-content;
}
& .Vorteile {
grid-template-columns: minmax(min-content, max-content) auto min-content;
}
& .Nachteile {
grid-template-columns: minmax(min-content, max-content) auto min-content;
} }
} }
@ -322,6 +398,10 @@
grid-template-columns: 2fr repeat(8, 1fr) repeat(2, 1.5fr); grid-template-columns: 2fr repeat(8, 1fr) repeat(2, 1.5fr);
text-align: center; text-align: center;
} }
& .Sonderfertigkeiten {
grid-template-columns: minmax(min-content, max-content) auto min-content;
}
} }
} }
} }
@ -349,3 +429,13 @@
} }
} }
} }
#tooltip.DSA41 {
max-width: 650px;
text-align: left;
& h4 {
font-size: large;
}
}

View File

@ -14,10 +14,13 @@ Hooks.once("init", async function() {
CONFIG.Actor.dataModels.Player = DSA41_CharacterData; CONFIG.Actor.dataModels.Player = DSA41_CharacterData;
CONFIG.Actor.documentClass = DSA41_CharacterDocument; CONFIG.Actor.documentClass = DSA41_CharacterDocument;
CONFIG.Item.dataModels.Gegenstand = DSA41_GegenstandData; CONFIG.Item.dataModels.Gegenstand = DSA41_GegenstandData;
CONFIG.Item.dataModels.Ruestung = DSA41_RuestungData; CONFIG.Item.dataModels.Ruestung = DSA41_RuestungData;
CONFIG.Item.dataModels.Bewaffnung = DSA41_BewaffnungData; CONFIG.Item.dataModels.Bewaffnung = DSA41_BewaffnungData;
CONFIG.Item.dataModels.Talent = DSA41_TalentData; CONFIG.Item.dataModels.Talent = DSA41_TalentData;
CONFIG.Item.dataModels.Kampftalent = DSA41_KampftalentData;
CONFIG.Item.dataModels.Sonderfertigkeit = DSA41_SonderfertigkeitData;
CONFIG.Item.dataModels.VorNachteil = DSA41_VorNachteilData;
DocumentSheetConfig.unregisterSheet(Actor, "core", ActorSheet); DocumentSheetConfig.unregisterSheet(Actor, "core", ActorSheet);
DocumentSheetConfig.registerSheet(Actor, "dsa41", DSA41_ActorSheet, { DocumentSheetConfig.registerSheet(Actor, "dsa41", DSA41_ActorSheet, {
@ -35,14 +38,22 @@ Hooks.once("init", async function() {
"Ruestung", "Ruestung",
"Bewaffnung", "Bewaffnung",
"Talent", "Talent",
"Kampftalent",
"Sonderfertigkeit",
"VorNachteil",
] ]
}); });
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;
if (prefix) if (prefix) {
return game.i18n.localize(prefix + "." + value); const id = prefix + "." + value;
const localized = game.i18n.localize(id);
return id === localized ? value : localized;
}
return value; return value;
} }
}); });
@ -121,18 +132,6 @@ class AttributeField extends SchemaField {
} }
} }
class CombatTalentField extends SchemaField {
constructor() {
return super({
talentwert: new NumberField({ integer: true, initial: 0 }),
attacke: new NumberField({ integer: true, initial: 0 }),
parade: new NumberField({ integer: true, initial: 0 }),
});
}
}
class DSA41_CharacterDocument extends Actor { class DSA41_CharacterDocument extends Actor {
static async create(data, operation) { static async create(data, operation) {
const actor = await super.create(data, operation); const actor = await super.create(data, operation);
@ -174,6 +173,14 @@ class DSA41_CharacterDocument extends Actor {
"Lederarbeiten", "Lederarbeiten",
"Malen/Zeichnen", "Malen/Zeichnen",
"Schneidern", "Schneidern",
// Basis Kampftalente
"Dolche",
"Hiebwaffen",
"Raufen",
"Ringen",
"Säbel",
"Wurfmesser",
]}); ]});
await actor.createEmbeddedDocuments("Item", talente); await actor.createEmbeddedDocuments("Item", talente);
@ -186,9 +193,10 @@ class DSA41_CharacterDocument extends Actor {
class DSA41_CharacterData extends TypeDataModel { class DSA41_CharacterData extends TypeDataModel {
static defineSchema() { static defineSchema() {
return { return {
race: new StringField(), race: new StringField(),
culture: new StringField(), culture: new StringField(),
profession: new StringField(), profession: new StringField(),
sozialstatus: new NumberField({ integer: true, inital: 1 }),
attributes: new SchemaField({ attributes: new SchemaField({
courage: new AttributeField(), courage: new AttributeField(),
@ -201,35 +209,41 @@ class DSA41_CharacterData extends TypeDataModel {
strength: new AttributeField(), strength: new AttributeField(),
}), }),
kampf_talente: new SchemaField({ lebenspunkte: new SchemaField({
anderthalbhaender: new CombatTalentField(), modifikator: new NumberField({integer: true, initial: 0}),
armbrust: new CombatTalentField(), zukauf: new NumberField({integer: true, initial: 0}),
belagerungswaffen: new CombatTalentField(), verlust: new NumberField({integer: true, initial: 0}),
blasrohr: new CombatTalentField(),
bogen: new CombatTalentField(), aktuell: new NumberField({integer: true, initial: 0}),
diskus: new CombatTalentField(),
dolche: new CombatTalentField(),
fechtwaffen: new CombatTalentField(),
hiebwaffen: new CombatTalentField(),
infanteriewaffen: new CombatTalentField(),
kettenstaebe: new CombatTalentField(),
kettenwaffen: new CombatTalentField(),
lanzenreiten: new CombatTalentField(),
peitsche: new CombatTalentField(),
raufen: new CombatTalentField(),
ringen: new CombatTalentField(),
saebel: new CombatTalentField(),
schleuder: new CombatTalentField(),
schwerter: new CombatTalentField(),
speere: new CombatTalentField(),
staebe: new CombatTalentField(),
wurfbeile: new CombatTalentField(),
wurfmesser: new CombatTalentField(),
wurfspeere: new CombatTalentField(),
zweihandflegel: new CombatTalentField(),
zweihand_hiebwaffen: new CombatTalentField(),
zweihandschwerter: new CombatTalentField(),
}), }),
ausdauer: new SchemaField({
modifikator: new NumberField({integer: true, initial: 0}),
zukauf: new NumberField({integer: true, initial: 0}),
verlust: new NumberField({integer: true, initial: 0}),
aktuell: new NumberField({integer: true, initial: 0}),
}),
astralenergie: new SchemaField({
modifikator: new NumberField({integer: true, initial: 0}),
zukauf: new NumberField({integer: true, initial: 0}),
verlust: new NumberField({integer: true, initial: 0}),
aktuell: new NumberField({integer: true, initial: 0}),
}),
magieresistenz: new SchemaField({
modifikator: new NumberField({integer: true, initial: 0}),
zukauf: new NumberField({integer: true, initial: 0}),
aktuell: new NumberField({integer: true, initial: 0}),
}),
modifikator_initiative: new NumberField({integer: true, initial: 0}),
modifikator_attacke: new NumberField({integer: true, initial: 0}),
modifikator_parade: new NumberField({integer: true, initial: 0}),
modifikator_fernkampf: new NumberField({integer: true, initial: 0}),
} }
} }
@ -265,15 +279,40 @@ class DSA41_CharacterData extends TypeDataModel {
this.computed.attributes_without_modifiers[attribute] = values.initial + values.advancement; this.computed.attributes_without_modifiers[attribute] = values.initial + values.advancement;
} }
this.computed.max_lebenspunkte = Math.round((this.computed.attributes_without_modifiers.constitution + this.computed.attributes_without_modifiers.constitution + this.computed.attributes_without_modifiers.strength) / 2); this.computed.lebenspunkte = {};
this.computed.max_ausdauer = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.constitution + this.computed.attributes_without_modifiers.agility) / 2); this.computed.ausdauer = {};
this.computed.max_atralenergie = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.intuition + this.computed.attributes_without_modifiers.charisma) / 2); this.computed.astralenergie = {};
this.computed.magieresistenz = {};
this.computed.magieresistenz = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.cleverness + this.computed.attributes_without_modifiers.constitution) / 5); this.computed.lebenspunkte.basiswert = Math.round((this.computed.attributes_without_modifiers.constitution + this.computed.attributes_without_modifiers.constitution + this.computed.attributes_without_modifiers.strength) / 2);
this.computed.ini_basiswert = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.intuition + this.computed.attributes_without_modifiers.agility) / 5); this.computed.ausdauer.basiswert = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.constitution + this.computed.attributes_without_modifiers.agility) / 2);
this.computed.at_basiswert = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.agility + this.computed.attributes_without_modifiers.strength) / 5);; this.computed.astralenergie.basiswert = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.intuition + this.computed.attributes_without_modifiers.charisma) / 2);
this.computed.pa_basiswert = Math.round((this.computed.attributes_without_modifiers.intuition + this.computed.attributes_without_modifiers.agility + this.computed.attributes_without_modifiers.strength) / 5);; this.computed.magieresistenz.basiswert = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.cleverness + this.computed.attributes_without_modifiers.constitution) / 5);
this.computed.fk_basiswert = Math.round((this.computed.attributes_without_modifiers.intuition + this.computed.attributes_without_modifiers.dexterity + this.computed.attributes_without_modifiers.strength) / 5);;
this.computed.lebenspunkte.max = this.computed.lebenspunkte.basiswert + this.lebenspunkte.modifikator + this.lebenspunkte.zukauf - this.lebenspunkte.verlust;
this.computed.ausdauer.max = this.computed.ausdauer.basiswert + this.ausdauer.modifikator + this.ausdauer.zukauf - this.ausdauer.verlust;
this.computed.astralenergie.max = this.computed.astralenergie.basiswert + this.astralenergie.modifikator + this.astralenergie.zukauf - this.astralenergie.verlust;
this.computed.magieresistenz.max = this.computed.magieresistenz.basiswert + this.magieresistenz.modifikator + this.magieresistenz.zukauf;
this.computed.lebenspunkte.prozent = this.lebenspunkte.aktuell / this.computed.lebenspunkte.max * 100;
this.computed.ausdauer.prozent = this.ausdauer.aktuell / this.computed.ausdauer.max * 100;
this.computed.astralenergie.prozent = this.astralenergie.aktuell / this.computed.astralenergie.max * 100;
this.computed.magieresistenz.prozent = this.magieresistenz.aktuell / this.computed.magieresistenz.max * 100;
this.computed.initiative = {};
this.computed.attacke = {};
this.computed.parade = {};
this.computed.fernkampf = {};
this.computed.initiative.basiswert = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.intuition + this.computed.attributes_without_modifiers.agility) / 5);
this.computed.attacke.basiswert = Math.round((this.computed.attributes_without_modifiers.courage + this.computed.attributes_without_modifiers.agility + this.computed.attributes_without_modifiers.strength) / 5);
this.computed.parade.basiswert = Math.round((this.computed.attributes_without_modifiers.intuition + this.computed.attributes_without_modifiers.agility + this.computed.attributes_without_modifiers.strength) / 5);
this.computed.fernkampf.basiswert = Math.round((this.computed.attributes_without_modifiers.intuition + this.computed.attributes_without_modifiers.dexterity + this.computed.attributes_without_modifiers.strength) / 5);
this.computed.initiative.wert = this.computed.initiative.basiswert + this.modifikator_initiative;
this.computed.attacke.wert = this.computed.attacke.basiswert + this.modifikator_attacke;
this.computed.parade.wert = this.computed.parade.basiswert + this.modifikator_parade;
this.computed.fernkampf.wert = this.computed.fernkampf.basiswert + this.modifikator_fernkampf;
const equipped_ruestungen = this.parent.items.filter((x) => x.type === "Ruestung"); const equipped_ruestungen = this.parent.items.filter((x) => x.type === "Ruestung");
for (const item of equipped_ruestungen) { for (const item of equipped_ruestungen) {
@ -295,10 +334,14 @@ class DSA41_CharacterData extends TypeDataModel {
this.computed.kampf.ruestungen_gesamt[key] = Math.round(value); this.computed.kampf.ruestungen_gesamt[key] = Math.round(value);
} }
for(const [name, values] of Object.entries(this.kampf_talente)) { this.kampftalente = this.parent.items.filter((x) => x.type === "Kampftalent").sort((a, b) => a.name > b.name);
this.computed.kampf.talente[name] = {}; for(const talent of this.kampftalente) {
this.computed.kampf.talente[name].attacke = this.computed.at_basiswert + values.attacke; this.computed.kampf.talente[talent.name] = {};
this.computed.kampf.talente[name].parade = this.computed.pa_basiswert + values.parade; this.computed.kampf.talente[talent.name].attacke = this.computed.at_basiswert + talent.system.attacke;
this.computed.kampf.talente[talent.name].parade = this.computed.pa_basiswert + talent.system.parade;
this.computed.kampf.talente[talent.name].talent_attacke = talent.system.attacke;
this.computed.kampf.talente[talent.name].talent_parade = talent.system.parade;
} }
const equipped_bewaffnung = this.parent.items.filter((x) => x.type === "Bewaffnung"); const equipped_bewaffnung = this.parent.items.filter((x) => x.type === "Bewaffnung");
@ -339,8 +382,8 @@ class DSA41_CharacterData extends TypeDataModel {
const talent = item.system.nahkampfwaffe.kampftalente; const talent = item.system.nahkampfwaffe.kampftalente;
computed.talent_attacke = this.kampf_talente[talent]?.attacke ?? 0; computed.talent_attacke = this.computed.kampf.talente[talent]?.talent_attacke ?? 0;
computed.talent_parade = this.kampf_talente[talent]?.parade ?? 0; computed.talent_parade = this.computed.kampf.talente[talent]?.talent_parade ?? 0;
computed.modifikator_attacke = item.system.nahkampfwaffe.modifikator_attacke; computed.modifikator_attacke = item.system.nahkampfwaffe.modifikator_attacke;
computed.modifikator_parade = item.system.nahkampfwaffe.modifikator_parade; computed.modifikator_parade = item.system.nahkampfwaffe.modifikator_parade;
@ -385,7 +428,7 @@ class DSA41_CharacterData extends TypeDataModel {
computed.basis_attacke = this.computed.fk_basiswert; computed.basis_attacke = this.computed.fk_basiswert;
const talent = item.system.nahkampfwaffe.kampftalente; const talent = item.system.nahkampfwaffe.kampftalente;
computed.talent_attacke = this.kampf_talente[talent]?.attacke ?? 0; computed.talent_attacke = this.computed.kampf.talente[talent]?.talent_attacke ?? 0;
computed.attacke = computed.basis_attacke + computed.talent_attacke; computed.attacke = computed.basis_attacke + computed.talent_attacke;
@ -516,7 +559,7 @@ class DSA41_BewaffnungData extends TypeDataModel {
class DSA41_TalentData extends TypeDataModel { class DSA41_TalentData extends TypeDataModel {
static defineSchema() { static defineSchema() {
return { return {
kategorie: new StringField(), kategorie: new StringField(),
behinderung: new StringField(), behinderung: new StringField(),
attribute1: new StringField(), attribute1: new StringField(),
@ -528,6 +571,45 @@ class DSA41_TalentData extends TypeDataModel {
} }
} }
class DSA41_KampftalentData extends TypeDataModel {
static defineSchema() {
return {
kategorie: new StringField(),
behinderung: new StringField(),
steigern: new StringField(),
beschreibung: new StringField(),
talentwert: new NumberField({ integer: true, initial: 0 }),
attacke: new NumberField({ integer: true, initial: 0 }),
parade: new NumberField({ integer: true, initial: 0 }),
};
}
}
class DSA41_SonderfertigkeitData extends TypeDataModel {
static defineSchema() {
return {
kategorie: new StringField(),
kosten: new NumberField({ integer: true, initial: 0 }),
verbreitung: new NumberField({ integer: true, initial: 0 }),
beschreibung: new StringField(),
};
}
}
class DSA41_VorNachteilData extends TypeDataModel {
static defineSchema() {
return {
kategorie: new StringField(),
kosten: new NumberField({ integer: true, initial: 0 }),
beschreibung: new StringField(),
};
}
}
function DSA41_ApplicationMixin(BaseApplication) { function DSA41_ApplicationMixin(BaseApplication) {
class DSA41_Application extends HandlebarsApplicationMixin(BaseApplication) { class DSA41_Application extends HandlebarsApplicationMixin(BaseApplication) {
static DEFAULT_OPTIONS= { static DEFAULT_OPTIONS= {
@ -859,10 +941,13 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
class DSA41_ItemSheetV2 extends DSA41_ApplicationMixin(ItemSheetV2) { class DSA41_ItemSheetV2 extends DSA41_ApplicationMixin(ItemSheetV2) {
static PARTS = { static PARTS = {
Bewaffnung: { template: "systems/dsa-4th-edition/src/ItemSheets/Bewaffnung.hbs" }, Bewaffnung: { template: "systems/dsa-4th-edition/src/ItemSheets/Bewaffnung.hbs" },
Gegenstand: { template: "systems/dsa-4th-edition/src/ItemSheets/Gegenstand.hbs" }, Gegenstand: { template: "systems/dsa-4th-edition/src/ItemSheets/Gegenstand.hbs" },
Ruestung: { template: "systems/dsa-4th-edition/src/ItemSheets/Ruestung.hbs" }, Ruestung: { template: "systems/dsa-4th-edition/src/ItemSheets/Ruestung.hbs" },
Talent: { template: "systems/dsa-4th-edition/src/ItemSheets/Talent.hbs" }, Talent: { template: "systems/dsa-4th-edition/src/ItemSheets/Talent.hbs" },
Kampftalent: { template: "systems/dsa-4th-edition/src/ItemSheets/Kampftalent.hbs" },
Sonderfertigkeit: { template: "systems/dsa-4th-edition/src/ItemSheets/Sonderfertigkeit.hbs" },
VorNachteil: { template: "systems/dsa-4th-edition/src/ItemSheets/VorNachteil.hbs" },
}; };
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {

View File

@ -14,7 +14,10 @@
"Ruestung": {}, "Ruestung": {},
"Bewaffnung": {}, "Bewaffnung": {},
"Talent": {} "Talent": {},
"Kampftalent": {},
"Sonderfertigkeit": {},
"VorNachteil": {}
} }
}, },

View File

@ -8,17 +8,17 @@ const talente: system.ItemCompendium = .{ .entries = &.{
.{ .Folder = .{ .name = "Körperliche Talente", .entries = &.{ .{ .Folder = .{ .name = "Körperliche Talente", .entries = &.{
.{ .Talent = .{ .name = "Akrobatik", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .GE, .attribute3 = .KK, .behinderung = "@BE * 2" } } }, .{ .Talent = .{ .name = "Akrobatik", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .GE, .attribute3 = .KK, .behinderung = "@BE * 2" } } },
.{ .Talent = .{ .name = "Athletik", .system = .{ .kategorie = .koerperliche, .attribute1 = .GE, .attribute2 = .KO, .attribute3 = .KK, .behinderung = "@BE * 2" } } }, .{ .Talent = .{ .name = "Athletik", .system = .{ .kategorie = .koerperliche, .attribute1 = .GE, .attribute2 = .KO, .attribute3 = .KK, .behinderung = "@BE * 2" } } },
.{ .Talent = .{ .name = "Fliegen", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .IN, .attribute3 = .GE, .behinderung = "" } } }, .{ .Talent = .{ .name = "Fliegen", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .IN, .attribute3 = .GE, .behinderung = "@BE" } } },
.{ .Talent = .{ .name = "Gaukeleien", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .CH, .attribute3 = .FF, .behinderung = "" } } }, .{ .Talent = .{ .name = "Gaukeleien", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .CH, .attribute3 = .FF, .behinderung = "@BE * 2" } } },
.{ .Talent = .{ .name = "Klettern", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .GE, .attribute3 = .KK, .behinderung = "" } } }, .{ .Talent = .{ .name = "Klettern", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .GE, .attribute3 = .KK, .behinderung = "@BE * 2" } } },
.{ .Talent = .{ .name = "Körperbeherrschung", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .IN, .attribute3 = .GE, .behinderung = "@BE * 2" } } }, .{ .Talent = .{ .name = "Körperbeherrschung", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .IN, .attribute3 = .GE, .behinderung = "@BE * 2" } } },
.{ .Talent = .{ .name = "Reiten", .system = .{ .kategorie = .koerperliche, .attribute1 = .CH, .attribute2 = .GE, .attribute3 = .KK, .behinderung = "@BE - 2" } } }, .{ .Talent = .{ .name = "Reiten", .system = .{ .kategorie = .koerperliche, .attribute1 = .CH, .attribute2 = .GE, .attribute3 = .KK, .behinderung = "@BE - 2" } } },
.{ .Talent = .{ .name = "Schleichen", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .IN, .attribute3 = .GE, .behinderung = "@BE" } } }, .{ .Talent = .{ .name = "Schleichen", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .IN, .attribute3 = .GE, .behinderung = "@BE" } } },
.{ .Talent = .{ .name = "Schwimmen", .system = .{ .kategorie = .koerperliche, .attribute1 = .GE, .attribute2 = .KO, .attribute3 = .KK, .behinderung = "@BE * 2" } } }, .{ .Talent = .{ .name = "Schwimmen", .system = .{ .kategorie = .koerperliche, .attribute1 = .GE, .attribute2 = .KO, .attribute3 = .KK, .behinderung = "@BE * 2" } } },
.{ .Talent = .{ .name = "Selbstbeherrschung", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .KO, .attribute3 = .KK, .behinderung = "" } } }, .{ .Talent = .{ .name = "Selbstbeherrschung", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .KO, .attribute3 = .KK, .behinderung = "" } } },
.{ .Talent = .{ .name = "Sich Verstecken", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .IN, .attribute3 = .GE, .behinderung = "@BE * 2" } } }, .{ .Talent = .{ .name = "Sich Verstecken", .system = .{ .kategorie = .koerperliche, .attribute1 = .MU, .attribute2 = .IN, .attribute3 = .GE, .behinderung = "@BE - 2" } } },
.{ .Talent = .{ .name = "Singen", .system = .{ .kategorie = .koerperliche, .attribute1 = .IN, .attribute2 = .CH, .attribute3 = .CH, .behinderung = "" } } }, .{ .Talent = .{ .name = "Singen", .system = .{ .kategorie = .koerperliche, .attribute1 = .IN, .attribute2 = .CH, .attribute3 = .CH, .behinderung = "@BE - 3" } } },
.{ .Talent = .{ .name = "Singen", .system = .{ .kategorie = .koerperliche, .attribute1 = .IN, .attribute2 = .CH, .attribute3 = .KO, .behinderung = "" } } }, .{ .Talent = .{ .name = "Singen", .system = .{ .kategorie = .koerperliche, .attribute1 = .IN, .attribute2 = .CH, .attribute3 = .KO, .behinderung = "@BE - 3" } } },
.{ .Talent = .{ .name = "Sinnenschärfe", .system = .{ .kategorie = .koerperliche, .attribute1 = .KL, .attribute2 = .IN, .attribute3 = .IN, .behinderung = "" } } }, .{ .Talent = .{ .name = "Sinnenschärfe", .system = .{ .kategorie = .koerperliche, .attribute1 = .KL, .attribute2 = .IN, .attribute3 = .IN, .behinderung = "" } } },
.{ .Talent = .{ .name = "Sinnenschärfe", .system = .{ .kategorie = .koerperliche, .attribute1 = .KL, .attribute2 = .IN, .attribute3 = .FF, .behinderung = "" } } }, .{ .Talent = .{ .name = "Sinnenschärfe", .system = .{ .kategorie = .koerperliche, .attribute1 = .KL, .attribute2 = .IN, .attribute3 = .FF, .behinderung = "" } } },
.{ .Talent = .{ .name = "Skifahren", .system = .{ .kategorie = .koerperliche, .attribute1 = .GE, .attribute2 = .GE, .attribute3 = .KO, .behinderung = "@BE - 2" } } }, .{ .Talent = .{ .name = "Skifahren", .system = .{ .kategorie = .koerperliche, .attribute1 = .GE, .attribute2 = .GE, .attribute3 = .KO, .behinderung = "@BE - 2" } } },
@ -131,6 +131,37 @@ const talente: system.ItemCompendium = .{ .entries = &.{
.{ .Talent = .{ .name = "Winzer", .system = .{ .kategorie = .handwerks, .attribute1 = .KL, .attribute2 = .FF, .attribute3 = .KK, .behinderung = "" } } }, .{ .Talent = .{ .name = "Winzer", .system = .{ .kategorie = .handwerks, .attribute1 = .KL, .attribute2 = .FF, .attribute3 = .KK, .behinderung = "" } } },
.{ .Talent = .{ .name = "Zimmermann", .system = .{ .kategorie = .handwerks, .attribute1 = .KL, .attribute2 = .FF, .attribute3 = .KK, .behinderung = "" } } }, .{ .Talent = .{ .name = "Zimmermann", .system = .{ .kategorie = .handwerks, .attribute1 = .KL, .attribute2 = .FF, .attribute3 = .KK, .behinderung = "" } } },
}}}, }}},
// Kampftalente
.{ .Folder = .{ .name = "Kampftalente", .entries = &.{
.{ .Kampftalent = .{ .name = "Anderthalbhänder", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Armbrust", .system = .{ .kategorie = .fernkampf, .steigern = .C, .behinderung = "@BE - 5" } } },
.{ .Kampftalent = .{ .name = "Belagerungswaffen", .system = .{ .kategorie = .fernkampf, .steigern = .D, .behinderung = "" } } },
.{ .Kampftalent = .{ .name = "Blasrohr", .system = .{ .kategorie = .fernkampf, .steigern = .D, .behinderung = "@BE - 5" } } },
.{ .Kampftalent = .{ .name = "Bogen", .system = .{ .kategorie = .fernkampf, .steigern = .E, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Diskus", .system = .{ .kategorie = .fernkampf, .steigern = .D, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Dolche", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 1" } } },
.{ .Kampftalent = .{ .name = "Fechtwaffen", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 1" } } },
.{ .Kampftalent = .{ .name = "Hiebwaffen", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 4" } } },
.{ .Kampftalent = .{ .name = "Infanteriewaffen", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Kettenstäbe", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 1" } } },
.{ .Kampftalent = .{ .name = "Kettenwaffen", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
// .{ .Kampftalent = .{ .name = "Lanzenreiten", .system = .{ .kategorie = .???, .steigern = .E, .behinderung = "" } } },
// .{ .Kampftalent = .{ .name = "Peitsche", .system = .{ .kategorie = .???, .steigern = .E, .behinderung = "@BE - 1" } } },
.{ .Kampftalent = .{ .name = "Raufen", .system = .{ .kategorie = .waffenlos, .steigern = .C, .behinderung = "@BE" } } },
.{ .Kampftalent = .{ .name = "Ringen", .system = .{ .kategorie = .waffenlos, .steigern = .D, .behinderung = "@BE" } } },
.{ .Kampftalent = .{ .name = "Saebel", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Schleuder", .system = .{ .kategorie = .fernkampf, .steigern = .E, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Schwerter", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Speere", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Stäbe", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Wurfbeile", .system = .{ .kategorie = .fernkampf, .steigern = .D, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Wurfmesser", .system = .{ .kategorie = .fernkampf, .steigern = .C, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Wurfspeere", .system = .{ .kategorie = .fernkampf, .steigern = .C, .behinderung = "@BE - 2" } } },
.{ .Kampftalent = .{ .name = "Zweihandflegel", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Zweihand-Hiebwaffen", .system = .{ .kategorie = .nahkampf, .steigern = .D, .behinderung = "@BE - 3" } } },
.{ .Kampftalent = .{ .name = "Zweihandschwerter/-säbel", .system = .{ .kategorie = .nahkampf, .steigern = .E, .behinderung = "@BE - 2" } } },
}}},
}}; }};
pub fn main() !void { pub fn main() !void {

View File

@ -120,6 +120,32 @@ pub const ItemCompendium = foundry.Compendium(.Item, union(enum) {
talentwert: u8 = 0, talentwert: u8 = 0,
}), }),
Kampftalent: foundry.Item("Kampftalent", struct {
kategorie: enum {
waffenlos,
nahkampf,
fernkampf,
},
steigern: enum {
A_Star,
A,
B,
C,
D,
E,
F,
G,
H,
},
behinderung: String = "",
beschreibung: String = "",
talentwert: u8 = 0,
attacke: u8 = 0,
parade: u8 = 0,
}),
}); });
const Attribute = enum { const Attribute = enum {