Compare commits

..

No commits in common. "master" and "fvtt-hero-system-6-v10.0.45" have entirely different histories.

119 changed files with 482 additions and 1564 deletions

1
.gitattributes vendored
View File

@ -1 +0,0 @@
packs/* filter=lfs diff=lfs merge=lfs -text

View File

@ -1,28 +1,2 @@
This is the official Hero System 6th Edition game system for FoundryVTT, based on the TTRPG from Hero Games and developed by Legendsmiths, LLC. For more information about Legendsmiths and their work, visit https://legendsmiths.com/.
# fvtt-dark-stars
The Hero System game system is not usable standalone. To play this game you need a copy of the core rulebook.
It features :
- PC/NPC sheets
- Roll management and associated helpers
- Segment and Turn management in the combat tracker
- Official compendiums
![Snapshot](https://www.lahiette.com/leratierbretonnien/wp-content/uploads/2023/08/hero6_snapshot_02.webp "Snapshot")
Installation
Manifest URL: https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/master/system.json
Project page : https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6
For manual installation, use the provided manifest URL in the "Install System" popup window while managing game systems.
Copyright (c) 2023 Legendsmiths, LLC
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
All content for the HERO System™® is DOJ, Inc.s trademark for its roleplaying system. HERO System Copyright ©1984, 1989, 2002, 2009 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Fantasy Hero ©2003, 2010 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Star Hero ©2003, 2011 by DOJ, Inc. d/b/a Hero Games. All rights reserved. All DOJ trademarks and copyrights used with permission and under license with Legendsmiths , LLC. For further information about Hero Games and the HERO System, visit www.herogames.com. All HERO System™® content is not be included to copy, modify, merge, publish, distribute, sublicense, and/or sell with copies of the Software with the exception of the current licensee Legendsmiths, LLC.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,47 +0,0 @@
v11.0.23
- Proper display of BODY/STUN bars on tokens
v11.0.22
- Fix actor sheet (powers, characteristics)
- Fix weapons roll
v11.0.21
- Fix grid default distance in system.json
- Fix powers roll again (#29)
v11.0.20
- Enhance chat message output (cf #25)
- Enhance roll window
- Code simplification
v11.0.19
- Fix killing damage computation (again)
v11.0.18
- Fix killing damage computation
v11.0.17
- Fix tickets 1, 2, 3, 7, 8, 9, 10
- Implements effects tagging (#11)
v11.0.16
- Fix mental maneuvers rolls
- Renamed title
v11.0.15
- Fix target rolls for power
- Add maneuvers roll in the maneuver tab
- Renamed title
v11.0.14
- Initial public release

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

View File

@ -1,27 +1,18 @@
{
"TYPES": {
"Actor": {
"character": "Character",
"minion": "Minion"
},
"Item": {
"skill": "Skill",
"perk": "Perk",
"power": "Power",
"talent": "Talent",
"advantage": "Advantage",
"martialart": "Martial art",
"limitation": "Limitation",
"complication": "Complication",
"equipment": "Equipment",
"currency": "Currency",
"maneuver": "Maneuver"
}
"ACTOR": {
"TypeCharacter": "Character"
},
"COMBAT": {
"TurnPrev": "Previous initiative",
"RoundPrev": "Previous segment",
"TurnNext": "Next initiative",
"RoundNext": "Next segment"
"ITEM": {
"TypeSkill": "Skill",
"TypePerk": "Perk",
"TypePower": "Power",
"TypeTalent": "Talent",
"TypeAdvantage": "Advantage",
"TypeMartialart": "Martial art",
"TypeLimitation": "Limitation",
"TypeComplication": "Complication",
"TypeEquipment": "Equipment",
"TypeCurrency": "Currency",
"TypeManeuver": "Maneuver"
}
}

View File

@ -46,17 +46,13 @@ export class Hero6ActorSheet extends ActorSheet {
complications: this.actor.getComplications( ),
maneuvers: this.actor.getManeuvers( ),
nonstockmaneuvers: this.actor.getNonStockManeuvers(),
allmaneuvers: this.actor.getAllManeuvers(),
weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
moneys: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getMoneys())),
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipments()) ),
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsMoneys()) ),
subActors: duplicate(this.actor.getSubActors()),
race: duplicate(this.actor.getRace()),
encCapacity: this.actor.getEncumbranceCapacity(),
isHold: this.actor.getHoldAction(),
isAbort: this.actor.getAbortAction(),
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
motivation: await TextEditor.enrichHTML(this.object.system.biodata.motivation, {async: true}),
quote: await TextEditor.enrichHTML(this.object.system.biodata.quote, {async: true}),
@ -76,9 +72,7 @@ export class Hero6ActorSheet extends ActorSheet {
editScore: this.options.editScore,
isGM: game.user.isGM
}
this.formData = formData;
this.stockManeuverDisplayed = false
console.log("PC : ", formData, this.object);
return formData;
@ -93,9 +87,9 @@ export class Hero6ActorSheet extends ActorSheet {
// 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
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 => {
@ -162,19 +156,13 @@ export class Hero6ActorSheet extends ActorSheet {
html.find('.roll-perception').click((event) => {
this.actor.rollPerception("int");
});
html.find('.roll-weapon').click((event) => {
const li = $(event.currentTarget).parents(".item")
this.actor.rollWeapon(li.data("item-id"));
});
html.find('.roll-power-attack').click((event) => {
const li = $(event.currentTarget).parents(".item")
this.actor.rollPowerAttack(li.data("item-id"));
});
html.find('.roll-direct').click((event) => {
const rollFormula = $(event.currentTarget).data("roll-formula")
const rollSource = $(event.currentTarget).data("roll-source")
Hero6Utility.processDirectRoll( { actorId: this.actor.id, rollFormula: rollFormula, rollSource: rollSource, mode:"directroll"} )
});
html.find('.roll-item').click((event) => {
const li = $(event.currentTarget).parents(".item");
let itemId = li.data("item-id")
@ -191,6 +179,12 @@ export class Hero6ActorSheet extends ActorSheet {
this.actor.rollLiftDice(itemId);
});
html.find('.roll-weapon').click((event) => {
const li = $(event.currentTarget).parents(".item");
const skillId = li.data("item-id")
this.actor.rollWeapon(skillId)
});
html.find('.hold-action').click((event) => {
this.actor.holdAction()
});
@ -198,16 +192,6 @@ export class Hero6ActorSheet extends ActorSheet {
this.actor.abortAction()
});
html.find(".show-stock-maneuver").click((event) => {
if ( !this.stockManeuverDisplayed) {
$('div .maneuver-list').removeClass('maneuver-is-stock');
this.stockManeuverDisplayed = true
} else {
$('div .maneuver-list').addClass('maneuver-is-stock');
this.stockManeuverDisplayed = false
}
});
html.find('.lock-unlock-sheet').click((event) => {
this.options.editScore = !this.options.editScore;
this.render(true);

View File

@ -4,7 +4,7 @@ import { Hero6RollDialog } from "./hero6-roll-dialog.js";
import { Hero6LiftDice } from "./hero6-lift-dice.js";
/* -------------------------------------------- */
const __speed2Segments = [[0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12],
const __speed2Segments = [ [0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12],
[2, 4, 6, 7, 9, 11, 12], [2, 3, 5, 6, 8, 9, 11, 12], [2, 3, 4, 6, 7, 8, 10, 11, 12], [2, 3, 4, 5, 6, 8, 9, 10, 11, 12],
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
@ -40,10 +40,11 @@ export class Hero6Actor extends Actor {
return actor;
}
if (data.type == 'character' || data.type == 'minion') {
const maneuvers = await Hero6Utility.loadCompendium("fvtt-hero-system-6.maneuvers")
let maneuversObj = maneuvers.map(i => i.toObject())
data.items = maneuversObj.filter(m => m.system.isstock)
if (data.type == 'character') {
//const skills = await Hero6Utility.loadCompendium("fvtt-hero-system-6.skills");
//data.items = skills.map(i => i.toObject())
}
if (data.type == 'npc') {
}
return super.create(data, options);
@ -60,19 +61,14 @@ export class Hero6Actor extends Actor {
/* -------------------------------------------- */
computeDerivatedData() {
let newSTREND = this.computeSTREND()
if (newSTREND != this.system.characteristics.str.strend) {
this.update({ 'system.characteristics.str.strend': newSTREND })
if (this.type == "character") {
let newSTREND = this.computeSTREND()
if (newSTREND != this.system.characteristics.str.strend) {
this.update({ 'system.characteristics.str.strend': newSTREND })
}
}
}
/* -------------------------------------------- */
performMigration() {
// Fix OCV/OMCV rollable
if (!this.system.characteristics.ocv.hasroll) {
this.update({ 'system.characteristics.ocv.hasroll': true, 'system.characteristics.omcv.hasroll': true })
}
}
/* -------------------------------------------- */
computeDicesValue() {
this.system.biodata.presenceattack = Hero6Utility.getDerivatedDiceFormulas(this.system.characteristics.pre.value)
this.system.characteristics.str.strdice = Hero6LiftDice.getLiftDice(this.system.characteristics.str.value)
@ -167,19 +163,6 @@ export class Hero6Actor extends Actor {
}
return item;
}
/* -------------------------------------------- */
async _preCreate(data, options, user) {
await super._preCreate(data, options, user);
// Configure prototype token settings
const prototypeToken = {};
if (this.type === "character") Object.assign(prototypeToken, {
sight: { enabled: true }, actorLink: true, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
});
this.updateSource({ prototypeToken });
}
/* -------------------------------------------- */
prepareSkill(skill) {
skill.roll = 0
@ -216,34 +199,12 @@ export class Hero6Actor extends Actor {
skill.roll = charac.roll
}
}
console.log("SILL", skill)
if (skill.system.levels > 0) {
skill.roll += skill.system.levels
}
}
/* -------------------------------------------- */
prepareManeuver(maneuver) {
let subMode = "normal"
if (maneuver.system.maneuvertype == "mental") {
maneuver.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0)
subMode = "omcv"
if (Number(maneuver.system.omcv)) {
maneuver.roll += (Number(maneuver.system.omcv) || 0)
} else {
maneuver.noOMCV = true
}
} else {
maneuver.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0)
subMode = "ocv"
if (Number(maneuver.system.ocv)) {
maneuver.roll += (Number(maneuver.system.ocv) || 0)
} else {
maneuver.noOCV = true
}
}
return subMode
}
/* -------------------------------------------- */
getSkills() {
let comp = duplicate(this.items.filter(item => item.type == 'skill') || [])
@ -315,18 +276,11 @@ export class Hero6Actor extends Actor {
let maneuvers = {
general: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "general"),
offensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "offensive"),
defensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "defensive"),
mental: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "mental")
defensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "defensive")
}
Hero6Utility.sortArrayObjectsByName(maneuvers.general)
Hero6Utility.sortArrayObjectsByName(maneuvers.offensive)
Hero6Utility.sortArrayObjectsByName(maneuvers.defensive)
Hero6Utility.sortArrayObjectsByName(maneuvers.mental)
return maneuvers
}
getAllManeuvers() {
let maneuvers = this.items.filter(item => item.type == "maneuver")
Hero6Utility.sortArrayObjectsByName(maneuvers)
return maneuvers
}
getNonStockManeuvers() {
@ -339,11 +293,6 @@ export class Hero6Actor extends Actor {
Hero6Utility.sortArrayObjectsByName(list)
return list
}
getMoneys() {
let list = this.items.filter(item => item.type == "equipment" && item.system.subtype == "money");
Hero6Utility.sortArrayObjectsByName(list)
return list
}
getWeapons() {
let list = this.items.filter(item => item.type == "equipment" && item.system.subtype == "weapon");
Hero6Utility.sortArrayObjectsByName(list)
@ -439,21 +388,15 @@ export class Hero6Actor extends Actor {
/* -------------------------------------------- */
async cleanCombat() {
await this.setFlag("world", "hold-action", false)
await this.setFlag("world", "abort-action", { state: false, count: 0 })
await this.setFlag("world", "abort-action", false)
}
async holdAction() {
await this.disableAbortAction()
if (this.getFlag("world", "hold-action")) {
await this.setFlag("world", "hold-action", false)
//game.combat.holdAction(this.id, false)
game.combat.forceHold(this, false)
return false
} else {
await this.setFlag("world", "hold-action", true)
//game.combat.holdAction(this.id, false)
game.combat.forceHold(this, true)
return true
}
game.combat.rebuildInitiative()
}
async disableHoldAction() {
await this.setFlag("world", "hold-action", false)
@ -462,28 +405,13 @@ export class Hero6Actor extends Actor {
await this.setFlag("world", "abort-action", { state: false, count: 0 })
}
async abortAction() {
await this.disableHoldAction()
let abort = this.getFlag("world", "abort-action")
if (abort.state) {
await this.setFlag("world", "abort-action", { state: false, count: 0 })
game.combat.forceAbort(this, false)
//game.combat.abortAction(this.id, false)
} else {
await this.setFlag("world", "abort-action", { state: true, count: 0 })
game.combat.forceAbort(this, true)
//game.combat.abortAction(this.id, true)
}
}
async incAbortActionCount() {
let abort = this.getFlag("world", "abort-action")
if (abort.state) {
abort.count++
await this.setFlag("world", "abort-action", abort)
if (abort.count == 2) {
return true
}
}
return false
game.combat.rebuildInitiative()
}
getHoldAction() {
return this.getFlag("world", "hold-action")
@ -503,7 +431,7 @@ export class Hero6Actor extends Actor {
/* -------------------------------------------- */
getSegments() {
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
//console.log("INDEX", index, __speed2Segments[index])
console.log("INDEX", index, __speed2Segments[index])
return __speed2Segments[index]
}
getPhasesString() {
@ -511,13 +439,10 @@ export class Hero6Actor extends Actor {
return __speed2Segments[index].toString()
}
/* -------------------------------------------- */
getBaseInit(turn) {
if (turn != this.turn) {
let r = new Roll("1d6").roll({ async: false })
this.currentInit = Number(this.system.characteristics.dex.initiative) + Number(((r.total / 10).toFixed(2)))
this.turn = turn
}
return this.currentInit
getBaseInit() {
let r = new Roll("1d6").roll({ async: false })
let base = this.system.characteristics.dex.value + (r.total / 10)
return base
}
/* -------------------------------------------- */
@ -547,13 +472,8 @@ export class Hero6Actor extends Actor {
/* -------------------------------------------- */
prepareCharacValues(charac) {
if (charac.label == "OCV" || charac.label == "OMCV" ) {
charac.total = charac.value
charac.roll = 11 + charac.value
} else {
charac.total = charac.value
charac.roll = 9 + Math.round((charac.value) / 5)
}
charac.total = charac.value
charac.roll = 9 + Math.round((charac.value) / 5)
}
prepareCharac() {
let characs = duplicate(this.system.characteristics)
@ -567,7 +487,7 @@ export class Hero6Actor extends Actor {
if (key == "spd") {
ch.phasesString = this.getPhasesString()
}
if (key == "pre") {
if (key =="pre") {
ch.presenceattack = duplicate(this.system.biodata.presenceattack)
}
}
@ -641,9 +561,6 @@ export class Hero6Actor extends Actor {
rollData.actorImg = this.img
rollData.actorId = this.id
rollData.img = this.img
rollData.title = this.name
rollData.subMode = "normal"
rollData.characteristics = duplicate(this.system.characteristics)
if (chKey) {
rollData.charac = duplicate(this.system.characteristics[chKey])
this.prepareCharacValues(rollData.charac)
@ -662,10 +579,12 @@ export class Hero6Actor extends Actor {
const ray = new Ray(token.object?.center || token.center, defenderToken.center)
rollData.tokensDistance = canvas.grid.measureDistances([{ ray }], { gridSpaces: false })[0] / canvas.grid.grid.options.dimensions.distance
} else {
//ui.notifications.info("No token connected to this actor, unable to compute distance.")
//return
ui.notifications.info("No token connected to this actor, unable to compute distance.")
return
}
if (defender) {
rollData.forceAdvantage = defender.isAttackerAdvantage()
rollData.advantageFromTarget = true
}
}
console.log("ROLLDATA", rollData)
@ -676,7 +595,6 @@ export class Hero6Actor extends Actor {
rollPerception() {
let rollData = this.getCommonRollData("int")
rollData.isPerception = true
rollData.title = "Perception roll"
rollData.charac.roll = Number(rollData.charac.perceptionroll)
rollData.mode = "perception"
if (rollData.target) {
@ -690,7 +608,6 @@ export class Hero6Actor extends Actor {
rollCharac(chKey) {
let rollData = this.getCommonRollData(chKey)
rollData.mode = "charac"
rollData.title = "Characteristic roll"
if (rollData.target) {
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
return
@ -702,14 +619,10 @@ export class Hero6Actor extends Actor {
let item = this.items.get(itemId)
let rollData = this.getCommonRollData()
rollData.mode = "item"
rollData.title = Hero6Utility.upperFirst(item.type) + " - " + item.name
rollData.item = duplicate(item)
if (item.type == "skill") {
this.prepareSkill(rollData.item)
}
if (item.type == "maneuver") {
rollData.subMode = this.prepareManeuver(rollData.item)
}
this.startRoll(rollData)
}
/* -------------------------------------------- */
@ -721,32 +634,18 @@ export class Hero6Actor extends Actor {
rollData.title = item.name
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(item.system.damage)
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
//await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
rollData.roll = myRoll
rollData.result = myRoll.total
rollData.bodyValue = Hero6Utility.computeBodyValue(myRoll)
let mult
if (item.system.damageeffect == "killing") { // As per issue #11
mult = new Roll("1d3").roll({ async: false })
rollData.killingMultiplier = mult.total
rollData.stunValue = Number(myRoll.total) * (Number(mult.total) + (Number(item.system.stunx) || 0))
} else {
rollData.stunValue = myRoll.total
}
let msgFlavor = await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-damage-result.hbs`, rollData)
let msg = await rollData.roll.toMessage({
user: game.user.id,
rollMode: game.settings.get("core", "rollMode"),
flavor: msgFlavor
})
if (mult) {
await Hero6Utility.showDiceSoNice(mult, game.settings.get("core", "rollMode"))
}
rollData.roll = duplicate(rollData.roll) // Convert to object
msg.setFlag("world", "rolldata", rollData)
console.log("Rolldata result", rollData)
@ -773,6 +672,7 @@ export class Hero6Actor extends Actor {
msg.setFlag("world", "rolldata", rollData)
console.log("Rolldata result", rollData)
}
/* -------------------------------------------- */
rollSkill(skillId) {
let skill = this.items.get(skillId)
@ -797,58 +697,34 @@ export class Hero6Actor extends Actor {
}
/* -------------------------------------------- */
async rollWeapon(weaponId) {
rollWeapon(weaponId) {
let weapon = this.items.get(weaponId)
if (weapon) {
weapon = duplicate(weapon)
let rollData = this.getCommonRollData()
rollData.subMode = "ocv"
rollData.mode = "weapon"
rollData.item = weapon
rollData.item.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0) + (Number(weapon.system.ocv) || 0)
rollData.img = weapon.img
this.startRoll(rollData)
} else {
ui.notifications.warn("Unable to find the weapon " + weapon.name)
}
}
/* -------------------------------------------- */
rollMentalManeuver(maneuverId) {
let maneuver = this.items.get(maneuverId)
if (maneuver) {
maneuver = duplicate(maneuver)
let rollData = this.getCommonRollData()
rollData.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(maneuver.system.omcv) || 0)
rollData.mode = "mentalmaneuver"
rollData.item = maneuver
rollData.img = maneuver.img
this.startRoll(rollData)
} else {
ui.notifications.warn("Unable to find the maneuver " + maneuver.name)
}
}
/* -------------------------------------------- */
rollPowerAttack(powerId ) {
let power = this.items.get(powerId)
if (power) {
power = duplicate(power)
let rollData = this.getCommonRollData()
rollData.mode = "powerattack"
rollData.item = power
rollData.img = power.img
if (power.system.attackvalue == "ocv") {
rollData.item.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0) + (Number(power.system.ocv) || 0)
rollData.subMode = "ocv"
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
if (skill) {
skill = duplicate(skill)
Hero6Utility.updateSkill(skill)
let abilityKey = skill.system.ability
let rollData = this.getCommonRollData(abilityKey)
rollData.mode = "weapon"
rollData.skill = skill
rollData.weapon = weapon
rollData.img = weapon.img
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
rollData.forceDisadvantage = this.isAttackDisadvantage()
}
/*if (rollData.weapon.system.isranged && rollData.tokensDistance > Hero6Utility.getWeaponMaxRange(rollData.weapon) ) {
ui.notifications.warn(`Your target is out of range of your weapon (max: ${Hero6Utility.getWeaponMaxRange(rollData.weapon)} - current : ${rollData.tokensDistance})` )
return
}*/
this.startRoll(rollData)
} else {
rollData.item.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(power.system.omcv) || 0)
rollData.subMode = "omcv"
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
}
this.startRoll(rollData)
} else {
ui.notifications.warn("Unable to find power " + power.name)
}
}
/* -------------------------------------------- */
async startRoll(rollData) {
let rollDialog = await Hero6RollDialog.create(this, rollData)

View File

@ -31,9 +31,7 @@ export class Hero6Combat extends Combat {
option.condition = true;
option.icon = '<i class="far fa-question-circle"></i>';
option.callback = target => {
let id = target.data('combatant-id')
let c = game.combat.combatants.get(id)
c.actor.holdAction()
Hero6Combat.holdAction(target.data('combatant-id'));
}
//newOpt = duplicate(option)
}
@ -42,21 +40,13 @@ export class Hero6Combat extends Combat {
}
/* -------------------------------------------- */
holdAction(combatantId) {
this.rebuildInitiative()
//console.log("Rebuilding.....")
}
/* -------------------------------------------- */
abortAction(actorId, abortState) {
this.rebuildInitiative()
static holdAction(combatantId) {
const combatant = game.combat.combatants.get(combatantId)
combatant.actor.holdAction()
}
/* -------------------------------------------- */
constructor(data, context) {
data.flags = { world: { turnData: { turnNumber: 0, segmentNumber: 12} } }
super(data, context);
this.turnNumber = 0;
@ -78,41 +68,15 @@ export class Hero6Combat extends Combat {
super.startCombat();
}
/* -------------------------------------------- */
forceHold(actor, isHold) {
if (game.user.isGM) {
let updList = []
let c = this.combatants.find(c => c.actor._id == actor.id)
let name = actor.name + ((isHold) ? " (H)" : "")
console.log("ForceHold!!", c, actor)
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
this.updateEmbeddedDocuments("Combatant", updList)
} else {
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_hold", data: { actorId: actor.id, isHold: isHold } });
}
}
/* -------------------------------------------- */
forceAbort(actor, isAbort) {
if (game.user.isGM) {
let updList = []
let c = this.combatants.find(c => c.actor._id == actor.id)
let name = actor.name + ((isAbort) ? " (A)" : "")
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
this.updateEmbeddedDocuments("Combatant", updList)
} else {
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_abort", data: { actorId: actor.id, isAbort: isAbort } });
}
}
/* -------------------------------------------- */
computeInitiative(c, updList) {
let id = c._id || c.id
let hasSegment = c.actor.hasPhase(this.segmentNumber)
let isOnHold = c.actor.getHoldAction()
let isOnAbort = c.actor.getAbortAction()
let name = c.actor.name
if (hasSegment || isOnHold || isOnAbort) {
let baseInit = c.actor ? c.actor.getBaseInit(this.segmentNumber) : 0;
if (hasSegment || isOnHold) {
let baseInit = c.actor ? c.actor.getBaseInit() : 0;
let name = c.actor.name
if (isOnHold) {
if (hasSegment) { // On hold + current segment -> auto-disable on hold
c.actor.disableHoldAction()
@ -120,11 +84,9 @@ export class Hero6Combat extends Combat {
name = c.actor.name + " (H)"
}
}
if (isOnAbort) {
if (c.actor.getAbortAction()) {
name = c.actor.name + " (A)"
if (c.actor.incAbortActionCount()) {
c.actor.disableAbortAction()
}
c.actor.disableAbortAction()
}
updList.push({ _id: id, name: name, initiative: baseInit, holdAction: c.holdAction })
} else {
@ -136,6 +98,7 @@ export class Hero6Combat extends Combat {
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
ids = typeof ids === "string" ? [ids] : ids;
console.log("Roll INIT")
let updList = []
for (let cId = 0; cId < ids.length; cId++) {
const c = this.combatants.get(ids[cId])
@ -157,9 +120,9 @@ export class Hero6Combat extends Combat {
}
if (updList.length > 0) {
await this.updateEmbeddedDocuments("Combatant", updList);
//console.log("Rebuild INIT", updList)
for (let c of updList) {
if (c.initiative != 0) {
console.log("Rebuild INIT", updList)
for(let c of updList) {
if ( c.initiative != 0) {
return true
}
}
@ -167,77 +130,17 @@ export class Hero6Combat extends Combat {
return false
}
/* -------------------------------------------- */
nextTurn() {
let nbC = this.combatants.filter(c => c.initiative > 0).length
//console.log("Next turn called....", this.turn, nbC)
if (this.turn < nbC - 1) {
super.nextTurn()
} else {
this.nextRound()
}
}
/* -------------------------------------------- */
async previousRound() {
let hasCombatants = false
let nextRound = this.round
let advanceTime = 0
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
let turnData = this.getFlag("world", "turnData")
//console.log("Next round called....", nextRound, turnData)
while (!hasCombatants) {
if (this.settings.skipDefeated && (turn !== null)) {
turn = this.turns.findIndex(t => !t.isDefeated);
if (turn === -1) {
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
turn = 0;
}
}
advanceTime = -1 * (Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime);
advanceTime -= CONFIG.time.roundTime;
nextRound = nextRound -1
//console.log("Next round called....2", nextRound, turnData)
turnData = this.getFlag("world", "turnData")
if (!turnData) {
turnData = { turnNumber: 0, segmentNumber: 12 }
this.setFlag("world", "turnData", turnData)
}
turnData = duplicate(turnData)
turnData.segmentNumber -= 1
if (turnData.segmentNumber <= 0) {
turnData.segmentNumber = 12
turnData.turnNumber--
}
await this.setFlag("world", "turnData", turnData)
this.turnNumber = turnData.turnNumber;
this.segmentNumber = turnData.segmentNumber;
//console.log("Next round called....3", nextRound, turnData)
// Re-compute init of actors
hasCombatants = await this.rebuildInitiative()
//console.log("Going round....", nextRound, hasCombatants)
}
// Update the document, passing data through a hook first
const updateData = { round: nextRound, turn };
const updateOptions = { advanceTime, direction: -1 };
Hooks.callAll("combatRound", this, updateData, updateOptions);
console.log(this)
return this.update(updateData, updateOptions);
}
/* -------------------------------------------- */
async nextRound() {
let hasCombatants = false
let nextRound = this.round
let advanceTime = 0
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
let turnData = this.getFlag("world", "turnData")
let turnData = this.getFlag("world", "hero6-turn-data")
//console.log("Next round called....", nextRound, turnData)
console.log("Next round called....", nextRound, turnData)
while (!hasCombatants) {
turn = turn; // Preserve the fact that it's no-one's turn currently.
if (this.settings.skipDefeated && (turn !== null)) {
turn = this.turns.findIndex(t => !t.isDefeated);
if (turn === -1) {
@ -248,51 +151,44 @@ export class Hero6Combat extends Combat {
advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime;
advanceTime += CONFIG.time.roundTime;
nextRound = nextRound + 1;
//console.log("Next round called....2", nextRound, turnData)
turnData = this.getFlag("world", "turnData")
console.log("Next round called....2", nextRound, turnData)
turnData = this.getFlag("world", "hero6-turn-data")
if (!turnData) {
turnData = { turnNumber: 0, segmentNumber: 12 }
this.setFlag("world", "turnData", turnData)
this.setFlag("world", "hero6-turn-data", turnData)
}
turnData = duplicate(turnData)
turnData.segmentNumber += 1
if (turnData.segmentNumber > 12) {
turnData.segmentNumber = 1
turnData.turnNumber++
ChatMessage.create({
content: "Complete Post-Segment 12 Recoveries."
})
}
await this.setFlag("world", "turnData", turnData)
await this.setFlag("world", "hero6-turn-data", turnData)
this.turnNumber = turnData.turnNumber;
this.segmentNumber = turnData.segmentNumber;
//console.log("Next round called....3", nextRound, turnData)
console.log("Next round called....3", nextRound, turnData)
// Re-compute init of actors
hasCombatants = await this.rebuildInitiative()
//console.log("Going round....", nextRound, hasCombatants)
console.log("Going round....", nextRound, hasCombatants)
}
// Update the document, passing data through a hook first
const updateData = { round: nextRound, turn };
const updateData = { round: nextRound, turn: turn, segmentNumber: turnData.segmentNumber, turnNumber: turnData.turnNumber };
const updateOptions = { advanceTime, direction: 1 };
Hooks.callAll("combatRound", this, updateData, updateOptions);
console.log(this)
return this.update(updateData, updateOptions);
}
/* -------------------------------------------- */
async _onCreateDescendantDocuments(type, documents, result, options, userId) {
//console.log("Added...")
if (game.user.isGM) {
await super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
await this.rebuildInitiative()
}
async _onCreateEmbeddedDocuments(type, documents, result, options, userId) {
super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
}
/* --------------------------------------------
/* -------------------------------------------- */
_onUpdate(changed, options, userId) {
}*/
}
/* -------------------------------------------- */
static async checkTurnPosition() {

View File

@ -10,8 +10,7 @@ export const Hero6_CONFIG = {
maneuverTypes: {
"general": "General",
"offensive": "Offensive",
"defensive": "Defensive",
"mental": "Mental"
"defensive": "Defensive"
},
rollCharac : {
"str": "Strength",
@ -22,13 +21,6 @@ export const Hero6_CONFIG = {
"pre": "Presence",
"manual": "Manual",
},
damageEffect: {
"normal": "Normal",
"killing": "Killing",
"stunonly": "Stun Only",
"bodyonly": "Body Only",
"effect": "Effect"
},
skillType: {
"agility": "Agility",
"interaction": "Interaction",
@ -37,10 +29,6 @@ export const Hero6_CONFIG = {
"combat": "Combat" ,
"custom": "Custom"
},
attackTypes: {
"ocv": "OCV",
"omcv": "OMCV"
},
powerEquipmentType: {
"adjustment": "Adjustment",
"mental": "Mental",
@ -65,5 +53,6 @@ export const Hero6_CONFIG = {
"standard": "Standard",
"normal": "Normal",
"killing": "Killing",
"countbody": "Killing (Count BODY)"
}
}

View File

@ -147,13 +147,13 @@ export class Hero6ItemSheet extends ItemSheet {
});
html.find('.item-skill-profiency').click(ev => {
this.object.update( {'system.skillfamiliarity': false, 'system.cost': 2} )
this.object.update( {'system.levels': 12, 'system.cost': 2} )
} )
html.find('.item-skill-familiarity').click(ev => {
this.object.update( {'system.skillprofiency': false, 'system.cost': 1} )
this.object.update( {'system.levels': 10, 'system.cost': 1} )
} )
html.find('.item-skill-everyman').click(ev => {
this.object.update( {'system.cost': 0} )
this.object.update( {'system.levels': 8, 'system.cost': 0} )
} )
html.find('.view-subitem').click(ev => {

View File

@ -41,7 +41,7 @@ Hooks.once("init", async function () {
// Set an initiative formula for the system
CONFIG.Combat.initiative = {
formula: "1d6",
decimals: 2
decimals: 3
};
/* ------------------------------- ------------- */
@ -61,7 +61,7 @@ Hooks.once("init", async function () {
// Register sheet application classes
Actors.unregisterSheet("core", ActorSheet);
Actors.registerSheet("fvtt-hero-system-6", Hero6ActorSheet, { types: ["character"], makeDefault: true });
Actors.registerSheet("fvtt-hero-system-6", Hero6ActorSheet, { types: ["minion"], makeDefault: false });
Actors.registerSheet("fvtt-hero-system-6", Hero6NPCSheet, { types: ["npc"], makeDefault: false });
Items.unregisterSheet("core", ItemSheet);
Items.registerSheet("fvtt-hero-system-6", Hero6ItemSheet, { makeDefault: true });

View File

@ -5,7 +5,7 @@ export class Hero6RollDialog extends Dialog {
/* -------------------------------------------- */
static async create(actor, rollData) {
let options = { classes: ["Hero6Dialog"], width: 320, height: 'fit-content', 'z-index': 99999 };
let options = { classes: ["Hero6Dialog"], width: 460, height: 'fit-content', 'z-index': 99999 };
let html = await renderTemplate('systems/fvtt-hero-system-6/templates/apps/roll-dialog-generic.hbs', rollData);
return new Hero6RollDialog(actor, rollData, html, options);
@ -14,7 +14,7 @@ export class Hero6RollDialog extends Dialog {
/* -------------------------------------------- */
constructor(actor, rollData, html, options, close = undefined) {
let conf = {
title: "Roll window",
title: (rollData.mode == "skill") ? "Skill" : "Attribute",
content: html,
buttons: {
roll: {

View File

@ -43,9 +43,6 @@ export class Hero6Utility {
Handlebars.registerHelper('mul', function (a, b) {
return Number(a) * Number(b);
})
Handlebars.registerHelper('add', function (a, b) {
return (Number(a) || 0) + (Number(b) || 0);
})
Handlebars.registerHelper('locationLabel', function (key) {
return __locationNames[key]
})
@ -55,9 +52,6 @@ export class Hero6Utility {
}
return false
})
Handlebars.registerHelper('fixNum', function (value) {
return Number(value) || 0
})
Handlebars.registerHelper('checkInit', function (value) {
let myValue = Number(value) || 0
return myValue > 0
@ -130,10 +124,6 @@ export class Hero6Utility {
const rollTables = await Hero6Utility.loadCompendium("fvtt-hero-system-6.rolltables")
this.rollTables = rollTables.map(i => i.toObject())
for (let actor of game.actors) {
actor.performMigration()
}
}
/* -------------------------------------------- */
@ -169,7 +159,6 @@ export class Hero6Utility {
'systems/fvtt-hero-system-6/templates/partials/partial-options-abilities.hbs',
'systems/fvtt-hero-system-6/templates/partials/partial-item-nav.hbs',
'systems/fvtt-hero-system-6/templates/partials/partial-item-description.hbs',
'systems/fvtt-hero-system-6/templates/partials/partial-item-notes.hbs',
'systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment.hbs',
'systems/fvtt-hero-system-6/templates/partials/partial-item-cost.hbs',
'systems/fvtt-hero-system-6/templates/partials/partial-power-equipment-cost.hbs',
@ -241,21 +230,12 @@ export class Hero6Utility {
/* -------------------------------------------- */
static async onSocketMesssage(msg) {
console.log("SOCKET MESSAGE", msg.name, msg)
console.log("SOCKET MESSAGE", msg.name)
if (msg.name == "msg_update_roll") {
this.updateRollData(msg.data)
}
if (msg.name == "msg_force_hold") {
if (game.user.isGM) {
let actor = game.actors.get(msg.data.actorId)
game.combat.forceHold(actor, msg.data.isHold)
}
}
if (msg.name == "msg_force_abort") {
if (game.user.isGM) {
let actor = game.actors.get(msg.data.actorId)
game.combat.forceAbort(actor, msg.data.isAbort)
}
if (msg.name == "msg_gm_process_attack_defense") {
this.processSuccessResult(msg.data)
}
if (msg.name == "msg_gm_item_drop" && game.user.isGM) {
let actor = game.actors.get(msg.data.actorId)
@ -349,7 +329,6 @@ export class Hero6Utility {
// ability/save/size => 0
let diceFormula = "3d6"
let target = 10
if (rollData.charac) {
target = rollData.charac.roll
}
@ -359,11 +338,11 @@ export class Hero6Utility {
target += rollData.bonusMalus
// Performs roll
//console.log("Roll formula", diceFormula)
console.log("Roll formula", diceFormula)
let myRoll = rollData.roll
if (!myRoll) { // New rolls only of no rerolls
myRoll = new Roll(diceFormula).roll({ async: false })
//await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
}
rollData.roll = myRoll
@ -374,7 +353,6 @@ export class Hero6Utility {
if (rollData.result <= target) {
rollData.isSuccess = true
}
//console.log("Roll result", rollData)
if (myRoll.terms[0].total == 3) { // Always a success
rollData.isSuccess = true
}

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000188

View File

@ -1,8 +0,0 @@
2023/10/04-21:41:44.140558 7f16d7fff6c0 Recovering log #186
2023/10/04-21:41:44.150660 7f16d7fff6c0 Delete type=3 #184
2023/10/04-21:41:44.150712 7f16d7fff6c0 Delete type=0 #186
2023/10/04-21:47:02.531984 7f14567ef6c0 Level-0 table #191: started
2023/10/04-21:47:02.532010 7f14567ef6c0 Level-0 table #191: 0 bytes OK
2023/10/04-21:47:02.538823 7f14567ef6c0 Delete type=0 #189
2023/10/04-21:47:02.545067 7f14567ef6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
2023/10/04-21:47:02.545092 7f14567ef6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2023/10/04-21:35:01.811691 7f16d6ffd6c0 Recovering log #182
2023/10/04-21:35:01.822017 7f16d6ffd6c0 Delete type=3 #180
2023/10/04-21:35:01.822072 7f16d6ffd6c0 Delete type=0 #182
2023/10/04-21:41:38.795066 7f14567ef6c0 Level-0 table #187: started
2023/10/04-21:41:38.795089 7f14567ef6c0 Level-0 table #187: 0 bytes OK
2023/10/04-21:41:38.801689 7f14567ef6c0 Delete type=0 #185
2023/10/04-21:41:38.808479 7f14567ef6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
2023/10/04-21:41:38.808530 7f14567ef6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000190

View File

View File

@ -1,8 +0,0 @@
2023/10/04-21:41:44.100507 7f16d6ffd6c0 Recovering log #188
2023/10/04-21:41:44.111147 7f16d6ffd6c0 Delete type=3 #186
2023/10/04-21:41:44.111281 7f16d6ffd6c0 Delete type=0 #188
2023/10/04-21:47:02.509785 7f14567ef6c0 Level-0 table #193: started
2023/10/04-21:47:02.509815 7f14567ef6c0 Level-0 table #193: 0 bytes OK
2023/10/04-21:47:02.518200 7f14567ef6c0 Delete type=0 #191
2023/10/04-21:47:02.518694 7f14567ef6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
2023/10/04-21:47:02.518773 7f14567ef6c0 Manual compaction at level-1 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2023/10/04-21:35:01.768747 7f16d7fff6c0 Recovering log #184
2023/10/04-21:35:01.779863 7f16d7fff6c0 Delete type=3 #182
2023/10/04-21:35:01.779921 7f16d7fff6c0 Delete type=0 #184
2023/10/04-21:41:38.760705 7f14567ef6c0 Level-0 table #189: started
2023/10/04-21:41:38.760752 7f14567ef6c0 Level-0 table #189: 0 bytes OK
2023/10/04-21:41:38.767288 7f14567ef6c0 Delete type=0 #187
2023/10/04-21:41:38.774856 7f14567ef6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
2023/10/04-21:41:38.781126 7f14567ef6c0 Manual compaction at level-1 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000182

View File

View File

@ -1,8 +0,0 @@
2023/10/04-21:41:44.152237 7f16d6ffd6c0 Recovering log #180
2023/10/04-21:41:44.162524 7f16d6ffd6c0 Delete type=3 #178
2023/10/04-21:41:44.162593 7f16d6ffd6c0 Delete type=0 #180
2023/10/04-21:47:02.538933 7f14567ef6c0 Level-0 table #185: started
2023/10/04-21:47:02.538963 7f14567ef6c0 Level-0 table #185: 0 bytes OK
2023/10/04-21:47:02.544945 7f14567ef6c0 Delete type=0 #183
2023/10/04-21:47:02.545085 7f14567ef6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
2023/10/04-21:47:02.545108 7f14567ef6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2023/10/04-21:35:01.823989 7f16d7fff6c0 Recovering log #176
2023/10/04-21:35:01.834386 7f16d7fff6c0 Delete type=3 #174
2023/10/04-21:35:01.834682 7f16d7fff6c0 Delete type=0 #176
2023/10/04-21:41:38.788643 7f14567ef6c0 Level-0 table #181: started
2023/10/04-21:41:38.788676 7f14567ef6c0 Level-0 table #181: 0 bytes OK
2023/10/04-21:41:38.794955 7f14567ef6c0 Delete type=0 #179
2023/10/04-21:41:38.808465 7f14567ef6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
2023/10/04-21:41:38.808513 7f14567ef6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

View File

@ -1 +0,0 @@
MANIFEST-000188

View File

View File

@ -1,8 +0,0 @@
2023/10/04-21:41:44.164948 7f16ecffa6c0 Recovering log #186
2023/10/04-21:41:44.175548 7f16ecffa6c0 Delete type=3 #184
2023/10/04-21:41:44.175604 7f16ecffa6c0 Delete type=0 #186
2023/10/04-21:47:02.552360 7f14567ef6c0 Level-0 table #191: started
2023/10/04-21:47:02.552386 7f14567ef6c0 Level-0 table #191: 0 bytes OK
2023/10/04-21:47:02.560501 7f14567ef6c0 Delete type=0 #189
2023/10/04-21:47:02.560629 7f14567ef6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
2023/10/04-21:47:02.560655 7f14567ef6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2023/10/04-21:35:01.836873 7f16ecffa6c0 Recovering log #182
2023/10/04-21:35:01.847899 7f16ecffa6c0 Delete type=3 #180
2023/10/04-21:35:01.847965 7f16ecffa6c0 Delete type=0 #182
2023/10/04-21:41:38.781263 7f14567ef6c0 Level-0 table #187: started
2023/10/04-21:41:38.781303 7f14567ef6c0 Level-0 table #187: 0 bytes OK
2023/10/04-21:41:38.788512 7f14567ef6c0 Delete type=0 #185
2023/10/04-21:41:38.808450 7f14567ef6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
2023/10/04-21:41:38.808503 7f14567ef6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000190

View File

View File

@ -1,8 +0,0 @@
2023/10/04-21:41:44.127784 7f16d77fe6c0 Recovering log #188
2023/10/04-21:41:44.137990 7f16d77fe6c0 Delete type=3 #186
2023/10/04-21:41:44.138069 7f16d77fe6c0 Delete type=0 #188
2023/10/04-21:47:02.518821 7f14567ef6c0 Level-0 table #193: started
2023/10/04-21:47:02.518901 7f14567ef6c0 Level-0 table #193: 0 bytes OK
2023/10/04-21:47:02.525324 7f14567ef6c0 Delete type=0 #191
2023/10/04-21:47:02.545045 7f14567ef6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
2023/10/04-21:47:02.545077 7f14567ef6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2023/10/04-21:35:01.795955 7f16d77fe6c0 Recovering log #184
2023/10/04-21:35:01.806044 7f16d77fe6c0 Delete type=3 #182
2023/10/04-21:35:01.806101 7f16d77fe6c0 Delete type=0 #184
2023/10/04-21:41:38.774865 7f14567ef6c0 Level-0 table #189: started
2023/10/04-21:41:38.774887 7f14567ef6c0 Level-0 table #189: 0 bytes OK
2023/10/04-21:41:38.780982 7f14567ef6c0 Delete type=0 #187
2023/10/04-21:41:38.781151 7f14567ef6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
2023/10/04-21:41:38.781172 7f14567ef6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000190

View File

View File

@ -1,8 +0,0 @@
2023/10/04-21:41:44.114622 7f16ecffa6c0 Recovering log #188
2023/10/04-21:41:44.125734 7f16ecffa6c0 Delete type=3 #186
2023/10/04-21:41:44.125812 7f16ecffa6c0 Delete type=0 #188
2023/10/04-21:47:02.525443 7f14567ef6c0 Level-0 table #193: started
2023/10/04-21:47:02.525470 7f14567ef6c0 Level-0 table #193: 0 bytes OK
2023/10/04-21:47:02.531866 7f14567ef6c0 Delete type=0 #191
2023/10/04-21:47:02.545057 7f14567ef6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
2023/10/04-21:47:02.545100 7f14567ef6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2023/10/04-21:35:01.783254 7f16ecffa6c0 Recovering log #184
2023/10/04-21:35:01.792970 7f16ecffa6c0 Delete type=3 #182
2023/10/04-21:35:01.793080 7f16ecffa6c0 Delete type=0 #184
2023/10/04-21:41:38.767422 7f14567ef6c0 Level-0 table #189: started
2023/10/04-21:41:38.767446 7f14567ef6c0 Level-0 table #189: 0 bytes OK
2023/10/04-21:41:38.774734 7f14567ef6c0 Delete type=0 #187
2023/10/04-21:41:38.781109 7f14567ef6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
2023/10/04-21:41:38.781182 7f14567ef6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000188

View File

View File

@ -1,8 +0,0 @@
2023/10/04-21:41:44.177511 7f16d77fe6c0 Recovering log #186
2023/10/04-21:41:44.187706 7f16d77fe6c0 Delete type=3 #184
2023/10/04-21:41:44.187791 7f16d77fe6c0 Delete type=0 #186
2023/10/04-21:47:02.545189 7f14567ef6c0 Level-0 table #191: started
2023/10/04-21:47:02.545213 7f14567ef6c0 Level-0 table #191: 0 bytes OK
2023/10/04-21:47:02.552254 7f14567ef6c0 Delete type=0 #189
2023/10/04-21:47:02.560616 7f14567ef6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
2023/10/04-21:47:02.560646 7f14567ef6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2023/10/04-21:35:01.850710 7f16d77fe6c0 Recovering log #182
2023/10/04-21:35:01.861789 7f16d77fe6c0 Delete type=3 #180
2023/10/04-21:35:01.861973 7f16d77fe6c0 Delete type=0 #182
2023/10/04-21:41:38.801785 7f14567ef6c0 Level-0 table #187: started
2023/10/04-21:41:38.801808 7f14567ef6c0 Level-0 table #187: 0 bytes OK
2023/10/04-21:41:38.808336 7f14567ef6c0 Delete type=0 #185
2023/10/04-21:41:38.808493 7f14567ef6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
2023/10/04-21:41:38.808522 7f14567ef6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000086

View File

View File

@ -1,7 +0,0 @@
2023/08/24-15:57:43.392826 7fab4affd6c0 Recovering log #84
2023/08/24-15:57:43.403060 7fab4affd6c0 Delete type=3 #82
2023/08/24-15:57:43.403157 7fab4affd6c0 Delete type=0 #84
2023/08/24-15:59:11.995583 7fab497fa6c0 Level-0 table #89: started
2023/08/24-15:59:11.995614 7fab497fa6c0 Level-0 table #89: 0 bytes OK
2023/08/24-15:59:12.004480 7fab497fa6c0 Delete type=0 #87
2023/08/24-15:59:12.025495 7fab497fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

View File

@ -1,7 +0,0 @@
2023/08/24-15:09:37.452353 7fab4b7fe6c0 Recovering log #80
2023/08/24-15:09:37.462595 7fab4b7fe6c0 Delete type=3 #78
2023/08/24-15:09:37.462673 7fab4b7fe6c0 Delete type=0 #80
2023/08/24-15:56:20.976153 7fab497fa6c0 Level-0 table #85: started
2023/08/24-15:56:20.976179 7fab497fa6c0 Level-0 table #85: 0 bytes OK
2023/08/24-15:56:20.984268 7fab497fa6c0 Delete type=0 #83
2023/08/24-15:56:20.984458 7fab497fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -63,10 +63,6 @@
}
.app.sidebar-popout .window-content {
color: rgba(4, 44, 44, 0.98);
}
.window-header{
background: rgba(0,0,0,0.75);
}
@ -74,13 +70,13 @@
color: rgba(224, 208, 197, 0.9);
}
.dialog-content, .dialog-buttons, .form-fields {
color: rgba(4, 44, 44, 0.98);
color: rgba(224, 208, 197, 0.9);
}
.dialog-buttons {
color: rgba(224, 208, 197, 0.9);
}
.dialog .dialog-buttons button.default {
color: rgba(4, 44, 44, 0.98);
color: rgba(224, 208, 197, 0.9);
}
.window-app.sheet .window-content {
margin: 0;
@ -649,11 +645,6 @@ ul, li {
align-content: center;
}
.content-center {
align-content: center;
text-align: center;
}
.attribut-value,
.carac-value {
flex-grow: 0;
@ -821,13 +812,10 @@ ul, li {
.roll-dialog-header {
height: 52px;
}
.dialog-roll-title {
margin-left: 8px;
}
.actor-icon {
float: left;
width: 48px;
max-width: 48px;
height: 48px;
padding: 2px 6px 2px 2px;
}
@ -1047,31 +1035,6 @@ ul, li {
opacity: 1;
}
.chat-card-small-button {
box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
background-color: #7d5d3b00;
border-radius: 3px;
border: 1px ridge #846109;
display: inline-block;
cursor: pointer;
color: #ffffff;
font-size: 0.8rem;
text-decoration: none;
text-shadow: 0px 1px 0px #4d3534;
position: relative;
margin:1px;
}
.chat-card-small-button:hover {
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
background-color: red;
}
.chat-card-small-button:active {
position:relative;
top:1px;
}
.chat-card-button {
box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
@ -1155,8 +1118,8 @@ ul, li {
}
#logo {
content : url(../images/ui/logo_hex_yellow_01.webp);
width: 60px;
content : url(../images/ui/crucible_game_logo.png);
width: 100px;
height: 60px;
}
@ -1295,9 +1258,6 @@ Focus FOC: #ff0084
background: black;
color: white;
}
.item-packed {
flex-grow:0;
}
.items-title-text {
margin-left: 4px;
}
@ -1368,12 +1328,6 @@ Focus FOC: #ff0084
flex-grow:1;
max-width: 8rem;
min-width: 8rem;
text-align: start;
}
.item-field-text-long {
flex-grow:1;
max-width: 14rem;
min-width: 14rem;
}
.item-field-label-long-img {
flex-grow:1;
@ -1398,9 +1352,6 @@ Focus FOC: #ff0084
.item-control-end {
align-self: flex-end;
}
.margin-space-4 {
margin-left: 4px;
}
.margin-item-list {
margin-top: 4px;
}
@ -1422,12 +1373,7 @@ Focus FOC: #ff0084
}
.item-controls-fixed {
min-width:2rem;
/*max-width: 2rem;*/
}
.item-controls-fixed-small {
min-width:1rem;
font-size: 0.8rem;
/*max-width: 2rem;*/
max-width: 2rem;
}
.biodata-portrait {
min-height: 512px;
@ -1437,16 +1383,3 @@ Focus FOC: #ff0084
min-height: 100%;
height: 100%;
}
.margin-left-4 {
margin-left: 4px;
}
.margin-left-8 {
margin-left: 8px;
}
.maneuver-is-stock {
display: none;
visibility: hidden;
}
.compendium .directory-list .directory-item .folder-header h3 {
color:#000
}

View File

@ -5,11 +5,11 @@
"flags": {}
}
],
"description": "Hero System 6E for FoundryVTT (Official)",
"description": "Hero System v6 for FoundryVTT (Official)",
"esmodules": [
"modules/hero6-main.js"
],
"gridDistance": 2,
"gridDistance": 5,
"gridUnits": "m",
"languages": [
{
@ -30,6 +30,15 @@
"private": false,
"flags": {}
},
{
"type": "Item",
"label": "Weapons",
"name": "weapons",
"path": "packs/weapons.db",
"system": "fvtt-hero-system-6",
"private": false,
"flags": {}
},
{
"type": "Item",
"label": "Skills",
@ -57,15 +66,6 @@
"private": false,
"flags": {}
},
{
"type": "Item",
"label": "Maneuvers",
"name": "maneuvers",
"path": "packs/maneuvers.db",
"system": "fvtt-hero-system-6",
"private": false,
"flags": {}
},
{
"type": "Item",
"label": "Perks",
@ -85,21 +85,22 @@
"flags": {}
}
],
"primaryTokenAttribute": "characteristics.body",
"secondaryTokenAttribute": "characteristics.end",
"primaryTokenAttribute": "secondary.hp",
"secondaryTokenAttribute": "secondary.effort",
"socket": true,
"styles": [
"styles/simple.css"
],
"version": "11.0.23",
"version": "10.0.45",
"compatibility": {
"minimum": "11",
"verified": "11"
"minimum": "10",
"verified": "10",
"maximum": "11"
},
"title": "Hero System 6E Basic (Official)",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-hero-system-6/raw/branch/master/system.json",
"download": "https://www.uberwald.me/gitea/public/fvtt-hero-system-6/archive/fvtt-hero-system-6-v11.0.23.zip",
"url": "https://www.uberwald.me/public/uberwald/",
"background": "systems/fvtt-hero-system-6/images/ui/hero_foundry_cover.webp",
"title": "Hero System v6 for FoundrtVTT (Official)",
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/main/system.json",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/archive/fvtt-hero-system-6-v10.0.45.zip",
"url": "https://www.uberwald.me/gitea/uberwald/",
"background": "images/ui/hro6_welcome_page.webp",
"id": "fvtt-hero-system-6"
}

View File

@ -1,8 +1,7 @@
{
"Actor": {
"types": [
"character",
"minion"
"character"
],
"templates": {
"biodata": {
@ -57,7 +56,6 @@
"value": 10,
"base": 10,
"hasroll": true,
"initiative": 10,
"category": "main"
},
"con": {
@ -73,7 +71,7 @@
"category": "main",
"value": 10,
"base": 10,
"perceptionroll": 11
"perceptionroll": 10
},
"ego": {
"label": "EGO",
@ -91,7 +89,7 @@
},
"ocv": {
"label": "OCV",
"hasroll": true,
"hasroll": false,
"base": 3,
"autoMod": "0",
"userMod": "0",
@ -109,7 +107,7 @@
},
"omcv": {
"label": "OMCV",
"hasroll": true,
"hasroll": false,
"base": 3,
"autoMod": "0",
"userMod": "0",
@ -206,7 +204,6 @@
"ismovement": true,
"hasroll": false,
"value": 12,
"ncvalue": 24,
"base": 12
},
"swimming": {
@ -214,7 +211,6 @@
"ismovement": true,
"hasroll": false,
"value": 4,
"ncvalue": 8,
"base": 4
},
"leaping": {
@ -222,7 +218,6 @@
"ismovement": true,
"hasroll": false,
"value": 4,
"ncvalue": 8,
"base": 4,
"leaping_horizontal_base": 0,
"leaping_horizontal_total": 0,
@ -235,31 +230,25 @@
"movements": {
"fly": {
"label": "Fly",
"value": 0,
"ncvalue": 0
"value": 0
},
"teleport": {
"label": "Teleport",
"value": 0,
"ncvalue": 0
"value": 0
},
"tunnel": {
"label": "Tunnel",
"value": 0,
"ncvalue": 0
"value": 0
},
"move1": {
"label": "N/A",
"iseditable": true,
"value": 0,
"ncvalue": 0
"value": 0
},
"move2": {
"label": "N/A",
"iseditable": true,
"value": 0,
"ncvalue": 0
"value": 0
}
}
},
@ -310,15 +299,6 @@
"movements"
],
"subactors": []
},
"minion": {
"templates": [
"biodata",
"characteristics",
"defenses",
"movements"
],
"subactors": []
}
},
"Item": {
@ -354,19 +334,14 @@
"levels": 0,
"quantity": 1,
"range": "",
"damageeffect": "normal",
"damage": "",
"stunx": 0,
"endurance": 0,
"hasroll": false,
"attackvalue": "ocv",
"roll": 0,
"computebody": false,
"haseffectroll": false,
"effectroll": "standard",
"effectrollformula": "",
"hascharges": false,
"nbcharges": 0,
"items": {}
}
},
@ -378,8 +353,6 @@
"pha": "",
"ocv": "",
"dcv" : "",
"omcv": "",
"dmcv" : "",
"isstock": false,
"active": false
},
@ -421,19 +394,7 @@
"subtype": "equipment",
"value": 0,
"weight": 0,
"moneycost": 0,
"ocv": 0,
"omcv": 0,
"dmcv": 0,
"rmod": 0,
"pd": 0,
"ed": 0,
"rpd": 0,
"red": 0,
"mentaldefense": 0,
"powerdefense": 0,
"flashdefense": 0,
"otherdefense": 0
"moneycost": 0
},
"attack": {
"templates": [

View File

@ -18,60 +18,54 @@
<ul class="item-list alternate-list">
<li class="item flexrow">
<label class="item-field-label-medium">Alternate IDs</label>
<input type="text" class="item-field-label-long4" name="system.biodata.alternateids"
value="{{system.biodata.origin}}" data-dtype="String" />
<input type="text" class="item-field-label-long4" name="system.biodata.alternateids" value="{{system.biodata.origin}}"
data-dtype="String" />
</li>
</ul>
</div>
<div class="grid grid-2col">
<div>
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="item-field-label-medium">Campaign</label>
<input type="text" class="item-field-label-long3" name="system.biodata.campaign"
value="{{system.biodata.campaign}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-medium">Player</label>
<input type="text" class="item-field-label-long3" name="system.biodata.player"
value="{{system.biodata.player}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-medium">GM</label>
<input type="text" class="item-field-label-long3" name="system.biodata.gm"
value="{{system.biodata.gm}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="item-field-label-medium">Hair</label>
<input type="text" class="item-field-label-long3" name="system.biodata.hair"
value="{{system.biodata.hair}}" data-dtype="String" />
</li>
</ul>
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="item-field-label-medium">Campaign</label>
<input type="text" class="item-field-label-long3" name="system.biodata.campaign" value="{{system.biodata.campaign}}" data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-medium">Player</label>
<input type="text" class="item-field-label-long3" name="system.biodata.player" value="{{system.biodata.player}}"
data-dtype="String" />
</li>
<li class="flexrow item">
<label class="item-field-label-medium">GM</label>
<input type="text" class="item-field-label-long3" name="system.biodata.gm" value="{{system.biodata.gm}}"
data-dtype="String" />
</li>
<li class="item flexrow">
<label class="item-field-label-medium">Hair</label>
<input type="text" class="item-field-label-long3" name="system.biodata.hair" value="{{system.biodata.hair}}" data-dtype="String" />
</li>
</ul>
</div>
<div>
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="item-field-label-medium">Gender</label>
<input type="text" class="item-field-label-medium" name="system.biodata.gender"
value="{{system.biodata.gender}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="item-field-label-medium">Height</label>
<input type="text" class="item-field-label-medium" name="system.biodata.height"
value="{{system.biodata.height}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="item-field-label-medium">Mass</label>
<input type="text" class="item-field-label-medium" name="system.biodata.mass"
value="{{system.biodata.mass}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="item-field-label-medium">Eyes</label>
<input type="text" class="item-field-label-medium" name="system.biodata.eyes"
value="{{system.biodata.eyes}}" data-dtype="String" />
</li>
</ul>
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="item-field-label-medium">Gender</label>
<input type="text" class="item-field-label-medium" name="system.biodata.gender" value="{{system.biodata.gender}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="item-field-label-medium">Height</label>
<input type="text" class="item-field-label-medium" name="system.biodata.height" value="{{system.biodata.height}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="item-field-label-medium">Mass</label>
<input type="text" class="item-field-label-medium" name="system.biodata.mass" value="{{system.biodata.mass}}" data-dtype="String" />
</li>
<li class="item flexrow">
<label class="item-field-label-medium">Eyes</label>
<input type="text" class="item-field-label-medium" name="system.biodata.eyes" value="{{system.biodata.eyes}}" data-dtype="String" />
</li>
</ul>
</div>
</div>
@ -79,23 +73,19 @@
<ul class="item-list alternate-list">
<li class="item flexrow">
<label class="item-field-label-medium">Points</label>
<input type="text" class="item-field-label-short" name="system.biodata.points"
value="{{system.biodata.origin}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.biodata.points" value="{{system.biodata.origin}}" data-dtype="Number" />
<label class="">&nbsp;</label>
<label class="item-field-label-medium">Complications</label>
<input type="text" class="item-field-label-short" name="system.biodata.complications"
value="{{system.biodata.complications}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.biodata.complications" value="{{system.biodata.complications}}" data-dtype="Number" />
<label class="">&nbsp;</label>
<label class="item-field-label-medium">XP Earned</label>
<input type="text" class="item-field-label-short" name="system.biodata.xpearned"
value="{{system.biodata.xpearned}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.biodata.xpearned" value="{{system.biodata.xpearned}}" data-dtype="Number" />
<label class="">&nbsp;</label>
<label class="item-field-label-medium">XP Spent</label>
<input type="text" class="item-field-label-short" name="system.biodata.xpspent"
value="{{system.biodata.xpspent}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.biodata.xpspent" value="{{system.biodata.xpspent}}" data-dtype="Number" />
<label class="">&nbsp;</label>
</li>
</ul>
@ -129,7 +119,7 @@
<div class="tab combat" data-group="primary" data-tab="combat">
<div class="grid grid2col">
<div>
<div>
<ul class="item-list alternate-list">
<li class="item">
<label class="item-field-label-medium">STR Dice</label>
@ -137,106 +127,68 @@
<label class="item-field-label-short">&nbsp;</label>
<label class="item-field-label-medium">Lift</label>
<input type="text" class="item-field-label-short update-field" disabled
data-field-name="system.characteristics.str.lift" value="{{characteristics.str.lift}}"
data-dtype="String" />
<input type="text" class="item-field-label-short update-field" disabled data-field-name="system.characteristics.str.lift" value="{{characteristics.str.lift}}" data-dtype="String" />
<label class="item-field-label-short">&nbsp;</label>
<label class="item-field-label-medium">STR END</label>
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.str.strend" disabled value="{{characteristics.str.strend}}"
data-dtype="Number" />
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.str.strend" disabled value="{{characteristics.str.strend}}" data-dtype="Number" />
</li>
</ul>
{{#each maneuvers as |mlist mtype|}}
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long-img">
<label class="">{{upperFirst mtype}} Maneuver</label>
</span>
<span class="item-field-label-very-short">
<label class="short-label">PHA</label>
</span>
{{#if (eq mtype "mental")}}
<span class="item-field-label-very-short">
<label class="short-label">OMCV</label>
</span>
<span class="item-field-label-very-short">
<label class="short-label">DMCV</label>
</span>
{{else}}
<span class="item-field-label-very-short">
<label class="short-label">OCV</label>
</span>
<span class="item-field-label-very-short">
<label class="short-label">DCV</label>
</span>
{{/if}}
<span class="item-field-text-long">
<label class="short-label">Effects</label>
</span>
</li>
{{#each mlist as |maneuver key|}}
<li class="item flexrow list-item list-item-shadow " data-item-id="{{maneuver._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{maneuver.img}}" />
</a>
<span class="item-field-label-long">
<a class="roll-item"><i class="fas fa-dice"></i></a>
{{maneuver.name}}
{{#each maneuvers as |mlist key|}}
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long-img">
<label class="">{{upperFirst key}} Maneuver</label>
</span>
<span class="item-field-label-very-short">
<label class="short-label">PHA</label>
</span>
<span class="item-field-label-very-short">
<label class="short-label">OCV</label>
</span>
<span class="item-field-label-short">
<label class="short-label">DCV</label>
</span>
<span class="item-field-label-long">
<label class="short-label">Effects</label>
</span>
</li>
{{#each mlist as |maneuver key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{maneuver._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{maneuver.img}}" /></a>
<span class="item-field-label-long">{{maneuver.name}}</span>
<span class="item-field-label-very-short content-center">{{maneuver.system.pha}}</span>
{{#if (eq ../mtype "mental")}}
<span class="item-field-label-very-short content-center">{{maneuver.system.omcv}}</span>
<span class="item-field-label-very-short content-center">{{maneuver.system.dmcv}}</span>
{{else}}
<span class="item-field-label-very-short content-center">{{maneuver.system.ocv}}</span>
<span class="item-field-label-very-short content-center">{{maneuver.system.dcv}}</span>
{{/if}}
<span class="item-field-label-very-short">{{maneuver.system.pha}}</span>
<span class="item-field-label-very-short">{{maneuver.system.ocv}}</span>
<span class="item-field-label-short">{{maneuver.system.dcv}}</span>
<span class="item-field-text-long">{{maneuver.system.effects}}
{{#if maneuver.system.haseffectroll}}
<a class="roll-direct" data-roll-source="Maneuver {{maneuver.name}}"
data-roll-formula="{{maneuver.system.effectrollformula}}">
<i class="fas fa-dice"></i>{{maneuver.system.effectrollformula}}
</a>
{{/if}}
</span>
<span class="item-field-label-long">{{maneuver.system.effects}}</span>
</li>
{{/each}}
</ul>
<span class="item-field-label-short">&nbsp;</span>
<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>
<ul class="item-list alternate-list">
<li class="flexrow item">
<label class="item-field-label-medium">SPD</label>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.spd.value" value="{{characteristics.spd.value}}" data-dtype="Number" />
<label class="item-packed">Initiative</label>
<input type="text" class="margin-left-4item-packed item-field-label-very-short update-field"
data-field-name="system.characteristics.dex.initiative" value="{{characteristics.dex.initiative}}"
data-dtype="Number" />
<span class="item-field-label-very-short">&nbsp;</span>
<button class="chat-card-button item-field-label-medium hold-action">Hold/Unhold</button>
<button class="chat-card-button item-field-label-medium abort-action">Abort/Unabort</button>
<span class="">&nbsp;</span>
<label class="items-title-text item-packed margin-left-8">SPD</label>
<input type="text" class="item-field-label-very-short margin-left-4 update-field item-packed"
data-field-name="system.characteristics.spd.value" value="{{characteristics.spd.value}}"
data-dtype="Number" />
<button class="chat-card-small-button item-field-label-short margin-left-8 hold-action item-packed">{{#if
isHold}}Unhold{{else}}Hold{{/if}}</button>
<button class="chat-card-small-button item-field-label-short margin-left-4 abort-action item-packed">{{#if
isAbort}}Unabort{{else}}Abort{{/if}}</button>
<label class="items-title-text margin-left-8">Presence attack</label>
<a class="roll-direct" data-roll-source="Presence attack"
data-roll-formula="{{system.biodata.presenceattack.rollFormula}}">
<i class="fas fa-dice"></i>{{system.biodata.presenceattack.displayFormula}}
</a>
<label class="item-field-label-long">Presence attack</label>
<a class="roll-direct" data-roll-source="Presence attack" data-roll-formula="{{system.biodata.presenceattack.rollFormula}}"><i class="fas fa-dice"></i>{{system.biodata.presenceattack.displayFormula}}</a>
</li>
</ul>
@ -245,26 +197,24 @@
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long">
<label class="">Vitals</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Val</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Dmg</label>
</span>
<span class="item-field-label-long">
<label class="">Vitals</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Val</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Dmg</label>
</span>
</li>
{{#each characteristics as |char key|}}
{{#if char.isvital}}
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
<span class="item-field-label-long">{{char.label}}</span>
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.{{key}}.max" value="{{char.max}}" data-dtype="Number" />
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value"
value="{{char.value}}" data-dtype="Number" />
</li>
{{/if}}
{{#if char.isvital}}
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
<span class="item-field-label-long">{{char.label}}</span>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.damage" value="{{char.damage}}" data-dtype="Number" />
</li>
{{/if}}
{{/each}}
</ul>
@ -274,73 +224,57 @@
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long">
<label class="">Defenses</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Normal</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Resistant</label>
</span>
<span class="item-field-label-long">
<label class="">Defenses</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Normal</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Resistant</label>
</span>
</li>
{{#each characteristics as |char key|}}
{{#if char.isdefense}}
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
<span class="item-field-label-long">{{char.label}}</span>
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.resistant"
value="{{char.resistant}}" data-dtype="Number" />
</li>
{{/if}}
{{#if char.isdefense}}
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
<span class="item-field-label-long">{{char.label}}</span>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.resistant" value="{{char.resistant}}" data-dtype="Number" />
</li>
{{/if}}
{{/each}}
{{#each defenses as |def key|}}
<li class="item flexrow list-item list-item-shadow" data-defense-key="{{key}}">
{{#if def.iseditable}}
<input type="text" class="item-field-label-long update-field"
data-field-name="system.defenses.{{key}}.label" value="{{def.label}}" data-dtype="String" />
{{else}}
<span class="item-field-label-long">{{def.label}}</span>
{{/if}}
<input type="text" class="item-field-label-short update-field"
data-field-name="system.defenses.{{key}}.value" value="{{def.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.defenses.{{key}}.resistant"
value="{{def.resistant}}" data-dtype="Number" />
</li>
<li class="item flexrow list-item list-item-shadow" data-defense-key="{{key}}">
{{#if def.iseditable}}
<input type="text" class="item-field-label-long update-field" data-field-name="system.defenses.{{key}}.label" value="{{def.label}}" data-dtype="String" />
{{else}}
<span class="item-field-label-long">{{def.label}}</span>
{{/if}}
<input type="text" class="item-field-label-short update-field" data-field-name="system.defenses.{{key}}.value" value="{{def.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" name="system.defenses.{{key}}.resistant" value="{{def.resistant}}" data-dtype="Number" />
</li>
{{/each}}
</ul>
</div>
</div>
<div class="item">
<label class="item-field-label-short">
<a class="roll-charac" data-charac-key="ocv"><i class="fas fa-dice"></i>OCV</a>
</label>
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.ocv.value" value="{{characteristics.ocv.value}}"
data-dtype="Number" />
<label class="item-field-label-short">OCV</label>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.ocv.value" value="{{characteristics.ocv.value}}" data-dtype="Number" />
<label class="item-field-label-short">&nbsp;</label>
<label class="item-field-label-short">DCV</label>
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.dcv.value" value="{{characteristics.dcv.value}}"
data-dtype="Number" />
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.dcv.value" value="{{characteristics.dcv.value}}" data-dtype="Number" />
<label class="item-field-label-short">&nbsp;</label>
<label class="item-field-label-short">
<a class="roll-charac" data-charac-key="omcv"><i class="fas fa-dice"></i>OMCV</a>
</label>
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.omcv.value" value="{{characteristics.omcv.value}}"
data-dtype="Number" />
<label class="item-field-label-short">OMCV</label>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.omcv.value" value="{{characteristics.omcv.value}}" data-dtype="Number" />
<label class="item-field-label-short">&nbsp;</label>
<label class="item-field-label-short">DMCV</label>
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.dmcv.value" value="{{characteristics.dmcv.value}}"
data-dtype="Number" />
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.dmcv.value" value="{{characteristics.dmcv.value}}" data-dtype="Number" />
</div>
<div class="flexrow">
@ -353,63 +287,54 @@
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long">
<label class="">Senses</label>
</span>
<span class="item-field-label-short">
</span>
</li>
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
<span class="item-field-label-long">
<a class="roll-perception"><i class="fas fa-dice"></i>Perception Roll</a>
</span>
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.int.perceptionroll"
value="{{characteristics.int.perceptionroll}}" data-dtype="Number" />
<span class="item-field-label-long">
<label class="">Senses</label>
</span>
<span class="item-field-label-short">
</span>
</li>
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
<span class="item-field-label-long">
<a class="roll-perception"><i class="fas fa-dice"></i>Perception Roll</a>
</span>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.int.perceptionroll" value="{{characteristics.int.perceptionroll}}" data-dtype="Number" />
</li>
</ul>
<textarea rows="20" type="text" class="textarea-full-height padd-right" name="system.biodata.combatnotes1"
data-dtype="String">{{system.biodata.combatnotes1}}</textarea>
<textarea type="text" class="textarea-full-height padd-right" name="system.biodata.combatnotes1" data-dtype="String">{{system.biodata.combatnotes1}}</textarea>
</div>
<div>
<ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long">
<label class="">Movement</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Combat</label>
</span>
<span class="item-field-label-short">
<label class="short-label">NC</label>
</span>
<span class="item-field-label-long">
<label class="">Movement</label>
</span>
<span class="item-field-label-short">
<label class="short-label">C</label>
</span>
<span class="item-field-label-short">
<label class="short-label">NC</label>
</span>
</li>
{{#each characteristics as |char key|}}
{{#if char.ismovement}}
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
<span class="item-field-label-long">{{char.label}}</span>
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short update-field"
data-field-name="system.characteristics.{{key}}.ncvalue" value="{{char.ncvalue}}"
data-dtype="Number" />
</li>
{{/if}}
{{#if char.ismovement}}
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
<span class="item-field-label-long">{{char.label}}</span>
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" value="{{mul char.value 2}}" disabled data-dtype="Number" />
</li>
{{/if}}
{{/each}}
{{#each movements as |move key|}}
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
{{#if move.iseditable}}
<input type="text" class="item-field-label-long update-field"
data-field-name="system.movements.{{key}}.label" value="{{move.label}}" data-dtype="String" />
{{else}}
<span class="item-field-label-long">{{move.label}}</span>
{{/if}}
<input type="text" class="item-field-label-short update-field"
data-field-name="system.movements.{{key}}.value" value="{{move.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" value="{{mul move.value 2}}" disabled
data-dtype="Number" />
</li>
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
{{#if move.iseditable}}
<input type="text" class="item-field-label-long update-field" data-field-name="system.movements.{{key}}.label" value="{{move.label}}" data-dtype="String" />
{{else}}
<span class="item-field-label-long">{{move.label}}</span>
{{/if}}
<input type="text" class="item-field-label-short update-field" data-field-name="system.movements.{{key}}.value" value="{{move.value}}" data-dtype="Number" />
<input type="text" class="item-field-label-short" value="{{mul move.value 2}}" disabled data-dtype="Number" />
</li>
{{/each}}
</ul>
@ -426,26 +351,26 @@
<div class="charac-item">
<ul>
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-short">
<label class="">Value</label>
</span>
<span class="item-field-label-medium">
<label class="item-field-label-medium">CHAR</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Base</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Roll</label>
</span>
<span class="item-field-label-long">
<label class="short-label">Notes</label>
</span>
<div class="item-filler">&nbsp;</div>
</li>
<span class="item-field-label-medium">
<label class="">Value</label>
</span>
<span class="item-field-label-medium">
<label class="item-field-label-medium">CHAR</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Base</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Roll</label>
</span>
<span class="item-field-label-long">
<label class="short-label">Notes</label>
</span>
<div class="item-filler">&nbsp;</div>
</li>
{{#each characteristics as |charac key|}}
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-full-charac.hbs charac=charac key=key}}
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-full-charac.hbs charac=charac key=key}}
{{/each}}
</ul>
</div>
@ -474,8 +399,7 @@
src="{{skill.img}}" /></a>
<span class="item-field-label-long">{{skill.name}}</span>
<span class="item-field-label-medium">{{upper skill.charac}}</span>
<span class="item-field-label-short"><a class="roll-item" data-type="skill"><i
class="fas fa-dice"></i>{{skill.roll}}-</a></span>
<span class="item-field-label-short"><a class="roll-item" data-type="skill"><i class="fas fa-dice"></i>{{skill.roll}}-</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>
@ -503,8 +427,7 @@
src="{{perk.img}}" /></a>
<span class="item-name-label">{{perk.name}}</span>
{{#if perk.system.hasroll}}
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i
class="fas fa-dice"></i>{{perk.system.roll}}-</a></span>
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i class="fas fa-dice"></i>{{perk.system.roll}}-</a></span>
{{else}}
<span class="item-field-label-short">&nbsp;</span>
{{/if}}
@ -535,8 +458,7 @@
src="{{talent.img}}" /></a>
<span class="item-name-label">{{talent.name}}</span>
{{#if talent.system.hasroll}}
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i
class="fas fa-dice"></i>{{talent.system.roll}}-</a></span>
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i class="fas fa-dice"></i>{{talent.system.roll}}-</a></span>
{{else}}
<span class="item-field-label-short">&nbsp;</span>
{{/if}}
@ -552,10 +474,6 @@
{{!-- Maneuvers Tab --}}
<div class="tab maneuver" data-group="primary" data-tab="maneuver">
<div>
<button class="show-stock-maneuver">Show/Hide stock maneuvers</button>
</div>
<ul class="stat-list alternate-list item-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long-img">
@ -570,80 +488,29 @@
<span class="item-field-label-short">
<label class="short-label">DCV</label>
</span>
<span class="item-field-label-long3">
<span class="item-field-label-long">
<label class="short-label">Effects</label>
</span>
</li>
{{#each allmaneuvers as |maneuver key|}}
{{#if (ne maneuver.system.maneuvertype "mental")}}
<div class="{{#if maneuver.system.isstock}}maneuver-list maneuver-is-stock{{/if}}">
<li class="item stat flexrow list-item list-item-shadow " data-item-id="{{maneuver._id}}">
{{#each nonstockmaneuvers as |maneuver key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{maneuver._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{maneuver.img}}" /></a>
<span class="item-field-label-long"><a class="roll-item"><i class="fas fa-dice"></i>{{maneuver.name}}</a></span>
<span class="item-field-label-long">{{maneuver.name}}</span>
<span class="item-field-label-short">{{maneuver.system.pha}}</span>
<span class="item-field-label-short">{{maneuver.system.ocv}}</span>
<span class="item-field-label-short">{{maneuver.system.dcv}}</span>
<span class="item-field-label-long3">{{maneuver.system.effects}}</span>
<span class="item-field-label-long">{{maneuver.system.effects}}</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>
</div>
{{/if}}
{{/each}}
</ul>
<ul class="stat-list alternate-list item-list">
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long-img">
<label class="">Mental Maneuvers</label>
</span>
<span class="item-field-label-short">
<label class="short-label">PHA</label>
</span>
<span class="item-field-label-short">
<label class="short-label">OMCV</label>
</span>
<span class="item-field-label-short">
<label class="short-label">DMCV</label>
</span>
<span class="item-field-label-long3">
<label class="short-label">Effects</label>
</span>
</li>
{{#each allmaneuvers as |maneuver key|}}
{{#if (eq maneuver.system.maneuvertype "mental")}}
<div class="">
<li class="item stat flexrow list-item list-item-shadow " data-item-id="{{maneuver._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{maneuver.img}}" /></a>
<span class="item-field-label-long">
<a class="roll-item"><i class="fas fa-dice"></i>
{{maneuver.name}}
</a>
</span>
<span class="item-field-label-short content-center">{{maneuver.system.pha}}</span>
<span class="item-field-label-short content-center">{{maneuver.system.omcv}}</span>
<span class="item-field-label-short content-center">{{maneuver.system.dmcv}}</span>
<span class="item-field-label-long3">{{maneuver.system.effects}}</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>
</div>
{{/if}}
{{/each}}
</ul>
</div>
{{!-- Powers Tab --}}
@ -669,8 +536,8 @@
<span class="item-field-label-short">
<label class="item-field-label-short">Roll</label>
</span>
<span class="item-field-label-short">
<label class="item-field-label-short">END</label>
<span class="item-field-label-medium">
<label class="item-field-label-medium">END</label>
</span>
</li>
{{#each powers as |power key|}}
@ -678,26 +545,15 @@
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{power.img}}" /></a>
<span class="item-field-label-short">{{power.system.cost}}</span>
{{#if (eq system.typemodifier "attack")}}
<span class="item-field-label-long3">
<a class="roll-power-attack">
<i class="fas fa-dice"></i>
{{power.name}}
</a>
</span>
{{else}}
<span class="item-field-label-long3">{{power.name}}</span>
{{/if}}
<span class="item-field-label-long2">{{power.system.displayname}}</span>
<span class="item-field-label-medium"><a class="roll-damage" data-type="power"><i
class="fas fa-dice"></i>{{power.system.damage}}</a></span>
<span class="item-field-label-medium"><a class="roll-damage" data-type="power"><i class="fas fa-dice"></i>{{power.system.damage}}</a></span>
{{#if power.system.hasroll}}
<span class="item-field-label-short"><a class="roll-item" data-type="power"><i
class="fas fa-dice"></i>{{power.system.roll}}-</a></span>
<span class="item-field-label-short"><a class="roll-item" data-type="power"><i class="fas fa-dice"></i>{{power.system.roll}}-</a></span>
{{else}}
<span class="item-field-label-short">&nbsp;</span>
{{/if}}
<span class="item-field-label-short">{{power.system.endurance}}</span>
<span class="item-field-label-medium">{{power.system.endurance}}</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>
@ -725,8 +581,7 @@
src="{{comp.img}}" /></a>
<span class="item-name-label">{{comp.name}}</span>
{{#if comp.system.hasroll}}
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i
class="fas fa-dice"></i>{{comp.system.roll}}-</a></span>
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i class="fas fa-dice"></i>{{comp.system.roll}}-</a></span>
{{else}}
<span class="item-field-label-short">&nbsp;</span>
{{/if}}
@ -749,19 +604,13 @@
<span class="small-label">Total value : {{totalValue}}</span>
</div>
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Money"
items=moneys}}
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Weapons"
items=weapons}}
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Weapons" items=weapons}}
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Armor" items=armors}}
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Shields"
items=shields}}
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Shields" items=shields}}
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Equipment"
items=equipments}}
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Equipment" items=equipments}}
<hr>
@ -844,7 +693,7 @@
</div>
</div>
</div>
</section>
</form>

View File

@ -34,8 +34,7 @@
{{#if combatCount}}
{{#if combat.round}}
<!--<h3 class="encounter-title noborder">Turn {{combat.turnNumber}} Segment {{combat.segmentNumber}}</h3>-->
<h3 class="encounter-title noborder">Turn {{combat.flags.world.turnData.turnNumber}} Segment {{combat.flags.world.turnData.segmentNumber}}</h3>
<h3 class="encounter-title noborder">Turn {{combat.turnNumber}} Segment {{combat.segmentNumber}}</h3>
{{else}}
<h3 class="encounter-title noborder">{{localize 'COMBAT.NotStarted'}}</h3>
{{/if}}

View File

@ -1,11 +1,9 @@
<form class="skill-roll-dialog">
<header class="roll-dialog-header">
<div class="flexrow">
{{#if img}}
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
{{/if}}
<h2 class="dialog-roll-title roll-dialog-header">{{title}}</h2>
</div>
{{#if img}}
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
{{/if}}
<h1 class="dialog-roll-title roll-dialog-header">{{title}}</h1>
</header>
<div class="flexcol">
@ -17,28 +15,6 @@
</div>
{{/if}}
{{#if (eq subMode "ocv")}}
<div class="flexrow">
<span class="item-field-label-long margin-item-list">OCV : </span>
<span class="item-field-label-medium margin-item-list">{{characteristics.ocv.value}}</span>
</div>
<div class="flexrow">
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} OCV : </span>
<span class="item-field-label-medium margin-item-list">{{fixNum item.system.ocv}}</span>
</div>
{{/if}}
{{#if (eq subMode "omcv")}}
<div class="flexrow">
<span class="item-field-label-long margin-item-list">OMCV : </span>
<span class="item-field-label-medium margin-item-list">{{characteristics.omcv.value}}</span>
</div>
<div class="flexrow">
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} OMCV : </span>
<span class="item-field-label-medium margin-item-list">{{fixNum item.system.omcv}}</span>
</div>
{{/if}}
{{#if item}}
<div class="flexrow">
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} - {{upperFirst item.name}}</span>

View File

@ -7,6 +7,12 @@
<hr>
{{#if img}}
<div >
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
</div>
{{/if}}
<div class="flexcol">
</div>

View File

@ -7,34 +7,21 @@
<hr>
{{#if img}}
<div >
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
</div>
{{/if}}
<div class="flexcol">
</div>
<div>
<ul>
<li>Name : {{title}}</li>
<li>Damage Effect: {{upperFirst item.system.damageeffect}}</li>
<li>Damage formula : {{diceFormula}}</li>
<li><strong>Total formula : {{result}}</strong></li>
{{#if (eq item.system.damageeffect "normal")}}
<li><strong>TOTAL : {{result}}</strong></li>
<li><strong>BODY : {{bodyValue}}</strong></li>
{{/if}}
{{#if (eq item.system.damageeffect "killing")}}
<li><strong>1d3 result + STUNx : {{killingMultiplier}} + {{item.system.stunx}} = {{add killingMultiplier item.system.stunx}}</strong></li>
<li><strong>STUN : {{stunValue}}</strong></li>
<li><strong>BODY : {{result}}</strong></li>
<li><strong>Penetrating BODY : {{bodyValue}}</strong></li>
{{/if}}
{{#if (eq item.system.damageeffect "stunonly")}}
<li><strong>STUN : {{stunValue}}</strong></li>
{{/if}}
{{#if (eq item.system.damageeffect "bodyonly")}}
<li><strong>BODY : {{bodyValue}}</strong></li>
{{/if}}
</ul>
</div>

View File

@ -7,6 +7,12 @@
<hr>
{{#if img}}
<div >
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
</div>
{{/if}}
<div class="flexcol">
</div>
@ -17,21 +23,6 @@
</li>
{{/if}}
{{#if weapon}}
<li>Weapon : {{weapon.name}}
</li>
{{/if}}
{{#if maneuver}}
<li>Maneuver : {{maneuver.name}}
</li>
{{/if}}
{{#if power}}
<li>Power : {{power.name}}
</li>
{{/if}}
{{#if rollSource}}
<li>Roll : {{rollSource}}</li>
{{/if}}
@ -42,12 +33,6 @@
{{#if item}}
<li>{{item.name}} ({{upperFirst item.type}})</li>
{{#if (eq item.type "maneuver")}}
<li>{{item.system.effects}}</li>
{{#if item.system.haseffectroll}}
<li>{{item.system.effectrollformula}}</li>
{{/if}}
{{/if}}
{{/if}}
{{#if (exists bonusMalus)}}
@ -57,7 +42,7 @@
<li><strong>TOTAL : {{result}}</strong>
{{#if (exists margin)}}
(<strong>{{#if isSuccess}}Success!!{{else}}Failure!{{/if}}</strong>)
({{#if isSuccess}}Success!!{{else}}Failure!{{/if}})
{{/if}}
</li>
@ -66,15 +51,7 @@
{{/if}}
{{#if (exists margin)}}
{{#if (eq subMode "normal")}}
<li><strong>Margin : {{margin}}</strong>
{{/if}}
{{#if (eq subMode "ocv")}}
<li><strong>Margin (DCV Hit): {{margin}}</strong>
{{/if}}
{{#if (eq subMode "omcv")}}
<li><strong>Margin (DMCV Hit): {{margin}}</strong>
{{/if}}
<li><strong>Margin : {{margin}}</strong>
{{/if}}
</ul>

View File

@ -7,6 +7,12 @@
<hr>
{{#if img}}
<div >
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
</div>
{{/if}}
<div class="flexcol">
</div>

Some files were not shown because too many files have changed in this diff Show More