Update powers

This commit is contained in:
LeRatierBretonnien 2023-02-08 21:19:53 +01:00
parent d7dc6fbb42
commit 87bb1b6e93
16 changed files with 2761 additions and 2060 deletions

View File

@ -11,6 +11,7 @@
"WH.conf.mediumshield": "Medium", "WH.conf.mediumshield": "Medium",
"WH.conf.towershield": "Tower", "WH.conf.towershield": "Tower",
"WH.conf.polearm": "Polearm", "WH.conf.polearm": "Polearm",
"WH.conf.special": "Special",
"WH.conf.head": "Head", "WH.conf.head": "Head",
"WH.conf.cloak": "Cloak", "WH.conf.cloak": "Cloak",

View File

@ -49,7 +49,7 @@ export class WarheroActorSheet extends ActorSheet {
conditions: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getConditions()) ), conditions: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getConditions()) ),
armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())), armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())), shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
powers: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getPowers())), powers: this.actor.sortPowers(),
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ), equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
slotEquipments: this.actor.buildEquipmentsSlot(), slotEquipments: this.actor.buildEquipmentsSlot(),
subActors: duplicate(this.actor.getSubActors()), subActors: duplicate(this.actor.getSubActors()),
@ -168,7 +168,11 @@ export class WarheroActorSheet extends ActorSheet {
const weaponId = li.data("item-id") const weaponId = li.data("item-id")
this.actor.rollDamage(weaponId) this.actor.rollDamage(weaponId)
}); });
html.find('.roll-damage-2hands').click((event) => {
const li = $(event.currentTarget).parents(".item")
const weaponId = li.data("item-id")
this.actor.rollDamage(weaponId, true)
});
html.find('.lock-unlock-sheet').click((event) => { html.find('.lock-unlock-sheet').click((event) => {
this.options.editScore = !this.options.editScore; this.options.editScore = !this.options.editScore;
this.render(true); this.render(true);

View File

@ -133,6 +133,19 @@ export class WarheroActor extends Actor {
WarheroUtility.sortArrayObjectsByName(comp) WarheroUtility.sortArrayObjectsByName(comp)
return comp; return comp;
} }
sortPowers() {
let schools = {}
for(let power of this.items) {
if (power.type == "power") {
power = duplicate(power)
let school = schools[power.system.magicschool] || []
school.push(power)
WarheroUtility.sortArrayObjectsByNameAndLevel(school)
schools[power.system.magicschool] = school
}
}
return schools
}
/* -------------------------------------------- */ /* -------------------------------------------- */
getShields() { getShields() {
let comp = duplicate(this.items.filter(item => item.type == 'shield') || []); let comp = duplicate(this.items.filter(item => item.type == 'shield') || []);
@ -186,12 +199,16 @@ export class WarheroActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
prepareWeapon(weapon) { prepareWeapon(weapon) {
let formula = weapon.system.damage let formula = weapon.system.damage
if (weapon.system.weapontype == "long") { if (weapon.system.weapontype == "long" || weapon.system.weapontype == "short") {
formula += "+" + this.system.statistics.str.value formula += "+" + this.system.statistics.str.value
} }
if (weapon.system.weapontype == "twohanded") { if (weapon.system.weapontype == "twohanded") {
formula += "+" + Math.floor(this.system.statistics.str.value*1.5) formula += "+" + Math.floor(this.system.statistics.str.value*1.5)
} }
if (weapon.system.weapontype == "polearm") {
formula += "+" + Math.floor(this.system.statistics.str.value*1)
weapon.damageFormula2Hands = weapon.system.damage2hands + "+" + Math.floor(this.system.statistics.str.value*1.5)
}
weapon.damageFormula = formula weapon.damageFormula = formula
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -664,7 +681,7 @@ export class WarheroActor extends Actor {
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
rollDamage(weaponId) { rollDamage(weaponId, is2hands = false) {
let weapon = this.items.get(weaponId) let weapon = this.items.get(weaponId)
if (weapon) { if (weapon) {
weapon = duplicate(weapon) weapon = duplicate(weapon)
@ -672,6 +689,7 @@ export class WarheroActor extends Actor {
let rollData = this.getCommonRollData() let rollData = this.getCommonRollData()
rollData.mode = "damage" rollData.mode = "damage"
rollData.weapon = weapon rollData.weapon = weapon
rollData.is2hands = is2hands
rollData.img = weapon.img rollData.img = weapon.img
this.startRoll(rollData) this.startRoll(rollData)
} }

View File

@ -7,6 +7,7 @@ export const WARHERO_CONFIG = {
polearm: {damage: "1d6", label: "WH.conf.polearm"}, polearm: {damage: "1d6", label: "WH.conf.polearm"},
shooting: {damage: "2d6", label: "WH.conf.shooting"}, shooting: {damage: "2d6", label: "WH.conf.shooting"},
throwing: {damage: "1d8", label: "WH.conf.throwing"}, throwing: {damage: "1d8", label: "WH.conf.throwing"},
special: {damage: "1d6", label: "WH.conf.special"},
}, },
armorTypes : { armorTypes : {

View File

@ -12,6 +12,7 @@ import { WarheroActor } from "./warhero-actor.js";
import { WarheroItemSheet } from "./warhero-item-sheet.js"; import { WarheroItemSheet } from "./warhero-item-sheet.js";
import { WarheroActorSheet } from "./warhero-actor-sheet.js"; import { WarheroActorSheet } from "./warhero-actor-sheet.js";
import { WarheroNPCSheet } from "./warhero-npc-sheet.js"; import { WarheroNPCSheet } from "./warhero-npc-sheet.js";
import { WarheroMonsterSheet } from "./warhero-monster-sheet.js";
import { WarheroUtility } from "./warhero-utility.js"; import { WarheroUtility } from "./warhero-utility.js";
import { WarheroCombat } from "./warhero-combat.js"; import { WarheroCombat } from "./warhero-combat.js";
import { WarheroItem } from "./warhero-item.js"; import { WarheroItem } from "./warhero-item.js";
@ -60,11 +61,12 @@ Hooks.once("init", async function () {
/* -------------------------------------------- */ /* -------------------------------------------- */
// Register sheet application classes // Register sheet application classes
Actors.unregisterSheet("core", ActorSheet); Actors.unregisterSheet("core", ActorSheet);
Actors.registerSheet("fvtt-crucible", WarheroActorSheet, { types: ["character"], makeDefault: true }); Actors.registerSheet("fvtt-warhero", WarheroActorSheet, { types: ["character"], makeDefault: true });
Actors.registerSheet("fvtt-crucible", WarheroNPCSheet, { types: ["npc"], makeDefault: false }); Actors.registerSheet("fvtt-warhero", WarheroNPCSheet, { types: ["npc"], makeDefault: false });
Actors.registerSheet("fvtt-warhero", WarheroMonsterSheet, { types: ["monster"], makeDefault: false });
Items.unregisterSheet("core", ItemSheet); Items.unregisterSheet("core", ItemSheet);
Items.registerSheet("fvtt-crucible", WarheroItemSheet, { makeDefault: true }); Items.registerSheet("fvtt-warhero", WarheroItemSheet, { makeDefault: true });
WarheroUtility.init() WarheroUtility.init()
}); });

View File

@ -0,0 +1,27 @@
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
import { WarheroActorSheet } from "./warhero-actor-sheet.js";
import { WarheroUtility } from "./warhero-utility.js";
/* -------------------------------------------- */
export class WarheroMonsterSheet extends WarheroActorSheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
classes: ["warhero-rpg", "sheet", "actor"],
template: "systems/fvtt-warhero/templates/npc-sheet.html",
width: 640,
height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
editScore: true
});
}
}

View File

@ -2,18 +2,18 @@
* Extend the basic ActorSheet with some very simple modifications * Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet} * @extends {ActorSheet}
*/ */
import { WarheroActorSheet } from "./warhero-actor-sheet.js";
import { WarheroUtility } from "./warhero-utility.js"; import { WarheroUtility } from "./warhero-utility.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class WarheroNPCSheet extends ActorSheet { export class WarheroNPCSheet extends WarheroActorSheet {
/** @override */ /** @override */
static get defaultOptions() { static get defaultOptions() {
return mergeObject(super.defaultOptions, { return mergeObject(super.defaultOptions, {
classes: ["warhero-rpg", "sheet", "actor"], classes: ["warhero-rpg", "sheet", "actor"],
template: "systems/fvtt-warhero/templates/npc-sheet.html", template: "systems/fvtt-warhero/templates/monster-sheet.html",
width: 640, width: 640,
height: 720, height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }], tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
@ -22,188 +22,4 @@ export class WarheroNPCSheet extends ActorSheet {
}); });
} }
/* -------------------------------------------- */
async getData() {
const objectData = this.object.system
let actorData = duplicate(objectData)
let formData = {
title: this.title,
id: this.actor.id,
type: this.actor.type,
img: this.actor.img,
name: this.actor.name,
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
data: actorData,
limited: this.object.limited,
skills: this.actor.getSkills( ),
weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getLore())),
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ),
equippedArmor: this.actor.getEquippedArmor(),
equippedShield: this.actor.getEquippedShield(),
feats: duplicate(this.actor.getFeats()),
subActors: duplicate(this.actor.getSubActors()),
race: duplicate(this.actor.getRace()),
moneys: duplicate(this.actor.getMoneys()),
encCapacity: this.actor.getEncumbranceCapacity(),
saveRolls: this.actor.getSaveRoll(),
conditions: this.actor.getConditions(),
containersTree: this.actor.containersTree,
encCurrent: this.actor.encCurrent,
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
isGM: game.user.isGM
}
this.formData = formData;
console.log("PC : ", formData, this.object);
return formData;
}
/* -------------------------------------------- */
/** @override */
activateListeners(html) {
super.activateListeners(html);
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
html.bind("keydown", function(e) { // Ignore Enter in actores sheet
if (e.keyCode === 13) return false;
});
// Update Inventory Item
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let itemId = li.data("item-id")
const item = this.actor.items.get( itemId );
item.sheet.render(true);
});
// Delete Inventory Item
html.find('.item-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item")
WarheroUtility.confirmDelete(this, li)
})
html.find('.item-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
})
html.find('.equip-activate').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let itemId = li.data("item-id")
this.actor.equipActivate( itemId)
});
html.find('.equip-deactivate').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let itemId = li.data("item-id")
this.actor.equipDeactivate( itemId)
});
html.find('.subactor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id");
let actor = game.actors.get( actorId );
actor.sheet.render(true);
});
html.find('.subactor-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id");
this.actor.delSubActor(actorId);
});
html.find('.quantity-minus').click(event => {
const li = $(event.currentTarget).parents(".item");
this.actor.incDecQuantity( li.data("item-id"), -1 );
} );
html.find('.quantity-plus').click(event => {
const li = $(event.currentTarget).parents(".item");
this.actor.incDecQuantity( li.data("item-id"), +1 );
} );
html.find('.ammo-minus').click(event => {
const li = $(event.currentTarget).parents(".item")
this.actor.incDecAmmo( li.data("item-id"), -1 );
} );
html.find('.ammo-plus').click(event => {
const li = $(event.currentTarget).parents(".item")
this.actor.incDecAmmo( li.data("item-id"), +1 )
} );
html.find('.roll-ability').click((event) => {
const abilityKey = $(event.currentTarget).data("ability-key");
this.actor.rollAbility(abilityKey);
});
html.find('.roll-skill').click((event) => {
const li = $(event.currentTarget).parents(".item")
const skillId = li.data("item-id")
this.actor.rollSkill(skillId)
});
html.find('.roll-weapon').click((event) => {
const li = $(event.currentTarget).parents(".item");
const skillId = li.data("item-id")
this.actor.rollWeapon(skillId)
});
html.find('.roll-armor-die').click((event) => {
this.actor.rollArmorDie()
});
html.find('.roll-shield-die').click((event) => {
this.actor.rollShieldDie()
});
html.find('.roll-target-die').click((event) => {
this.actor.rollDefenseRanged()
});
html.find('.roll-save').click((event) => {
const saveKey = $(event.currentTarget).data("save-key")
this.actor.rollSave(saveKey)
});
html.find('.lock-unlock-sheet').click((event) => {
this.options.editScore = !this.options.editScore;
this.render(true);
});
html.find('.item-link a').click((event) => {
const itemId = $(event.currentTarget).data("item-id");
const item = this.actor.getOwnedItem(itemId);
item.sheet.render(true);
});
html.find('.item-equip').click(ev => {
const li = $(ev.currentTarget).parents(".item");
this.actor.equipItem( li.data("item-id") );
this.render(true);
});
html.find('.update-field').change(ev => {
const fieldName = $(ev.currentTarget).data("field-name");
let value = Number(ev.currentTarget.value);
this.actor.update( { [`${fieldName}`]: value } );
});
}
/* -------------------------------------------- */
/** @override */
setPosition(options = {}) {
const position = super.setPosition(options);
const sheetBody = this.element.find(".sheet-body");
const bodyHeight = position.height - 192;
sheetBody.css("height", bodyHeight);
return position;
}
/* -------------------------------------------- */
/** @override */
_updateObject(event, formData) {
// Update the Actor
return this.object.update(formData);
}
} }

View File

@ -557,7 +557,13 @@ export class WarheroUtility {
return return
} }
if (rollData.mode == "damage") { if (rollData.mode == "damage") {
let myRoll = new Roll(rollData.weapon.damageFormula + "+" + rollData.bonusMalus).roll({ async: false }) let formula
if (rollData.weapon.system.weapontype == "special") {
formula = rollData.weapon.system.damageformula
} else {
formula = (rollData.is2hands) ? rollData.weapon.damageFormula2Hands : rollData.weapon.damageFormula
}
let myRoll = new Roll(formula + "+" + rollData.bonusMalus, actor.system).roll({ async: false })
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
rollData.roll = myRoll rollData.roll = myRoll
rollData.diceFormula = myRoll.formula rollData.diceFormula = myRoll.formula
@ -570,11 +576,16 @@ export class WarheroUtility {
return return
} }
let diceFormula
if (rollData.weapon.system.weapontype == "special") {
diceFormula = rollData.weapon.system.rollformula
} else {
// ability/save/size => 0 // ability/save/size => 0
let diceFormula = "1d20" diceFormula = "1d20"
if (rollData.stat) { if (rollData.stat) {
diceFormula += "+" + rollData.stat.value diceFormula += "+" + rollData.stat.value
} }
}
if (rollData.usemWeaponMalus) { if (rollData.usemWeaponMalus) {
diceFormula += "+" + rollData.mWeaponMalus diceFormula += "+" + rollData.mWeaponMalus
} }
@ -584,7 +595,7 @@ export class WarheroUtility {
console.log("Roll formula", diceFormula) console.log("Roll formula", diceFormula)
let myRoll = rollData.roll let myRoll = rollData.roll
if (!myRoll) { // New rolls only of no rerolls if (!myRoll) { // New rolls only of no rerolls
myRoll = new Roll(diceFormula).roll({ async: false }) myRoll = new Roll(diceFormula, actor.system).roll({ async: false })
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
} }
rollData.roll = myRoll rollData.roll = myRoll
@ -619,7 +630,19 @@ export class WarheroUtility {
return 0; return 0;
}) })
} }
static sortArrayObjectsByNameAndLevel(myArray) {
myArray.sort((a, b) => {
let fa = a.system.level + a.name.toLowerCase();
let fb = b.system.level + b.name.toLowerCase();
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
})
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static getUsers(filter) { static getUsers(filter) {
return game.users.filter(filter).map(user => user.id); return game.users.filter(filter).map(user => user.id);

View File

@ -10,7 +10,7 @@
--major-button-font-weight: normal; --major-button-font-weight: normal;
--major-button-color: #dadada; --major-button-color: #dadada;
--tab-header-font-size: 1.0rem; --tab-header-font-size: 1rem;
--tab-header-font-weight: 700; --tab-header-font-weight: 700;
--tab-header-color: #403f3e; --tab-header-color: #403f3e;
--tab-header-color-active: #4a0404; --tab-header-color-active: #4a0404;
@ -41,12 +41,14 @@
letter-spacing: 1px; letter-spacing: 1px;
color: rgba(228, 240, 240, 0.75); color: rgba(228, 240, 240, 0.75);
background: rgba(66, 66, 64, 0.95); background: rgba(66, 66, 64, 0.95);
} }
/* Fonts */ /* Fonts */
.sheet header.sheet-header h1 input, .window-app .window-header, #actors .directory-list, #navigation #scene-list .scene.nav-item { .sheet header.sheet-header h1 input,
font-size: 1.0rem; .window-app .window-header,
#actors .directory-list,
#navigation #scene-list .scene.nav-item {
font-size: 1rem;
color: rgba(228, 240, 240, 0.75); color: rgba(228, 240, 240, 0.75);
background: rgba(66, 66, 64, 0.95); background: rgba(66, 66, 64, 0.95);
} /* For title, sidebar character and scene */ } /* For title, sidebar character and scene */
@ -55,7 +57,16 @@
color: rgba(228, 240, 240, 0.75); color: rgba(228, 240, 240, 0.75);
background: rgba(66, 66, 64, 0.95); background: rgba(66, 66, 64, 0.95);
} /* For nav and title */ } /* For nav and title */
.window-app input, .fvtt-warhero .item-form, .sheet header.sheet-header .flex-group-center.flex-compteurs, .sheet header.sheet-header .flex-group-center.flex-fatigue, select, button, .item-checkbox, #sidebar, #players, #navigation #nav-toggle { .window-app input,
.fvtt-warhero .item-form,
.sheet header.sheet-header .flex-group-center.flex-compteurs,
.sheet header.sheet-header .flex-group-center.flex-fatigue,
select,
button,
.item-checkbox,
#sidebar,
#players,
#navigation #nav-toggle {
font-size: 0.8rem; font-size: 0.8rem;
color: rgba(228, 240, 240, 0.75); color: rgba(228, 240, 240, 0.75);
background: rgba(66, 66, 64, 0.95); background: rgba(66, 66, 64, 0.95);
@ -67,7 +78,9 @@
.dialog .window-content { .dialog .window-content {
color: #ccdbe6; color: #ccdbe6;
} }
.dialog-content, .dialog-buttons, .form-fields { .dialog-content,
.dialog-buttons,
.form-fields {
color: #ccdbe6; color: #ccdbe6;
} }
.window-app.sheet .window-content { .window-app.sheet .window-content {
@ -79,7 +92,9 @@
font-weight: bold; font-weight: bold;
} }
.tabs .item.active, .blessures-list li ul li:first-child:hover, a:hover { .tabs .item.active,
.blessures-list li ul li:first-child:hover,
a:hover {
text-shadow: 1px 0px 0px #ff6600; text-shadow: 1px 0px 0px #ff6600;
} }
select { select {
@ -91,7 +106,8 @@
color: rgba(66, 66, 64, 0.95); color: rgba(66, 66, 64, 0.95);
} }
.rollable:hover, .rollable:focus { .rollable:hover,
.rollable:focus {
color: #000; color: #000;
text-shadow: 0 0 10px red; text-shadow: 0 0 10px red;
cursor: pointer; cursor: pointer;
@ -102,9 +118,12 @@
select:disabled { select:disabled {
color: #1c2058; color: #1c2058;
} }
table {border: 1px solid #7a7971;} table {
border: 1px solid #7a7971;
}
.grid, .grid-2col { .grid,
.grid-2col {
display: grid; display: grid;
grid-column: span 2 / span 2; grid-column: span 2 / span 2;
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr));
@ -344,8 +363,8 @@
.fvtt-warhero .tabs { .fvtt-warhero .tabs {
height: 40px; height: 40px;
border-top: 1px solid #AAA; border-top: 1px solid #aaa;
border-bottom: 1px solid #AAA; border-bottom: 1px solid #aaa;
color: #000000; color: #000000;
} }
@ -374,7 +393,7 @@
height: 30px; height: 30px;
line-height: 24px; line-height: 24px;
padding: 1px 0; padding: 1px 0;
border-bottom: 1px solid #BBB; border-bottom: 1px solid #bbb;
} }
.fvtt-warhero .items-list .item .item-image { .fvtt-warhero .items-list .item .item-image {
@ -399,16 +418,19 @@
text-align: right; text-align: right;
} }
/* ======================================== */ /* ======================================== */
/* Sheet */ /* Sheet */
.window-app.sheet .window-content .sheet-header { .window-app.sheet .window-content .sheet-header {
background: url("../images/ui/pc_sheet_bg.webp") background: url('../images/ui/pc_sheet_bg.webp');
} }
/* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/ /* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/
/*color: rgba(168, 139, 139, 0.5);*/ /*color: rgba(168, 139, 139, 0.5);*/
.window-app.sheet .window-content .sheet-header input[type="text"], .window-app.sheet .window-content .sheet-header input[type="number"], .window-app.sheet .window-content .sheet-header input[type="password"], .window-app.sheet .window-content .sheet-header input[type="date"], .window-app.sheet .window-content .sheet-header input[type="time"] { .window-app.sheet .window-content .sheet-header input[type='text'],
.window-app.sheet .window-content .sheet-header input[type='number'],
.window-app.sheet .window-content .sheet-header input[type='password'],
.window-app.sheet .window-content .sheet-header input[type='date'],
.window-app.sheet .window-content .sheet-header input[type='time'] {
color: rgba(228, 240, 240, 0.75); color: rgba(228, 240, 240, 0.75);
background: rgba(66, 66, 64, 0.95); background: rgba(66, 66, 64, 0.95);
border: 1 none; border: 1 none;
@ -416,7 +438,11 @@
margin-left: 2px; margin-left: 2px;
} }
.window-app.sheet .window-content .sheet-body input[type="text"], .window-app.sheet .window-content .sheet-body input[type="number"], .window-app.sheet .window-content .sheet-body input[type="password"], .window-app.sheet .window-content .sheet-body input[type="date"], .window-app.sheet .window-content .sheet-body input[type="time"] { .window-app.sheet .window-content .sheet-body input[type='text'],
.window-app.sheet .window-content .sheet-body input[type='number'],
.window-app.sheet .window-content .sheet-body input[type='password'],
.window-app.sheet .window-content .sheet-body input[type='date'],
.window-app.sheet .window-content .sheet-body input[type='time'] {
color: rgba(228, 240, 240, 0.75); color: rgba(228, 240, 240, 0.75);
background: rgba(66, 66, 64, 0.95); background: rgba(66, 66, 64, 0.95);
border: 1 none; border: 1 none;
@ -424,7 +450,8 @@
margin-left: 2px; margin-left: 2px;
} }
.window-app.sheet .window-content .sheet-body select, .window-app.sheet .window-content .sheet-header select { .window-app.sheet .window-content .sheet-body select,
.window-app.sheet .window-content .sheet-header select {
color: rgba(228, 240, 240, 0.75); color: rgba(228, 240, 240, 0.75);
background: rgba(66, 66, 64, 0.95); background: rgba(66, 66, 64, 0.95);
border: 1 none; border: 1 none;
@ -432,16 +459,19 @@
margin-left: 2px; margin-left: 2px;
} }
.window-app .window-content, .window-app.sheet .window-content .sheet-body{ .window-app .window-content,
.window-app.sheet .window-content .sheet-body {
font-size: 0.8rem; font-size: 0.8rem;
background: url("../images/ui/pc_sheet_bg.webp") repeat left top; background: url('../images/ui/pc_sheet_bg.webp') repeat left top;
color: rgba(228, 240, 240, 0.75); color: rgba(228, 240, 240, 0.75);
background: rgba(66, 66, 64, 0.95); background: rgba(66, 66, 64, 0.95);
} }
/* background: rgba(245,245,240,0.6) url("../images/ui/sheet_background.webp") left top;*/ /* background: rgba(245,245,240,0.6) url("../images/ui/sheet_background.webp") left top;*/
section.sheet-body{padding: 0.25rem 0.5rem;} section.sheet-body {
padding: 0.25rem 0.5rem;
}
.sheet header.sheet-header .profile-img { .sheet header.sheet-header .profile-img {
object-fit: cover; object-fit: cover;
@ -451,7 +481,7 @@
} }
.sheet nav.sheet-tabs { .sheet nav.sheet-tabs {
font-size: 0.70rem; font-size: 0.7rem;
font-weight: bold; font-weight: bold;
height: 3rem; height: 3rem;
flex: 0 0 3rem; flex: 0 0 3rem;
@ -474,7 +504,7 @@
} }
nav.sheet-tabs .item:after { nav.sheet-tabs .item:after {
content: ""; content: '';
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
@ -488,13 +518,17 @@
} }
section.sheet-body:after { section.sheet-body:after {
content: ""; content: '';
display: block; display: block;
clear: both; clear: both;
} }
.sheet header.sheet-header .flex-compteurs {text-align: right;} .sheet header.sheet-header .flex-compteurs {
.sheet header.sheet-header .resource-content {width: 2rem;} text-align: right;
}
.sheet header.sheet-header .resource-content {
width: 2rem;
}
.select-diff { .select-diff {
display: inline-block; display: inline-block;
@ -509,7 +543,8 @@
padding: 0.25rem; padding: 0.25rem;
} }
.window-app.sheet .window-content .carac-value, .window-app.sheet .window-content .competence-xp { .window-app.sheet .window-content .carac-value,
.window-app.sheet .window-content .competence-xp {
margin: 0.05rem; margin: 0.05rem;
flex-basis: 3rem; flex-basis: 3rem;
text-align: center; text-align: center;
@ -520,20 +555,25 @@
/* ======================================== */ /* ======================================== */
h1, h2, h3, h4 { h1,
h2,
h3,
h4 {
font-weight: bold; font-weight: bold;
} }
ul, ol { ul,
ol {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
ul, li { ul,
li {
list-style-type: none; list-style-type: none;
} }
.sheet li { .sheet li {
margin: 0.010rem; margin: 0.01rem;
padding: 0.25rem; padding: 0.25rem;
} }
.header-fields li { .header-fields li {
@ -545,7 +585,7 @@
background: rgba(100, 100, 50, 0.25); background: rgba(100, 100, 50, 0.25);
} }
.alterne-list > .list-item:nth-child(even) { .alterne-list > .list-item:nth-child(even) {
background: rgba(80, 60, 0, 0.10); background: rgba(80, 60, 0, 0.1);
} }
.alterne-list > .list-item:nth-child(odd) { .alterne-list > .list-item:nth-child(odd) {
background: rgb(160, 130, 100, 0.05); background: rgb(160, 130, 100, 0.05);
@ -822,7 +862,6 @@
text-align: center; text-align: center;
} }
.flex-actions-bar { .flex-actions-bar {
flex-grow: 2; flex-grow: 2;
} }
@ -841,7 +880,8 @@
height: 470px !important; height: 470px !important;
} }
#sidebar-tabs > .collapsed, #chat-controls .chat-control-icon { #sidebar-tabs > .collapsed,
#chat-controls .chat-control-icon {
color: rgba(220, 220, 220, 0.75); color: rgba(220, 220, 220, 0.75);
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75); text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75);
} }
@ -866,7 +906,8 @@
align-items: center; align-items: center;
} }
.chat-message .message-header .flavor-text, .chat-message .message-header .whisper-to { .chat-message .message-header .flavor-text,
.chat-message .message-header .whisper-to {
font-size: 0.9rem; font-size: 0.9rem;
} }
.chat-actor-name { .chat-actor-name {
@ -890,8 +931,8 @@
} }
.padding-dice { .padding-dice {
padding-top: .2rem; padding-top: 0.2rem;
padding-bottom: .2rem; padding-bottom: 0.2rem;
} }
.dice-image { .dice-image {
@ -916,8 +957,8 @@
font-size: 15px; font-size: 15px;
padding: 10px; padding: 10px;
padding-bottom: 20px; padding-bottom: 20px;
padding-top: .2rem; padding-top: 0.2rem;
padding-bottom: .2rem; padding-bottom: 0.2rem;
} }
.div-river-full { .div-river-full {
@ -1000,13 +1041,13 @@
background-position: center; background-position: center;
background-size: cover; background-size: cover;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75); text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75);
} }
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/* Control, Tool, hotbar & navigation */ /* Control, Tool, hotbar & navigation */
#controls .scene-control, #controls .control-tool { #controls .scene-control,
#controls .control-tool {
box-shadow: 0 0 3px #000; box-shadow: 0 0 3px #000;
margin: 0 0 8px; margin: 0 0 8px;
border-radius: 0; border-radius: 0;
@ -1017,7 +1058,10 @@
border-image-outset: 0px; border-image-outset: 0px;
} }
#controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { #controls .scene-control.active,
#controls .control-tool.active,
#controls .scene-control:hover,
#controls .control-tool:hover {
background: rgba(72, 46, 28, 1); background: rgba(72, 46, 28, 1);
background-origin: padding-box; background-origin: padding-box;
border-image: url(img/ui/footer-button.png) 10 repeat; border-image: url(img/ui/footer-button.png) 10 repeat;
@ -1063,7 +1107,8 @@
border-image-outset: 0px; border-image-outset: 0px;
} }
#navigation #scene-list .scene.view, #navigation #scene-list .scene.context { #navigation #scene-list .scene.view,
#navigation #scene-list .scene.context {
background: rgba(72, 46, 28, 1); background: rgba(72, 46, 28, 1);
background-origin: padding-box; background-origin: padding-box;
border-image: url(img/ui/footer-button.png) 10 repeat; border-image: url(img/ui/footer-button.png) 10 repeat;
@ -1257,13 +1302,11 @@
} }
/*************************************************************/ /*************************************************************/
#pause #pause {
{
font-size: 2rem; font-size: 2rem;
} }
#pause > h3 #pause > h3 {
{ color: #ccc;
color: #CCC
} }
/* =================== 1. ACTOR SHEET FONT STYLES =========== */ /* /* =================== 1. ACTOR SHEET FONT STYLES =========== */ /*
@ -1370,7 +1413,8 @@
max-height: 42px; max-height: 42px;
min-height: 36px; min-height: 36px;
} }
.item-ability-roll select, .item-ability-roll input { .item-ability-roll select,
.item-ability-roll input {
margin-top: 4px; margin-top: 4px;
margin-right: 2px; margin-right: 2px;
} }
@ -1474,8 +1518,8 @@
.item-field-label-vlong2 { .item-field-label-vlong2 {
flex-grow: 1; flex-grow: 1;
margin-top: 4px; margin-top: 4px;
max-width: 22rem; max-width: 24rem;
min-width: 22rem; min-width: 24rem;
} }
.item-control-end { .item-control-end {
align-self: flex-end; align-self: flex-end;
@ -1501,3 +1545,6 @@
.crit-failure { .crit-failure {
color: darkred; color: darkred;
} }
.directory .directory-header .header-search input {
color: rgba(52, 52, 52, 0.95);
}

View File

@ -101,7 +101,7 @@
"styles": [ "styles": [
"styles/simple.css" "styles/simple.css"
], ],
"version": "10.0.20", "version": "10.0.23",
"compatibility": { "compatibility": {
"minimum": "10", "minimum": "10",
"verified": "10", "verified": "10",
@ -109,7 +109,7 @@
}, },
"title": "Warhero RPG", "title": "Warhero RPG",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-warhero/raw/branch/master/system.json", "manifest": "https://www.uberwald.me/gitea/public/fvtt-warhero/raw/branch/master/system.json",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-warhero/archive/fvtt-warhero-10.0.20.zip", "download": "https://www.uberwald.me/gitea/uberwald/fvtt-warhero/archive/fvtt-warhero-10.0.23.zip",
"url": "https://www.uberwald.me/gitea/public/fvtt-warhero", "url": "https://www.uberwald.me/gitea/public/fvtt-warhero",
"background": "images/ui/warhero_welcome_page.webp", "background": "images/ui/warhero_welcome_page.webp",
"id": "fvtt-warhero" "id": "fvtt-warhero"

View File

@ -1,6 +1,10 @@
{ {
"Actor": { "Actor": {
"types": ["character", "npc"], "types": [
"character",
"npc",
"monster"
],
"templates": { "templates": {
"biodata": { "biodata": {
"biodata": { "biodata": {
@ -203,14 +207,37 @@
} }
}, },
"character": { "character": {
"templates": [ "biodata", "core" ] "templates": [
"biodata",
"core"
]
}, },
"npc": { "npc": {
"templates": [ "biodata", "core" ] "templates": [
"biodata",
"core"
]
},
"monster": {
"templates": [
"biodata",
"core"
]
} }
}, },
"Item": { "Item": {
"types": [ "equipment", "race", "weapon", "armor", "shield", "skill", "power", "language", "condition", "class"], "types": [
"equipment",
"race",
"weapon",
"armor",
"shield",
"skill",
"power",
"language",
"condition",
"class"
],
"templates": { "templates": {
"commonclassrace": { "commonclassrace": {
"weapons": { "weapons": {
@ -238,7 +265,9 @@
"description": "" "description": ""
}, },
"class": { "class": {
"templates": ["commonclassrace"], "templates": [
"commonclassrace"
],
"description": "" "description": ""
}, },
"race": { "race": {
@ -248,7 +277,9 @@
"attributebonus1": "", "attributebonus1": "",
"attributebonus4": "", "attributebonus4": "",
"attributebonus8": "", "attributebonus8": "",
"templates": ["commonclassrace"] "templates": [
"commonclassrace"
]
}, },
"language": { "language": {
"shortdescription": "", "shortdescription": "",
@ -264,6 +295,9 @@
"weapon": { "weapon": {
"weapontype": "short", "weapontype": "short",
"damage": "1d6", "damage": "1d6",
"damage2hands": "1d6",
"rollformula": "",
"damageformula": "",
"cost": 0, "cost": 0,
"equipped": false, "equipped": false,
"quantity": 1, "quantity": 1,

View File

@ -193,7 +193,15 @@
<span class="item-field-label-medium">{{weapon.system.weapontype}}</span> <span class="item-field-label-medium">{{weapon.system.weapontype}}</span>
{{#if (eq system.weapontype "special")}}
<span class="item-field-label-medium"><a class="roll-damage"><i class="fa-solid fa-dice-d20"></i>{{weapon.system.damageformula}}</a></span>
{{else}}
<span class="item-field-label-medium"><a class="roll-damage"><i class="fa-solid fa-dice-d20"></i>{{weapon.damageFormula}}</a></span> <span class="item-field-label-medium"><a class="roll-damage"><i class="fa-solid fa-dice-d20"></i>{{weapon.damageFormula}}</a></span>
{{/if}}
{{#if (eq system.weapontype "polearm")}}
<span class="item-field-label-medium"><a class="roll-damage-2hands"><i class="fa-solid fa-dice-d20"></i>{{weapon.damageFormula2Hands}}</a></span>
{{/if}}
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
@ -384,20 +392,24 @@
<div class="flexcol"> <div class="flexcol">
{{#each powers as |school schoolKey|}}
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header"> <span class="item-name-label-header">
<h3><label class="items-title-text">Powers</label></h3> <h3><label class="items-title-text">{{schoolKey}}</label></h3>
</span> </span>
</li> </li>
{{#each powers as |power key|}} {{#each school as |power key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{power._id}}"> <li class="item stat flexrow list-item list-item-shadow" data-item-id="{{power._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{power.img}}" /></a> src="{{power.img}}" /></a>
<span class="item-name-label"> <span class="item-name-label">
<a class="power-roll"><i class="fa-solid fa-dice-d20"></i>{{power.name}}</a> <a class="power-roll"><i class="fa-solid fa-dice-d20"></i>{{power.name}}</a>
</span> </span>
<span class="item-name-label">
<a class="power-roll">{{power.system.level}}</a>
</span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
@ -406,6 +418,7 @@
{{/each}} {{/each}}
</ul> </ul>
{{/each}}
</div> </div>
</div> </div>

View File

@ -18,7 +18,7 @@
<div class="tab" data-group="primary"> <div class="tab" data-group="primary">
<ul> <ul>
<li class="flexrow"><label class="item-field-label-medium ">Type</label> <li class="flexrow"><label class="item-field-label-long ">Type</label>
<select class="item-field-label-medium " type="text" name="system.weapontype" value="{{system.weapontype}}" data-dtype="String"> <select class="item-field-label-medium " type="text" name="system.weapontype" value="{{system.weapontype}}" data-dtype="String">
{{#select system.weapontype}} {{#select system.weapontype}}
{{#each config.weaponTypes as |type key|}} {{#each config.weaponTypes as |type key|}}
@ -28,10 +28,24 @@
</select> </select>
</li> </li>
<li class="flexrow"><label class="item-field-label-medium ">Damage</label> {{#if (eq system.weapontype "special")}}
<li class="flexrow"><label class="item-field-label-vlong2 ">Raw Roll Formula (ex: 1d20+@statistics.str.value)</label>
<input type="text" class="item-field-label-long " name="system.rollformula" value="{{system.rollformula}}" data-dtype="String"/>
</li>
<li class="flexrow"><label class="item-field-label-vlong2 ">Raw Damage Formula (ex: 1d6+(@statistics.str.value/2))</label>
<input type="text" class="item-field-label-long " name="system.damageformula" value="{{system.damageformula}}" data-dtype="String"/>
</li>
{{else}}
<li class="flexrow"><label class="item-field-label-long ">Damage</label>
<input type="text" class="item-field-label-medium " name="system.damage" value="{{system.damage}}" data-dtype="String"/> <input type="text" class="item-field-label-medium " name="system.damage" value="{{system.damage}}" data-dtype="String"/>
</li> </li>
{{/if}}
{{#if (eq system.weapontype "polearm")}}
<li class="flexrow"><label class="item-field-label-long ">Damage 2 arms</label>
<input type="text" class="item-field-label-medium " name="system.damage2hands" value="{{system.damage2hands}}" data-dtype="String"/>
</li>
{{/if}}
{{> systems/fvtt-warhero/templates/partial-item-common-equipment.html}} {{> systems/fvtt-warhero/templates/partial-item-common-equipment.html}}

View File

@ -0,0 +1,547 @@
<form class="{{cssClass}}" autocomplete="off">
{{!-- Sheet Header --}}
<header class="sheet-header">
<div class="header-fields">
<h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
<div class="flexrow">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
<div class="flexcol">
<div class="flexrow">
<div class="ability-item">
<ul>
{{#each system.statistics as |stat key|}}
{{> systems/fvtt-warhero/templates/partial-actor-stat-block.html stat=stat key=key path="statistics" fieldClass="item-field-label-medium"}}
{{/each}}
</ul>
</div>
<div class="ability-item">
<ul>
<li class="item flexrow list-item " data-item-id="{{race._id}}">
<label class="item-field-label-medium">Race</label>
<a class="item-edit"><img class="sheet-competence-img" src="{{race.img}}"></a>
<input type="text" class="item-field-label-medium" disabled value="{{race.name}}" data-dtype="String" />
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
<li class="item flexrow list-item" data-item-id="{{class._id}}">
<label class="item-field-label-medium">Class</label>
<a class="item-edit"><img class="sheet-competence-img" src="{{class.img}}"></a>
<input type="text" class="item-field-label-medium" disabled value="{{class.name}}" data-dtype="String" />
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
<li class="item flexrow list-item" >
<label class="item-field-label-medium">Religion</label>
<input type="text" class="item-field-label-medium" name="system.biodata.religion" value="{{system.biodata.religion}}" data-dtype="String" />
</li>
</ul>
</div>
</div>
<div class="flexrow">
{{#each system.attributes as |attr key|}}
{{#if attr.isheader}}
<div class="flexrow">
{{> systems/fvtt-warhero/templates/partial-actor-stat-block.html stat=attr key=key path="attributes" fieldClass="item-field-label-medium"}}
</div>
{{/if}}
{{/each}}
</ul>
</div>
</div>
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="main">Main</a>
<a class="item" data-tab="combat">Combat</a>
<a class="item" data-tab="skill">Skills&Effects</a>
<a class="item" data-tab="power">Powers</a>
<a class="item" data-tab="equipment">Equipment</a>
<a class="item" data-tab="biodata">Biography</a>
</nav>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Skills Tab --}}
<div class="tab main" data-group="primary" data-tab="main">
<div class="flexrow">
<div class="ability-item">
<ul>
{{#each system.attributes as |attr key|}}
{{#if (not attr.isheader)}}
{{> systems/fvtt-warhero/templates/partial-actor-stat-block.html stat=attr key=key path="attributes" fieldClass="item-field-label-vlong"}}
{{/if}}
{{/each}}
</ul>
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">{{localize "WH.ui.competency"}}</label></h3>
</span>
</li>
{{#each competency.weapons as |flag key|}}
{{#if flag}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{language._id}}">
<span class="item-name-label-long">{{localize "WH.ui.weapons"}} {{key}}</span>
</li>
{{/if}}
{{/each}}
{{#each competency.shields as |flag key|}}
{{#if flag}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{language._id}}">
<span class="item-name-label-long">{{localize "WH.ui.shields"}} {{key}}</span>
</li>
{{/if}}
{{/each}}
{{#each competency.armors as |flag key|}}
{{#if flag}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{language._id}}">
<span class="item-name-label-long">{{localize "WH.ui.armors"}} {{key}}</span>
</li>
{{/if}}
{{/each}}
</ul>
</div>
</div>
<div class="ability-item">
<ul>
<li class="item flexrow list-item item-stat-roll" data-attr-key="{{key}}">
<span class="item-field-label-vlong" name="{{key}}">
<h4 class="item-field-label-vlong">
{{localize "WH.ui.xphp"}}
</h4>
</span>
<span class="item-field-label-long" >{{hpprogression}}</span>
</li>
{{#each system.secondary as |second key|}}
{{> systems/fvtt-warhero/templates/partial-actor-stat-block.html stat=second key=key path="secondary" fieldClass="item-field-label-vlong"}}
{{/each}}
</ul>
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">{{localize "WH.ui.languages"}}</label></h3>
</span>
</li>
{{#each languages as |language key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{language._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{language.img}}" /></a>
<span class="item-name-label-long">{{language.name}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
</div>
{{!-- Combat Tab --}}
<div class="tab combat" data-group="primary" data-tab="combat">
<div class="flexcol">
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">Weapons</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.Type"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.Damage"}}</label>
</span>
</li>
{{#each weapons as |weapon key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{weapon._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{weapon.img}}" /></a>
<span class="item-name-label-long"><a class="roll-weapon"><i class="fa-solid fa-dice-d20"></i>{{weapon.name}}</a></span>
<span class="item-field-label-medium">{{weapon.system.weapontype}}</span>
<span class="item-field-label-medium"><a class="roll-damage"><i class="fa-solid fa-dice-d20"></i>{{weapon.damageFormula}}</a></span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">Shields</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">{{localize "WH.ui.Type"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.parrybonus"}}</label>
</span>
</li>
{{#each shields as |shield key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{shield._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{shield.img}}" /></a>
<span class="item-name-label-long">{{shield.name}}</span>
<span class="item-field-label-short">{{shield.system.shieldtype}}</span>
<span class="item-field-label-medium">{{shield.system.parrybonus}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">Armors</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">{{localize "WH.ui.Type"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.damagereduction"}}</label>
</span>
</li>
{{#each armors as |armor key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{armor._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{armor.img}}" /></a>
<span class="item-name-label-long">{{armor.name}}</span>
<span class="item-field-label-short">{{armor.system.armortype}}</span>
<span class="item-field-label-medium">{{armor.system.damagereduction}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Skills Tab --}}
<div class="tab skill" data-group="primary" data-tab="skill">
<div class="flexcol">
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">{{localize "WH.ui.classSkills"}}</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.currentuse"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.maxuse"}}</label>
</span>
</li>
{{#each classSkills as |skill key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{skill._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{skill.img}}" /></a>
<span class="item-name-label-long">{{skill.name}}</a></span>
{{#if skill.system.unlimited}}
<span class="item-field-label-medium">N/A</span>
<span class="item-field-label-medium">N/A</span>
{{else}}
<span class="item-field-label-medium">{{skill.system.currentuse}}</span>
<span class="item-field-label-medium">{{skill.system.maxuse}}</span>
{{/if}}
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">{{localize "WH.ui.skills"}}</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.currentuse"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.maxuse"}}</label>
</span>
</li>
{{#each skills as |skill key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{skill._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{skill.img}}" /></a>
<span class="item-name-label-long">{{skill.name}}</span>
{{#if skill.system.unlimited}}
<span class="item-field-label-medium">N/A</span>
<span class="item-field-label-medium">N/A</span>
{{else}}
<span class="item-field-label-medium">{{skill.system.currentuse}}</span>
<span class="item-field-label-medium">{{skill.system.maxuse}}</span>
{{/if}}
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">{{localize "WH.ui.conditions"}}</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.effect"}}</label>
</span>
</li>
{{#each conditions as |cond key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{cond._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{cond.img}}" /></a>
<span class="item-name-label-long">{{cond.name}}</span>
<span class="item-field-label-medium">{{cond.system.shortdescription}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Powers Tab --}}
<div class="tab power" data-group="primary" data-tab="power">
<div class="flexcol">
{{#each powers as |school schoolKey|}}
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header">
<h3><label class="items-title-text">{{schoolKey}}</label></h3>
</span>
</li>
{{#each school as |power key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{power._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{power.img}}" /></a>
<span class="item-name-label">
<a class="power-roll"><i class="fa-solid fa-dice-d20"></i>{{power.name}}</a>
</span>
<span class="item-name-label">
<a class="power-roll">{{power.system.level}}</a>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
{{/each}}
</div>
</div>
{{!-- Equipement Tab --}}
<div class="tab equipment" data-group="primary" data-tab="equipment">
{{#each slotEquipments as |slot slotKey|}}
<ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg {{#if (gt slot.slotUsed slot.nbslots)}}items-title-bg-red{{/if}}">
<span class="item-name-label-header">
<h3><label class="items-title-text">{{localize slot.label}}</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.Type"}}</label>
</span>
<span class="item-field-label-long">
<label class="short-label">{{localize "WH.ui.Qty"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.maxslots"}}: {{slot.nbslots}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.slotsused"}}: {{slot.slotUsed}}</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="{{itemtype}}" title="Create Item"><i class="fas fa-plus"></i></a>
</div>
</li>
{{#each slot.content as |item itemKey|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{item._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{item.img}}" /></a>
<span class="item-name-label">{{item.name}}</span>
<span class="item-field-label-medium">
<label class="short-label">{{upperFirst item.type}}</label>
</span>
<span class="item-field-label-long"><label>
{{item.system.quantity}}
(<a class="quantity-minus plus-minus-button"> -</a>/<a class="quantity-plus plus-minus-button">+</a>)
</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
{{/each}}
<hr>
</div>
{{!-- Biography Tab --}}
<div class="tab biodata" data-group="primary" data-tab="biodata">
<div class="grid grid-2col">
<div>
<ul class="item-list alternate-list">
<li class="item flexrow">
<label class="generic-label">Origin</label>
<input type="text" class="" name="system.biodata.origin" value="{{data.biodata.origin}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">Age</label>
<input type="text" class="" name="system.biodata.age" value="{{data.biodata.age}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">Height</label>
<input type="text" class="" name="system.biodata.height" value="{{data.biodata.height}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">Eyes</label>
<input type="text" class="" name="system.biodata.eyes" value="{{data.biodata.eyes}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="generic-label">Hair</label>
<input type="text" class="" name="system.biodata.hair" value="{{data.biodata.hair}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="generic-label">Preferred Hand</label>
<input type="text" class="" name="system.biodata.preferredhand" value="{{data.biodata.preferredhand}}"
data-dtype="String" />
</li>
</ul>
</div>
<div>
<ul>
<li class="flexrow item">
<label class="generic-label">Size</label>
<select class="competence-base flexrow" type="text" name="system.biodata.size" value="{{data.biodata.size}}" data-dtype="Number">
{{#select data.biodata.size}}
<option value="1">Tiny</option>
<option value="2">Small</option>
<option value="3">Medium</option>
<option value="4">Large</option>
<option value="5">Huge</option>
<option value="6">Gargantuan</option>
{{/select}}
</select>
</li>
<li class="flexrow item">
<label class="generic-label">Sex</label>
<input type="text" class="" name="system.biodata.sex" value="{{data.biodata.sex}}" data-dtype="String" />
</li>
</ul>
</div>
</div>
<hr>
<h3>Background : </h3>
<div class="form-group editor">
{{editor description target="system.biodata.description" button=true owner=owner
editable=editable}}
</div>
<hr>
<h3>Notes : </h3>
<div class="form-group editor">
{{editor notes target="system.biodata.notes" button=true owner=owner editable=editable}}
</div>
<hr>
</article>
</div>
</section>
</form>

View File

@ -11,78 +11,64 @@
<div class="flexrow"> <div class="flexrow">
<div class="ability-item"> <div class="ability-item">
<ul> <ul>
{{#each data.abilities as |ability key|}} {{#each system.statistics as |stat key|}}
{{#if (eq ability.col 1)}} {{> systems/fvtt-warhero/templates/partial-actor-stat-block.html stat=stat key=key path="statistics" fieldClass="item-field-label-medium"}}
{{> systems/fvtt-crucible-rpg/templates/partial-actor-ability-block.html ability=ability key=key}}
{{/if}}
{{/each}} {{/each}}
</ul> </ul>
<li class="item flexrow list-item" data-attr-key="class">
<span class="ability-label " name="class">
<h4 class="ability-text-white ability-margin">Class</h4>
</span>
<select class="competence-base flexrow" type="text" name="system.biodata.class" value="{{data.biodata.class}}" data-dtype="String">
{{#select data.biodata.class}}
<option value="none">None</option>
<option value="chaplain">Chaplain</option>
<option value="magus">Magus</option>
<option value="martial">Martial</option>
<option value="skalawag">Skalawag</option>
<option value="warden">Warden</option>
{{/select}}
</select>
</li>
</div> </div>
<div class="ability-item"> <div class="ability-item">
<ul> <ul>
{{#each data.abilities as |ability key|}} <li class="item flexrow list-item " data-item-id="{{race._id}}">
{{#if (eq ability.col 2)}} <label class="item-field-label-medium">Race</label>
{{> systems/fvtt-crucible-rpg/templates/partial-actor-ability-block.html ability=ability key=key}} <a class="item-edit"><img class="sheet-competence-img" src="{{race.img}}"></a>
<input type="text" class="item-field-label-medium" disabled value="{{race.name}}" data-dtype="String" />
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
<li class="item flexrow list-item" data-item-id="{{class._id}}">
<label class="item-field-label-medium">Class</label>
<a class="item-edit"><img class="sheet-competence-img" src="{{class.img}}"></a>
<input type="text" class="item-field-label-medium" disabled value="{{class.name}}" data-dtype="String" />
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
<li class="item flexrow list-item" >
<label class="item-field-label-medium">Religion</label>
<input type="text" class="item-field-label-medium" name="system.biodata.religion" value="{{system.biodata.religion}}" data-dtype="String" />
</li>
</ul>
</div>
</div>
<div class="flexrow">
{{#each system.attributes as |attr key|}}
{{#if attr.isheader}}
<div class="flexrow">
{{> systems/fvtt-warhero/templates/partial-actor-stat-block.html stat=attr key=key path="attributes" fieldClass="item-field-label-medium"}}
</div>
{{/if}} {{/if}}
{{/each}} {{/each}}
{{#if equippedArmor}}
<li class="item flexrow list-item" data-attr-key="class">
<img class="sheet-competence-img" src="{{equippedArmor.img}}" />
<span class="ability-label " name="class">
<h4 class="ability-text-white ability-margin"><a class="roll-armor-die ability-margin">{{equippedArmor.name}}</a></h4>
</span>
</li>
{{/if}}
{{#if equippedShield}}
<li class="item flexrow list-item" data-attr-key="class">
<img class="sheet-competence-img" src="{{equippedShield.img}}" />
<span class="ability-label " name="equippedShield">
<h4 class="ability-text-white ability-margin"><a class="roll-shield-die ability-margin">{{equippedShield.name}}</a></h4>
</span>
</li>
{{/if}}
<li class="item flexrow list-item" data-attr-key="class">
<img class="sheet-competence-img" src="systems/fvtt-crucible-rpg/images/icons/feats/Marksman (Ballistic).webp" />
<span class="ability-label " name="rollTarget">
<h4 class="ability-text-white ability-margin"><a class="roll-target-die ability-margin">Target Roll</a></h4>
</span>
</li>
</ul> </ul>
</div> </div>
<div class="ability-item status-block">
{{> systems/fvtt-crucible-rpg/templates/partial-actor-status.html}}
</div> </div>
</div> </div>
</div> </div>
</div>
</div> </div>
</header> </header>
{{!-- Sheet Tab Navigation --}} {{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary"> <nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="details">Details</a> <a class="item" data-tab="main">Main</a>
<a class="item" data-tab="combat">Combat</a>
<a class="item" data-tab="skill">Skills&Effects</a>
<a class="item" data-tab="power">Powers</a>
<a class="item" data-tab="equipment">Equipment</a>
<a class="item" data-tab="biodata">Biography</a> <a class="item" data-tab="biodata">Biography</a>
</nav> </nav>
@ -90,93 +76,82 @@
<section class="sheet-body"> <section class="sheet-body">
{{!-- Skills Tab --}} {{!-- Skills Tab --}}
<div class="tab skills" data-group="primary" data-tab="details"> <div class="tab main" data-group="primary" data-tab="main">
<ul class="stat-list alternate-list item-list"> <div class="flexrow">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header"> <div class="ability-item">
<h3><label class="items-title-text">Skills</label></h3> <ul>
</span> {{#each system.attributes as |attr key|}}
<span class="item-field-label-short"> {{#if (not attr.isheader)}}
<label class="short-label">Ability</label> {{> systems/fvtt-warhero/templates/partial-actor-stat-block.html stat=attr key=key path="attributes" fieldClass="item-field-label-vlong"}}
</span> {{/if}}
<span class="item-field-label-short">
<label class="short-label">Dice</label>
</span>
<span class="item-field-label-long">
<label class="short-label">Background</label>
</span>
</li>
{{#each skills as |skill key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{skill._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{skill.img}}" /></a>
<span class="item-name-label"><a class="roll-skill">{{skill.name}}</a></span>
<span class="item-field-label-short">{{upper skill.system.ability}}</span>
<span class="item-field-label-short">{{skill.system.skilldice}}</span>
<span class="item-field-label-long">&nbsp;-&nbsp;</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}} {{/each}}
</ul> </ul>
<div>
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long"> <span class="item-name-label-header-long">
<h3><label class="items-title-text">Combat</label></h3> <h3><label class="items-title-text">{{localize "WH.ui.competency"}}</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Ability</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">Range</label>
</span> </span>
</li> </li>
{{#each equippedWeapons as |weapon key|}} {{#each competency.weapons as |flag key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{weapon._id}}"> {{#if flag}}
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <li class="item flexrow list-item list-item-shadow" data-item-id="{{language._id}}">
src="{{weapon.img}}" /></a> <span class="item-name-label-long">{{localize "WH.ui.weapons"}} {{key}}</span>
<span class="item-name-label-long"><a class ="roll-weapon">{{weapon.name}}</a></span>
<span class="item-field-label-short">{{weapon.system.ability}}</span>
<span class="item-field-label-medium">{{perk.system.range}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li> </li>
{{/if}}
{{/each}}
{{#each competency.shields as |flag key|}}
{{#if flag}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{language._id}}">
<span class="item-name-label-long">{{localize "WH.ui.shields"}} {{key}}</span>
</li>
{{/if}}
{{/each}}
{{#each competency.armors as |flag key|}}
{{#if flag}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{language._id}}">
<span class="item-name-label-long">{{localize "WH.ui.armors"}} {{key}}</span>
</li>
{{/if}}
{{/each}} {{/each}}
</ul> </ul>
</div>
</div>
<div class="ability-item">
<ul>
<li class="item flexrow list-item item-stat-roll" data-attr-key="{{key}}">
<span class="item-field-label-vlong" name="{{key}}">
<h4 class="item-field-label-vlong">
{{localize "WH.ui.xphp"}}
</h4>
</span>
<span class="item-field-label-long" >{{hpprogression}}</span>
</li>
{{#each system.secondary as |second key|}}
{{> systems/fvtt-warhero/templates/partial-actor-stat-block.html stat=second key=key path="secondary" fieldClass="item-field-label-vlong"}}
{{/each}}
</ul>
<div>
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long"> <span class="item-name-label-header-long">
<h3><label class="items-title-text">Monster Powers</label></h3> <h3><label class="items-title-text">{{localize "WH.ui.languages"}}</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">Feature Die?</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">SL?</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">SL</label>
</span> </span>
</li> </li>
{{#each feats as |feat key|}} {{#each languages as |language key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{feat._id}}"> <li class="item flexrow list-item list-item-shadow" data-item-id="{{language._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{feat.img}}" /></a> src="{{language.img}}" /></a>
<span class="item-name-label-long">{{feat.name}}</span> <span class="item-name-label-long">{{language.name}}</span>
<span class="item-field-label-medium">{{upperFirst feat.system.isfeatdie}}</span>
<span class="item-field-label-medium">{{upperFirst feat.system.issl}}</span>
<span class="item-field-label-medium">{{feat.system.sl}}</span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
@ -185,150 +160,313 @@
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
</div>
</div>
</div>
</div>
{{!-- Combat Tab --}}
<div class="tab combat" data-group="primary" data-tab="combat">
<div class="flexcol">
<div>
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long"> <span class="item-name-label-header-long">
<h3><label class="items-title-text">Conditions</label></h3>
</span>
</li>
{{#each conditions as |condition key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{condition._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{condition.img}}" /></a>
<span class="item-name-label-long">{{condition.name}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header">
<h3><label class="items-title-text">Weapons</label></h3> <h3><label class="items-title-text">Weapons</label></h3>
</span> </span>
<span class="item-field-label-short"> <span class="item-field-label-medium">
<label class="short-label">Attack</label> <label class="short-label">{{localize "WH.ui.Type"}}</label>
</span> </span>
<span class="item-field-label-short"> <span class="item-field-label-medium">
<label class="short-label">Damage</label> <label class="short-label">{{localize "WH.ui.Damage"}}</label>
</span> </span>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="weapon" title="Create Item"><i class="fas fa-plus"></i></a>
</div>
</li> </li>
{{#each weapons as |weapon key|}} {{#each weapons as |weapon key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{weapon._id}}"> <li class="item flexrow list-item list-item-shadow" data-item-id="{{weapon._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{weapon.img}}" /></a> src="{{weapon.img}}" /></a>
<span class="item-name-label">{{weapon.name}}</span> <span class="item-name-label-long"><a class="roll-weapon"><i class="fa-solid fa-dice-d20"></i>{{weapon.name}}</a></span>
<span class="item-field-label-short"><label>{{upper weapon.system.ability}}</label></span>
<span class="item-field-label-short"><label>{{upper weapon.system.damage}}</label></span> <span class="item-field-label-medium">{{weapon.system.weapontype}}</span>
<span class="item-field-label-medium"><a class="roll-damage"><i class="fa-solid fa-dice-d20"></i>{{weapon.damageFormula}}</a></span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-equip" title="Worn">{{#if weapon.system.equipped}}<i
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
<ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header">
<h3><label class="items-title-text">Armors</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Type</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Absorption</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="armor" title="Create Item"><i class="fas fa-plus"></i></a>
</div> </div>
</li>
{{#each armors as |armor key|}}
<li class="item list-item flexrow list-item-shadow" data-item-id="{{armor._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{armor.img}}" /></a>
<span class="item-name-label">{{armor.name}}</span>
<span class="item-field-label-short">{{upper armor.system.armortype}}</span>
<span class="item-field-label-short">{{armor.system.absorprionroll}}</span>
<div class="item-filler">&nbsp;</div> <div>
<div class="item-controls item-controls-fixed"> <ul class="stat-list alternate-list">
<a class="item-control item-equip" title="Worn">{{#if armor.system.equipped}}<i
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<ul class="item-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header"> <span class="item-name-label-header-long">
<h3><label class="items-title-text">Shields</label></h3> <h3><label class="items-title-text">Shields</label></h3>
</span> </span>
<span class="item-field-label-short"> <span class="item-field-label-short">
<label class="short-label">Dice</label> <label class="short-label">{{localize "WH.ui.Type"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.parrybonus"}}</label>
</span> </span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="shield" title="Create Item"><i class="fas fa-plus"></i></a>
</div>
</li> </li>
{{#each shields as |shield key|}} {{#each shields as |shield key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{shield._id}}"> <li class="item flexrow list-item list-item-shadow" data-item-id="{{shield._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{shield.img}}" /></a> src="{{shield.img}}" /></a>
<span class="item-name-label">{{shield.name}}</span> <span class="item-name-label-long">{{shield.name}}</span>
<span class="item-field-label-short">{{shield.system.levelDice}}</span>
<span class="item-field-label-short">{{shield.system.shieldtype}}</span>
<span class="item-field-label-medium">{{shield.system.parrybonus}}</span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-equip" title="Worn">{{#if shield.system.equipped}}<i
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
</div>
<ul class="item-list alternate-list"> <div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">Armors</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">{{localize "WH.ui.Type"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.damagereduction"}}</label>
</span>
</li>
{{#each armors as |armor key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{armor._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{armor.img}}" /></a>
<span class="item-name-label-long">{{armor.name}}</span>
<span class="item-field-label-short">{{armor.system.armortype}}</span>
<span class="item-field-label-medium">{{armor.system.damagereduction}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Skills Tab --}}
<div class="tab skill" data-group="primary" data-tab="skill">
<div class="flexcol">
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">{{localize "WH.ui.classSkills"}}</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.currentuse"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.maxuse"}}</label>
</span>
</li>
{{#each classSkills as |skill key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{skill._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{skill.img}}" /></a>
<span class="item-name-label-long">{{skill.name}}</a></span>
{{#if skill.system.unlimited}}
<span class="item-field-label-medium">N/A</span>
<span class="item-field-label-medium">N/A</span>
{{else}}
<span class="item-field-label-medium">{{skill.system.currentuse}}</span>
<span class="item-field-label-medium">{{skill.system.maxuse}}</span>
{{/if}}
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">{{localize "WH.ui.skills"}}</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.currentuse"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.maxuse"}}</label>
</span>
</li>
{{#each skills as |skill key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{skill._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{skill.img}}" /></a>
<span class="item-name-label-long">{{skill.name}}</span>
{{#if skill.system.unlimited}}
<span class="item-field-label-medium">N/A</span>
<span class="item-field-label-medium">N/A</span>
{{else}}
<span class="item-field-label-medium">{{skill.system.currentuse}}</span>
<span class="item-field-label-medium">{{skill.system.maxuse}}</span>
{{/if}}
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header-long">
<h3><label class="items-title-text">{{localize "WH.ui.conditions"}}</label></h3>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.effect"}}</label>
</span>
</li>
{{#each conditions as |cond key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{cond._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{cond.img}}" /></a>
<span class="item-name-label-long">{{cond.name}}</span>
<span class="item-field-label-medium">{{cond.system.shortdescription}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Powers Tab --}}
<div class="tab power" data-group="primary" data-tab="power">
<div class="flexcol">
{{#each powers as |school schoolKey|}}
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header"> <span class="item-name-label-header">
<h3><label class="items-title-text">Equipment</label></h3> <h3><label class="items-title-text">{{schoolKey}}</label></h3>
</span> </span>
<span class="item-field-label-long"> </li>
<label class="short-label">Quantity</label>
{{#each school as |power key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{power._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{power.img}}" /></a>
<span class="item-name-label">
<a class="power-roll"><i class="fa-solid fa-dice-d20"></i>{{power.name}}</a>
</span>
<span class="item-name-label">
<a class="power-roll">{{power.system.level}}</a>
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="equipment" title="Create Item"><i class="fas fa-plus"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
{{/each}}
</div>
</div> </div>
</li> {{!-- Equipement Tab --}}
{{#each containersTree as |equip key|}} <div class="tab equipment" data-group="primary" data-tab="equipment">
{{> systems/fvtt-crucible-rpg/templates/partial-actor-equipment.html equip=equip level=1}}
<ul class="item-list list-item-shadow2 list-item-margin1"> {{#each slotEquipments as |slot slotKey|}}
{{#each equip.data.contents as |subgear key|}} <ul class="item-list alternate-list">
{{> systems/fvtt-crucible-rpg/templates/partial-actor-equipment.html equip=subgear level=2}} <li class="item flexrow list-item items-title-bg {{#if (gt slot.slotUsed slot.nbslots)}}items-title-bg-red{{/if}}">
{{/each}} <span class="item-name-label-header">
</ul> <h3><label class="items-title-text">{{localize slot.label}}</label></h3>
{{/each}} </span>
</ul> <span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.Type"}}</label>
</span>
<span class="item-field-label-long">
<label class="short-label">{{localize "WH.ui.Qty"}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.maxslots"}}: {{slot.nbslots}}</label>
</span>
<span class="item-field-label-medium">
<label class="short-label">{{localize "WH.ui.slotsused"}}: {{slot.slotUsed}}</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="{{itemtype}}" title="Create Item"><i class="fas fa-plus"></i></a>
</div> </div>
</li>
{{#each slot.content as |item itemKey|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{item._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{item.img}}" /></a>
<span class="item-name-label">{{item.name}}</span>
<span class="item-field-label-medium">
<label class="short-label">{{upperFirst item.type}}</label>
</span>
<span class="item-field-label-long"><label>
{{item.system.quantity}}
(<a class="quantity-minus plus-minus-button"> -</a>/<a class="quantity-plus plus-minus-button">+</a>)
</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
{{/each}}
<hr>
</div> </div>
@ -358,6 +496,11 @@
<label class="generic-label">Hair</label> <label class="generic-label">Hair</label>
<input type="text" class="" name="system.biodata.hair" value="{{data.biodata.hair}}" data-dtype="String" /> <input type="text" class="" name="system.biodata.hair" value="{{data.biodata.hair}}" data-dtype="String" />
</li> </li>
<li class="flexrow item">
<label class="generic-label">Preferred Hand</label>
<input type="text" class="" name="system.biodata.preferredhand" value="{{data.biodata.preferredhand}}"
data-dtype="String" />
</li>
</ul> </ul>
</div> </div>
<div> <div>
@ -379,16 +522,6 @@
<label class="generic-label">Sex</label> <label class="generic-label">Sex</label>
<input type="text" class="" name="system.biodata.sex" value="{{data.biodata.sex}}" data-dtype="String" /> <input type="text" class="" name="system.biodata.sex" value="{{data.biodata.sex}}" data-dtype="String" />
</li> </li>
<li class="flexrow item">
<label class="generic-label">Preferred Hand</label>
<input type="text" class="" name="system.biodata.preferredhand" value="{{data.biodata.preferredhand}}"
data-dtype="String" />
</li>
<li class="flexrow item" data-item-id="{{race._id}}">
<label class="generic-label">Race</label>
<a class="item-edit"><img class="stat-icon" src="{{race.img}}"></a>
<input type="text" class="" name="system.biodata.racename" value="{{data.biodata.racename}}" data-dtype="String" />
</li>
</ul> </ul>
</div> </div>
</div> </div>
@ -397,13 +530,13 @@
<hr> <hr>
<h3>Background : </h3> <h3>Background : </h3>
<div class="form-group editor"> <div class="form-group editor">
{{editor data.biodata.description target="system.biodata.description" button=true owner=owner {{editor description target="system.biodata.description" button=true owner=owner
editable=editable}} editable=editable}}
</div> </div>
<hr> <hr>
<h3>Notes : </h3> <h3>Notes : </h3>
<div class="form-group editor"> <div class="form-group editor">
{{editor data.biodata.notes target="system.biodata.notes" button=true owner=owner editable=editable}} {{editor notes target="system.biodata.notes" button=true owner=owner editable=editable}}
</div> </div>
<hr> <hr>
</article> </article>

View File

@ -10,20 +10,41 @@
{{#if weapon}} {{#if weapon}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-long">Weapon : </span> <span class="item-field-label-vlong">Weapon : </span>
<span class="item-field-label-medium">{{weapon.name}}</span> <span class="item-field-label-vlong">{{weapon.name}}</span>
{{#if (eq mode "damage")}}
<div class="flexrow">
<span class="roll-dialog-long">Damage : </span>
<span class="item-field-label-medium">{{weapon.damageFormula}}</span>
</div> </div>
{{#if (eq mode "damage")}}
{{#if (eq weapon.system.weapontype "special")}}
<div class="flexrow">
<span class="item-field-label-vlong">Damage : </span>
<span class="item-field-label-vlong">{{weapon.system.damageformula}}</span>
</div>
{{else}}
<div class="flexrow">
<span class="item-field-label-vlong">Damage : </span>
{{#if is2hands}}
<span class="item-field-label-vlong">{{weapon.damageFormula2Hands}}</span>
{{else}}
<span class="item-field-label-vlong">{{weapon.damage}}</span>
{{/if}} {{/if}}
</div> </div>
{{/if}} {{/if}}
{{else}}
{{#if (eq weapon.system.weapontype "special")}}
<div class="flexrow">
<span class="item-field-label-vlong">Roll Formula : </span>
<span class="item-field-label-vlong">{{weapon.system.rollformula}}</span>
</div>
{{/if}}
{{/if}}
{{/if}}
{{#if stat}} {{#if stat}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-long">{{localize stat.label}}</span> <span class="item-field-label-vlong">{{localize stat.label}}</span>
{{#if (eq mode "save")}} {{#if (eq mode "save")}}
<span class="item-field-label-medium">{{stat.save}}</span> <span class="item-field-label-medium">{{stat.save}}</span>
{{else}} {{else}}
@ -33,7 +54,7 @@
{{#if stat.istxc}} {{#if stat.istxc}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-long">Multiple weapons malus ({{mWeaponMalus}})? </span> <span class="item-field-label-vlong">Multiple weapons malus ({{mWeaponMalus}})? </span>
<span class="item-field-label-medium"><input type="checkbox" id="usemWeaponMalus" name="usemWeaponMalus" {{checked usemWeaponMalus}}/></span> <span class="item-field-label-medium"><input type="checkbox" id="usemWeaponMalus" name="usemWeaponMalus" {{checked usemWeaponMalus}}/></span>
{{/if}} {{/if}}
</div> </div>
@ -41,31 +62,31 @@
{{#if shield}} {{#if shield}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-long">Use shield ? : </span> <span class="item-field-label-vlong">Use shield ? : </span>
<span class="roll-dialog-label"> <span class="roll-dialog-label">
<input type="checkbox" id="useshield" name="useshield" {{checked useshield}}/> <input type="checkbox" id="useshield" name="useshield" {{checked useshield}}/>
</span> </span>
</div> </div>
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-long">{{shield.name}} : </span> <span class="item-field-label-vlong">{{shield.name}} : </span>
<span class="roll-dialog-label">{{shield.data.shielddie}}</span> <span class="item-field-label-medium">{{shield.data.shielddie}}</span>
</div> </div>
{{/if}} {{/if}}
{{#if power}} {{#if power}}
<div class="flexrow"> <div class="flexrow">
<span class="item-field-label-long">Power : </span> <span class="item-field-label-vlong">Power : </span>
<span class="item-field-label-medium">{{power.name}}</span> <span class="item-field-label-medium">{{power.name}}</span>
</div> </div>
<div class="flexrow"> <div class="flexrow">
<span class="item-field-label-long">Power Level : </span> <span class="item-field-label-vlong">Power Level : </span>
<span class="item-field-label-medium">{{power.system.level}}</span> <span class="item-field-label-medium">{{power.system.level}}</span>
</div> </div>
{{/if}} {{/if}}
{{#if hasBM}} {{#if hasBM}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-long">Bonus/Malus : </span> <span class="item-field-label-vlong">Bonus/Malus : </span>
<select class="item-field-label-medium" type="text" id="bonusMalus" value="{{bonusMalus}}"> <select class="item-field-label-medium" type="text" id="bonusMalus" value="{{bonusMalus}}">
{{#select bonusMalus}} {{#select bonusMalus}}
<option value="-6">-6</option> <option value="-6">-6</option>