Compare commits

...

33 Commits

Author SHA1 Message Date
86a9889359 Fix #29 2023-08-30 20:19:13 +02:00
7375fa39c5 Fix #27 2023-08-30 14:22:29 +02:00
ab587740d8 Fix #25 2023-08-30 09:46:43 +02:00
0f4fe253e0 Manage packs thru LFS 2023-08-29 11:17:16 +02:00
3b13a44d9d Manage packs thru LFS 2023-08-29 09:16:18 +02:00
0ebe0c3734 Manage packs thru LFS 2023-08-29 09:16:05 +02:00
6a00dd8583 Manage packs thru LFS 2023-08-29 09:14:57 +02:00
5064b83f2b Fix #21 : Add the missing helper 2023-08-29 09:12:34 +02:00
58275c32e6 Fix #21 : Add the missing helper 2023-08-27 20:44:20 +02:00
c22b950f7c Fix #21 : Add the missing helper 2023-08-27 20:43:02 +02:00
893ca4cfa5 Fix Killing damage information 2023-08-27 16:21:58 +02:00
94065a3755 Fix Killing damage information 2023-08-27 16:21:10 +02:00
1d4d3054c3 Fix various issues 2023-08-26 22:27:17 +02:00
e5c6d3f42f Fix various issues 2023-08-26 22:25:28 +02:00
f914b9838e #7 Fix starting round 2023-08-26 21:22:42 +02:00
8a543068d2 #8 Fix column alignement 2023-08-26 21:03:25 +02:00
379b8358ee #2 Fix skill profiency 2023-08-26 20:59:41 +02:00
40ee7c3c40 Move repo to public area 2023-08-26 09:49:13 +02:00
a07f367b0c Move repo to public area 2023-08-26 09:48:07 +02:00
09bb7fb692 Move repo to public area 2023-08-26 05:38:10 +02:00
92dc81af24 Move repo to public area 2023-08-26 05:36:15 +02:00
d2430ee482 Move repo to public area 2023-08-26 05:15:18 +02:00
86780ce8ae Move repo to public area 2023-08-26 05:14:08 +02:00
b383481915 First official release 2023-08-25 23:00:21 +02:00
dca78fd4b6 Add changelog 2023-08-25 19:02:40 +02:00
f381269acf Add changelog 2023-08-25 18:58:48 +02:00
686ea4cea6 Fix manifest link 2023-08-25 18:55:34 +02:00
c915b85a7b Update README 2023-08-25 16:34:10 +02:00
5026e120c1 Equipment management 2023-08-24 23:12:55 +02:00
9cefc6f816 Equipment management 2023-08-24 20:32:12 +02:00
11d7c7d1c0 Equipment management 2023-08-24 20:32:00 +02:00
3abf9a9f8f Equipment management 2023-08-24 18:45:54 +02:00
f5c0faffd3 Equipment management 2023-08-24 15:59:54 +02:00
98 changed files with 668 additions and 342 deletions

1
.gitattributes vendored Normal file
View File

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

View File

@ -2,8 +2,18 @@ This is the official Hero System 6th Edition game system for FoundryVTT, based o
The Hero System game system is not usable standalone. To play this game you need a copy of the core rulebook. 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 Installation
Manifest URL: https://github.com/Legendsmiths-LLC/ 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. For manual installation, use the provided manifest URL in the "Install System" popup window while managing game systems.

38
changelog.md Normal file
View File

@ -0,0 +1,38 @@
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

View File

@ -5,17 +5,17 @@
"minion": "Minion" "minion": "Minion"
}, },
"Item": { "Item": {
"Skill": "Skill", "skill": "Skill",
"Perk": "Perk", "perk": "Perk",
"Power": "Power", "power": "Power",
"Talent": "Talent", "talent": "Talent",
"Advantage": "Advantage", "advantage": "Advantage",
"Martialart": "Martial art", "martialart": "Martial art",
"Limitation": "Limitation", "limitation": "Limitation",
"Complication": "Complication", "complication": "Complication",
"Equipment": "Equipment", "equipment": "Equipment",
"Currency": "Currency", "currency": "Currency",
"Maneuver": "Maneuver" "maneuver": "Maneuver"
} }
}, },
"COMBAT": { "COMBAT": {

View File

@ -162,13 +162,19 @@ export class Hero6ActorSheet extends ActorSheet {
html.find('.roll-perception').click((event) => { html.find('.roll-perception').click((event) => {
this.actor.rollPerception("int"); 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) => { html.find('.roll-direct').click((event) => {
const rollFormula = $(event.currentTarget).data("roll-formula") const rollFormula = $(event.currentTarget).data("roll-formula")
const rollSource = $(event.currentTarget).data("roll-source") const rollSource = $(event.currentTarget).data("roll-source")
Hero6Utility.processDirectRoll( { actorId: this.actor.id, rollFormula: rollFormula, rollSource: rollSource, mode:"directroll"} ) Hero6Utility.processDirectRoll( { actorId: this.actor.id, rollFormula: rollFormula, rollSource: rollSource, mode:"directroll"} )
}); });
html.find('.roll-item').click((event) => { html.find('.roll-item').click((event) => {
const li = $(event.currentTarget).parents(".item"); const li = $(event.currentTarget).parents(".item");
let itemId = li.data("item-id") let itemId = li.data("item-id")
@ -184,16 +190,6 @@ export class Hero6ActorSheet extends ActorSheet {
let itemId = li.data("item-id") let itemId = li.data("item-id")
this.actor.rollLiftDice(itemId); 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('.roll-maneuver').click((event) => {
const li = $(event.currentTarget).parents(".item");
const maneuverId = li.data("maneuver-id")
this.actor.rollManeuver(maneuverId)
});
html.find('.hold-action').click((event) => { html.find('.hold-action').click((event) => {
this.actor.holdAction() this.actor.holdAction()

View File

@ -216,7 +216,6 @@ export class Hero6Actor extends Actor {
skill.roll = charac.roll skill.roll = charac.roll
} }
} }
console.log("SILL", skill)
if (skill.system.levels > 0) { if (skill.system.levels > 0) {
skill.roll += skill.system.levels skill.roll += skill.system.levels
} }
@ -224,13 +223,25 @@ export class Hero6Actor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
prepareManeuver(maneuver) { prepareManeuver(maneuver) {
let subMode = "normal"
maneuver.roll = 11 + this.system.characteristics.ocv.value if (maneuver.system.maneuvertype == "mental") {
if (Number(maneuver.system.ocv)) { maneuver.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0)
maneuver.roll += Number(maneuver.system.ocv) subMode = "omcv"
if (Number(maneuver.system.omcv)) {
maneuver.roll += (Number(maneuver.system.omcv) || 0)
} else {
maneuver.noOMCV = true
}
} else { } else {
maneuver.noOCV = true 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
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -304,11 +315,13 @@ export class Hero6Actor extends Actor {
let maneuvers = { let maneuvers = {
general: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "general"), general: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "general"),
offensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "offensive"), offensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "offensive"),
defensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "defensive") defensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "defensive"),
mental: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "mental")
} }
Hero6Utility.sortArrayObjectsByName(maneuvers.general) Hero6Utility.sortArrayObjectsByName(maneuvers.general)
Hero6Utility.sortArrayObjectsByName(maneuvers.offensive) Hero6Utility.sortArrayObjectsByName(maneuvers.offensive)
Hero6Utility.sortArrayObjectsByName(maneuvers.defensive) Hero6Utility.sortArrayObjectsByName(maneuvers.defensive)
Hero6Utility.sortArrayObjectsByName(maneuvers.mental)
return maneuvers return maneuvers
} }
getAllManeuvers() { getAllManeuvers() {
@ -628,6 +641,9 @@ export class Hero6Actor extends Actor {
rollData.actorImg = this.img rollData.actorImg = this.img
rollData.actorId = this.id rollData.actorId = this.id
rollData.img = this.img rollData.img = this.img
rollData.title = this.name
rollData.subMode = "normal"
rollData.characteristics = duplicate(this.system.characteristics)
if (chKey) { if (chKey) {
rollData.charac = duplicate(this.system.characteristics[chKey]) rollData.charac = duplicate(this.system.characteristics[chKey])
this.prepareCharacValues(rollData.charac) this.prepareCharacValues(rollData.charac)
@ -646,12 +662,10 @@ export class Hero6Actor extends Actor {
const ray = new Ray(token.object?.center || token.center, defenderToken.center) 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 rollData.tokensDistance = canvas.grid.measureDistances([{ ray }], { gridSpaces: false })[0] / canvas.grid.grid.options.dimensions.distance
} else { } else {
ui.notifications.info("No token connected to this actor, unable to compute distance.") //ui.notifications.info("No token connected to this actor, unable to compute distance.")
return //return
} }
if (defender) { if (defender) {
rollData.forceAdvantage = defender.isAttackerAdvantage()
rollData.advantageFromTarget = true
} }
} }
console.log("ROLLDATA", rollData) console.log("ROLLDATA", rollData)
@ -662,6 +676,7 @@ export class Hero6Actor extends Actor {
rollPerception() { rollPerception() {
let rollData = this.getCommonRollData("int") let rollData = this.getCommonRollData("int")
rollData.isPerception = true rollData.isPerception = true
rollData.title = "Perception roll"
rollData.charac.roll = Number(rollData.charac.perceptionroll) rollData.charac.roll = Number(rollData.charac.perceptionroll)
rollData.mode = "perception" rollData.mode = "perception"
if (rollData.target) { if (rollData.target) {
@ -675,6 +690,7 @@ export class Hero6Actor extends Actor {
rollCharac(chKey) { rollCharac(chKey) {
let rollData = this.getCommonRollData(chKey) let rollData = this.getCommonRollData(chKey)
rollData.mode = "charac" rollData.mode = "charac"
rollData.title = "Characteristic roll"
if (rollData.target) { if (rollData.target) {
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.") ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
return return
@ -686,12 +702,13 @@ export class Hero6Actor extends Actor {
let item = this.items.get(itemId) let item = this.items.get(itemId)
let rollData = this.getCommonRollData() let rollData = this.getCommonRollData()
rollData.mode = "item" rollData.mode = "item"
rollData.title = Hero6Utility.upperFirst(item.type) + " - " + item.name
rollData.item = duplicate(item) rollData.item = duplicate(item)
if (item.type == "skill") { if (item.type == "skill") {
this.prepareSkill(rollData.item) this.prepareSkill(rollData.item)
} }
if (item.type == "maneuver") { if (item.type == "maneuver") {
this.prepareManeuver(rollData.item) rollData.subMode = this.prepareManeuver(rollData.item)
} }
this.startRoll(rollData) this.startRoll(rollData)
} }
@ -704,11 +721,20 @@ export class Hero6Actor extends Actor {
rollData.title = item.name rollData.title = item.name
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(item.system.damage) rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(item.system.damage)
let myRoll = new Roll(rollData.diceFormula).roll({ async: false }) 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.roll = myRoll
rollData.result = myRoll.total rollData.result = myRoll.total
rollData.bodyValue = Hero6Utility.computeBodyValue(myRoll) 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 msgFlavor = await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-damage-result.hbs`, rollData)
let msg = await rollData.roll.toMessage({ let msg = await rollData.roll.toMessage({
@ -716,6 +742,11 @@ export class Hero6Actor extends Actor {
rollMode: game.settings.get("core", "rollMode"), rollMode: game.settings.get("core", "rollMode"),
flavor: msgFlavor flavor: msgFlavor
}) })
if (mult) {
await Hero6Utility.showDiceSoNice(mult, game.settings.get("core", "rollMode"))
}
rollData.roll = duplicate(rollData.roll) // Convert to object rollData.roll = duplicate(rollData.roll) // Convert to object
msg.setFlag("world", "rolldata", rollData) msg.setFlag("world", "rolldata", rollData)
console.log("Rolldata result", rollData) console.log("Rolldata result", rollData)
@ -743,28 +774,6 @@ export class Hero6Actor extends Actor {
console.log("Rolldata result", rollData) console.log("Rolldata result", rollData)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
rollManeuver(maneuverId) {
let skill = this.items.get(skillId)
if (skill) {
if (skill.system.islore && skill.system.level == 0) {
ui.notifications.warn("You can't use Lore Skills with a SL of 0.")
return
}
skill = duplicate(skill)
Hero6Utility.updateSkill(skill)
let abilityKey = skill.system.ability
let rollData = this.getCommonRollData(abilityKey)
rollData.mode = "skill"
rollData.skill = skill
rollData.img = skill.img
if (rollData.target) {
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
return
}
this.startRoll(rollData)
}
}
/* -------------------------------------------- */
rollSkill(skillId) { rollSkill(skillId) {
let skill = this.items.get(skillId) let skill = this.items.get(skillId)
if (skill) { if (skill) {
@ -788,34 +797,58 @@ export class Hero6Actor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
rollWeapon(weaponId) { async rollWeapon(weaponId) {
let weapon = this.items.get(weaponId) let weapon = this.items.get(weaponId)
if (weapon) { if (weapon) {
weapon = duplicate(weapon) weapon = duplicate(weapon)
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase()) let rollData = this.getCommonRollData()
if (skill) { rollData.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0) + (Number(weapon.system.ocv) || 0)
skill = duplicate(skill) rollData.subMode = "ocv"
Hero6Utility.updateSkill(skill) rollData.mode = "weapon"
let abilityKey = skill.system.ability rollData.item = weapon
let rollData = this.getCommonRollData(abilityKey) rollData.img = weapon.img
rollData.mode = "weapon" this.startRoll(rollData)
rollData.skill = skill } else {
rollData.weapon = weapon ui.notifications.warn("Unable to find the weapon " + weapon.name)
rollData.img = weapon.img }
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged }
rollData.forceDisadvantage = this.isAttackDisadvantage() /* -------------------------------------------- */
} rollMentalManeuver(maneuverId) {
/*if (rollData.weapon.system.isranged && rollData.tokensDistance > Hero6Utility.getWeaponMaxRange(rollData.weapon) ) { let maneuver = this.items.get(maneuverId)
ui.notifications.warn(`Your target is out of range of your weapon (max: ${Hero6Utility.getWeaponMaxRange(rollData.weapon)} - current : ${rollData.tokensDistance})` ) if (maneuver) {
return maneuver = duplicate(maneuver)
}*/ let rollData = this.getCommonRollData()
this.startRoll(rollData) rollData.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(maneuver.system.omcv) || 0)
} else { rollData.mode = "mentalmaneuver"
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name) 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"
} else {
rollData.item.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(power.system.omcv) || 0)
rollData.subMode = "omcv"
}
this.startRoll(rollData)
} else {
ui.notifications.warn("Unable to find power " + power.name)
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async startRoll(rollData) { async startRoll(rollData) {
let rollDialog = await Hero6RollDialog.create(this, rollData) let rollDialog = await Hero6RollDialog.create(this, rollData)

View File

@ -54,6 +54,9 @@ export class Hero6Combat extends Combat {
/* -------------------------------------------- */ /* -------------------------------------------- */
constructor(data, context) { constructor(data, context) {
data.flags = { world: { turnData: { turnNumber: 0, segmentNumber: 12} } }
super(data, context); super(data, context);
this.turnNumber = 0; this.turnNumber = 0;
@ -280,12 +283,13 @@ export class Hero6Combat extends Combat {
/* -------------------------------------------- */ /* -------------------------------------------- */
async _onCreateEmbeddedDocuments(type, documents, result, options, userId) { async _onCreateDescendantDocuments(type, documents, result, options, userId) {
//console.log("Added...") //console.log("Added...")
await super._onCreateEmbeddedDocuments(type, documents, result, options, userId) if (game.user.isGM) {
await this.rebuildInitiative() await super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
await this.rebuildInitiative()
}
} }
/* -------------------------------------------- /* --------------------------------------------
_onUpdate(changed, options, userId) { _onUpdate(changed, options, userId) {
}*/ }*/

View File

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

View File

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

View File

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

View File

@ -43,6 +43,9 @@ export class Hero6Utility {
Handlebars.registerHelper('mul', function (a, b) { Handlebars.registerHelper('mul', function (a, b) {
return Number(a) * Number(b); return Number(a) * Number(b);
}) })
Handlebars.registerHelper('add', function (a, b) {
return (Number(a) || 0) + (Number(b) || 0);
})
Handlebars.registerHelper('locationLabel', function (key) { Handlebars.registerHelper('locationLabel', function (key) {
return __locationNames[key] return __locationNames[key]
}) })
@ -52,6 +55,9 @@ export class Hero6Utility {
} }
return false return false
}) })
Handlebars.registerHelper('fixNum', function (value) {
return Number(value) || 0
})
Handlebars.registerHelper('checkInit', function (value) { Handlebars.registerHelper('checkInit', function (value) {
let myValue = Number(value) || 0 let myValue = Number(value) || 0
return myValue > 0 return myValue > 0
@ -343,6 +349,7 @@ export class Hero6Utility {
// ability/save/size => 0 // ability/save/size => 0
let diceFormula = "3d6" let diceFormula = "3d6"
let target = 10 let target = 10
if (rollData.charac) { if (rollData.charac) {
target = rollData.charac.roll target = rollData.charac.roll
} }
@ -352,7 +359,7 @@ export class Hero6Utility {
target += rollData.bonusMalus target += rollData.bonusMalus
// Performs roll // Performs roll
console.log("Roll formula", diceFormula) //console.log("Roll formula", diceFormula)
let myRoll = rollData.roll let myRoll = rollData.roll
if (!myRoll) { // New rolls only of no rerolls if (!myRoll) { // New rolls only of no rerolls
myRoll = new Roll(diceFormula).roll({ async: false }) myRoll = new Roll(diceFormula).roll({ async: false })
@ -367,6 +374,7 @@ export class Hero6Utility {
if (rollData.result <= target) { if (rollData.result <= target) {
rollData.isSuccess = true rollData.isSuccess = true
} }
//console.log("Roll result", rollData)
if (myRoll.terms[0].total == 3) { // Always a success if (myRoll.terms[0].total == 3) { // Always a success
rollData.isSuccess = true rollData.isSuccess = true
} }

View File

@ -1 +1 @@
MANIFEST-000074 MANIFEST-000164

View File

@ -1,8 +1,8 @@
2023/08/22-22:40:59.336016 7f4f611fe6c0 Recovering log #72 2023/08/30-20:10:47.117841 7fa55e7fc6c0 Recovering log #162
2023/08/22-22:40:59.352816 7f4f611fe6c0 Delete type=3 #70 2023/08/30-20:10:47.323059 7fa55e7fc6c0 Delete type=3 #160
2023/08/22-22:40:59.352919 7f4f611fe6c0 Delete type=0 #72 2023/08/30-20:10:47.323156 7fa55e7fc6c0 Delete type=0 #162
2023/08/22-23:29:53.757052 7f4ccb7fe6c0 Level-0 table #77: started 2023/08/30-20:19:02.780276 7fa55d3ff6c0 Level-0 table #167: started
2023/08/22-23:29:53.757077 7f4ccb7fe6c0 Level-0 table #77: 0 bytes OK 2023/08/30-20:19:02.780299 7fa55d3ff6c0 Level-0 table #167: 0 bytes OK
2023/08/22-23:29:53.763742 7f4ccb7fe6c0 Delete type=0 #75 2023/08/30-20:19:02.786823 7fa55d3ff6c0 Delete type=0 #165
2023/08/22-23:29:53.772111 7f4ccb7fe6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.807165 7fa55d3ff6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
2023/08/22-23:29:53.772172 7f4ccb7fe6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.807232 7fa55d3ff6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/08/15-21:47:51.923693 7fa0ddffb6c0 Recovering log #68 2023/08/30-17:17:42.658402 7fa55e7fc6c0 Recovering log #158
2023/08/15-21:47:52.020246 7fa0ddffb6c0 Delete type=3 #66 2023/08/30-17:17:42.678153 7fa55e7fc6c0 Delete type=3 #156
2023/08/15-21:47:52.020324 7fa0ddffb6c0 Delete type=0 #68 2023/08/30-17:17:42.678218 7fa55e7fc6c0 Delete type=0 #158
2023/08/15-22:11:19.852100 7f9e3ffff6c0 Level-0 table #73: started 2023/08/30-17:20:34.680709 7fa55d3ff6c0 Level-0 table #163: started
2023/08/15-22:11:19.852160 7f9e3ffff6c0 Level-0 table #73: 0 bytes OK 2023/08/30-17:20:34.680731 7fa55d3ff6c0 Level-0 table #163: 0 bytes OK
2023/08/15-22:11:19.858657 7f9e3ffff6c0 Delete type=0 #71 2023/08/30-17:20:34.687119 7fa55d3ff6c0 Delete type=0 #161
2023/08/15-22:11:19.859003 7f9e3ffff6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.693978 7fa55d3ff6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
2023/08/15-22:11:19.859027 7f9e3ffff6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.706140 7fa55d3ff6c0 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.

BIN
packs/equipment/000099.ldb Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000074 MANIFEST-000166

View File

@ -1,7 +1,8 @@
2023/08/22-22:40:59.298385 7f4ccbfff6c0 Recovering log #72 2023/08/30-20:10:46.913567 7fa55effd6c0 Recovering log #164
2023/08/22-22:40:59.311659 7f4ccbfff6c0 Delete type=3 #70 2023/08/30-20:10:47.085816 7fa55effd6c0 Delete type=3 #162
2023/08/22-22:40:59.311717 7f4ccbfff6c0 Delete type=0 #72 2023/08/30-20:10:47.085887 7fa55effd6c0 Delete type=0 #164
2023/08/22-23:29:53.706564 7f4ccb7fe6c0 Level-0 table #77: started 2023/08/30-20:19:02.772964 7fa55d3ff6c0 Level-0 table #169: started
2023/08/22-23:29:53.706634 7f4ccb7fe6c0 Level-0 table #77: 0 bytes OK 2023/08/30-20:19:02.773053 7fa55d3ff6c0 Level-0 table #169: 0 bytes OK
2023/08/22-23:29:53.713891 7f4ccb7fe6c0 Delete type=0 #75 2023/08/30-20:19:02.779629 7fa55d3ff6c0 Delete type=0 #167
2023/08/22-23:29:53.724567 7f4ccb7fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.780116 7fa55d3ff6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
2023/08/30-20:19:02.780129 7fa55d3ff6c0 Manual compaction at level-1 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,8 @@
2023/08/15-21:47:51.802290 7fa0dd7fa6c0 Recovering log #68 2023/08/30-17:17:42.644053 7fa55f7fe6c0 Recovering log #160
2023/08/15-21:47:51.859664 7fa0dd7fa6c0 Delete type=3 #66 2023/08/30-17:17:42.654259 7fa55f7fe6c0 Delete type=3 #158
2023/08/15-21:47:51.859782 7fa0dd7fa6c0 Delete type=0 #68 2023/08/30-17:17:42.654538 7fa55f7fe6c0 Delete type=0 #160
2023/08/15-22:11:19.813491 7f9e3ffff6c0 Level-0 table #73: started 2023/08/30-17:20:34.652977 7fa55d3ff6c0 Level-0 table #165: started
2023/08/15-22:11:19.813538 7f9e3ffff6c0 Level-0 table #73: 0 bytes OK 2023/08/30-17:20:34.653019 7fa55d3ff6c0 Level-0 table #165: 0 bytes OK
2023/08/15-22:11:19.819750 7f9e3ffff6c0 Delete type=0 #71 2023/08/30-17:20:34.659536 7fa55d3ff6c0 Delete type=0 #163
2023/08/15-22:11:19.829889 7f9e3ffff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.659715 7fa55d3ff6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
2023/08/30-17:20:34.659733 7fa55d3ff6c0 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 +1 @@
MANIFEST-000066 MANIFEST-000158

View File

@ -1,8 +1,8 @@
2023/08/22-22:40:59.337815 7f4f619ff6c0 Recovering log #64 2023/08/30-20:10:47.287095 7fa55f7fe6c0 Recovering log #156
2023/08/22-22:40:59.356018 7f4f619ff6c0 Delete type=3 #62 2023/08/30-20:10:47.496255 7fa55f7fe6c0 Delete type=3 #154
2023/08/22-22:40:59.356080 7f4f619ff6c0 Delete type=0 #64 2023/08/30-20:10:47.496306 7fa55f7fe6c0 Delete type=0 #156
2023/08/22-23:29:53.764110 7f4ccb7fe6c0 Level-0 table #69: started 2023/08/30-20:19:02.786933 7fa55d3ff6c0 Level-0 table #161: started
2023/08/22-23:29:53.764186 7f4ccb7fe6c0 Level-0 table #69: 0 bytes OK 2023/08/30-20:19:02.786958 7fa55d3ff6c0 Level-0 table #161: 0 bytes OK
2023/08/22-23:29:53.771884 7f4ccb7fe6c0 Delete type=0 #67 2023/08/30-20:19:02.793209 7fa55d3ff6c0 Delete type=0 #159
2023/08/22-23:29:53.772181 7f4ccb7fe6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.807175 7fa55d3ff6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
2023/08/22-23:29:53.772223 7f4ccb7fe6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.807218 7fa55d3ff6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/08/15-21:47:51.927283 7fa0dcff96c0 Recovering log #60 2023/08/30-17:17:42.680473 7fa55effd6c0 Recovering log #152
2023/08/15-21:47:52.038744 7fa0dcff96c0 Delete type=3 #58 2023/08/30-17:17:42.696562 7fa55effd6c0 Delete type=3 #150
2023/08/15-21:47:52.038839 7fa0dcff96c0 Delete type=0 #60 2023/08/30-17:17:42.696621 7fa55effd6c0 Delete type=0 #152
2023/08/15-22:11:19.865715 7f9e3ffff6c0 Level-0 table #65: started 2023/08/30-17:20:34.706161 7fa55d3ff6c0 Level-0 table #157: started
2023/08/15-22:11:19.865740 7f9e3ffff6c0 Level-0 table #65: 0 bytes OK 2023/08/30-17:20:34.706183 7fa55d3ff6c0 Level-0 table #157: 0 bytes OK
2023/08/15-22:11:19.872425 7f9e3ffff6c0 Delete type=0 #63 2023/08/30-17:20:34.712608 7fa55d3ff6c0 Delete type=0 #155
2023/08/15-22:11:19.879299 7f9e3ffff6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.726643 7fa55d3ff6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
2023/08/15-22:11:19.879345 7f9e3ffff6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.726673 7fa55d3ff6c0 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

@ -1 +1 @@
MANIFEST-000074 MANIFEST-000164

View File

@ -1,8 +1,8 @@
2023/08/22-22:40:59.357323 7f4f619ff6c0 Recovering log #72 2023/08/30-20:10:47.325002 7fa55effd6c0 Recovering log #162
2023/08/22-22:40:59.374012 7f4f619ff6c0 Delete type=3 #70 2023/08/30-20:10:47.532075 7fa55effd6c0 Delete type=3 #160
2023/08/22-22:40:59.374211 7f4f619ff6c0 Delete type=0 #72 2023/08/30-20:10:47.532180 7fa55effd6c0 Delete type=0 #162
2023/08/22-23:29:53.772291 7f4ccb7fe6c0 Level-0 table #77: started 2023/08/30-20:19:02.800848 7fa55d3ff6c0 Level-0 table #167: started
2023/08/22-23:29:53.772322 7f4ccb7fe6c0 Level-0 table #77: 0 bytes OK 2023/08/30-20:19:02.800897 7fa55d3ff6c0 Level-0 table #167: 0 bytes OK
2023/08/22-23:29:53.780231 7f4ccb7fe6c0 Delete type=0 #75 2023/08/30-20:19:02.807064 7fa55d3ff6c0 Delete type=0 #165
2023/08/22-23:29:53.787239 7f4ccb7fe6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.807205 7fa55d3ff6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
2023/08/22-23:29:53.787283 7f4ccb7fe6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.807225 7fa55d3ff6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/08/15-21:47:52.040277 7fa0ddffb6c0 Recovering log #68 2023/08/30-17:17:42.680933 7fa55dffb6c0 Recovering log #158
2023/08/15-21:47:52.138553 7fa0ddffb6c0 Delete type=3 #66 2023/08/30-17:17:42.699576 7fa55dffb6c0 Delete type=3 #156
2023/08/15-21:47:52.138627 7fa0ddffb6c0 Delete type=0 #68 2023/08/30-17:17:42.699635 7fa55dffb6c0 Delete type=0 #158
2023/08/15-22:11:19.859141 7f9e3ffff6c0 Level-0 table #73: started 2023/08/30-17:20:34.719643 7fa55d3ff6c0 Level-0 table #163: started
2023/08/15-22:11:19.859174 7f9e3ffff6c0 Level-0 table #73: 0 bytes OK 2023/08/30-17:20:34.719703 7fa55d3ff6c0 Level-0 table #163: 0 bytes OK
2023/08/15-22:11:19.865615 7f9e3ffff6c0 Delete type=0 #71 2023/08/30-17:20:34.726540 7fa55d3ff6c0 Delete type=0 #161
2023/08/15-22:11:19.879276 7f9e3ffff6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.726665 7fa55d3ff6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
2023/08/15-22:11:19.879335 7f9e3ffff6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.726679 7fa55d3ff6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)

Binary file not shown.

BIN
packs/perks/MANIFEST-000164 Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000075 MANIFEST-000166

View File

@ -1,8 +1,8 @@
2023/08/22-22:40:59.317080 7f4f609fd6c0 Recovering log #73 2023/08/30-20:10:47.089737 7fa55dffb6c0 Recovering log #163
2023/08/22-22:40:59.334723 7f4f609fd6c0 Delete type=3 #71 2023/08/30-20:10:47.283952 7fa55dffb6c0 Delete type=3 #161
2023/08/22-22:40:59.334804 7f4f609fd6c0 Delete type=0 #73 2023/08/30-20:10:47.284018 7fa55dffb6c0 Delete type=0 #163
2023/08/22-23:29:53.750838 7f4ccb7fe6c0 Level-0 table #78: started 2023/08/30-20:19:02.793322 7fa55d3ff6c0 Level-0 table #169: started
2023/08/22-23:29:53.750864 7f4ccb7fe6c0 Level-0 table #78: 0 bytes OK 2023/08/30-20:19:02.793349 7fa55d3ff6c0 Level-0 table #169: 0 bytes OK
2023/08/22-23:29:53.756935 7f4ccb7fe6c0 Delete type=0 #76 2023/08/30-20:19:02.800604 7fa55d3ff6c0 Delete type=0 #167
2023/08/22-23:29:53.764078 7f4ccb7fe6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.807184 7fa55d3ff6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
2023/08/22-23:29:53.772157 7f4ccb7fe6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.807212 7fa55d3ff6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,15 @@
2023/08/15-21:47:51.861656 7fa0dcff96c0 Recovering log #69 2023/08/30-17:17:42.658365 7fa55effd6c0 Recovering log #159
2023/08/15-21:47:51.916356 7fa0dcff96c0 Delete type=3 #67 2023/08/30-17:17:42.675069 7fa55effd6c0 Delete type=3 #157
2023/08/15-21:47:51.916435 7fa0dcff96c0 Delete type=0 #69 2023/08/30-17:17:42.675219 7fa55effd6c0 Delete type=0 #159
2023/08/15-22:11:19.843844 7f9e3ffff6c0 Level-0 table #74: started 2023/08/30-17:20:34.670106 7fa55d3ff6c0 Level-0 table #164: started
2023/08/15-22:11:19.843905 7f9e3ffff6c0 Level-0 table #74: 0 bytes OK 2023/08/30-17:20:34.673725 7fa55d3ff6c0 Level-0 table #164: 18207 bytes OK
2023/08/15-22:11:19.851729 7f9e3ffff6c0 Delete type=0 #72 2023/08/30-17:20:34.680563 7fa55d3ff6c0 Delete type=0 #162
2023/08/15-22:11:19.858992 7f9e3ffff6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.693950 7fa55d3ff6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
2023/08/15-22:11:19.859036 7f9e3ffff6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.694048 7fa55d3ff6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at '!items!zpF2QY4tx7qdBomQ' @ 109 : 1
2023/08/30-17:20:34.694069 7fa55d3ff6c0 Compacting 1@1 + 1@2 files
2023/08/30-17:20:34.699691 7fa55d3ff6c0 Generated table #165@1: 51 keys, 68929 bytes
2023/08/30-17:20:34.699708 7fa55d3ff6c0 Compacted 1@1 + 1@2 files => 68929 bytes
2023/08/30-17:20:34.705867 7fa55d3ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2023/08/30-17:20:34.705956 7fa55d3ff6c0 Delete type=2 #62
2023/08/30-17:20:34.706078 7fa55d3ff6c0 Delete type=2 #164
2023/08/30-17:20:34.712776 7fa55d3ff6c0 Manual compaction at level-1 from '!items!zpF2QY4tx7qdBomQ' @ 109 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000074 MANIFEST-000166

View File

@ -1,8 +1,8 @@
2023/08/22-22:40:59.313961 7f4f611fe6c0 Recovering log #72 2023/08/30-20:10:46.913667 7fa55f7fe6c0 Recovering log #164
2023/08/22-22:40:59.331385 7f4f611fe6c0 Delete type=3 #70 2023/08/30-20:10:47.114760 7fa55f7fe6c0 Delete type=3 #162
2023/08/22-22:40:59.331554 7f4f611fe6c0 Delete type=0 #72 2023/08/30-20:10:47.114894 7fa55f7fe6c0 Delete type=0 #164
2023/08/22-23:29:53.743083 7f4ccb7fe6c0 Level-0 table #77: started 2023/08/30-20:19:02.757545 7fa55d3ff6c0 Level-0 table #169: started
2023/08/22-23:29:53.743120 7f4ccb7fe6c0 Level-0 table #77: 0 bytes OK 2023/08/30-20:19:02.757594 7fa55d3ff6c0 Level-0 table #169: 0 bytes OK
2023/08/22-23:29:53.750729 7f4ccb7fe6c0 Delete type=0 #75 2023/08/30-20:19:02.765676 7fa55d3ff6c0 Delete type=0 #167
2023/08/22-23:29:53.764011 7f4ccb7fe6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.780087 7fa55d3ff6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
2023/08/22-23:29:53.772125 7f4ccb7fe6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.780123 7fa55d3ff6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/08/15-21:47:51.861659 7fa0ddffb6c0 Recovering log #68 2023/08/30-17:17:42.644052 7fa55e7fc6c0 Recovering log #160
2023/08/15-21:47:51.916357 7fa0ddffb6c0 Delete type=3 #66 2023/08/30-17:17:42.654264 7fa55e7fc6c0 Delete type=3 #158
2023/08/15-21:47:51.916429 7fa0ddffb6c0 Delete type=0 #68 2023/08/30-17:17:42.654371 7fa55e7fc6c0 Delete type=0 #160
2023/08/15-22:11:19.830017 7f9e3ffff6c0 Level-0 table #73: started 2023/08/30-17:20:34.687213 7fa55d3ff6c0 Level-0 table #165: started
2023/08/15-22:11:19.830056 7f9e3ffff6c0 Level-0 table #73: 0 bytes OK 2023/08/30-17:20:34.687246 7fa55d3ff6c0 Level-0 table #165: 0 bytes OK
2023/08/15-22:11:19.836953 7f9e3ffff6c0 Delete type=0 #71 2023/08/30-17:20:34.693666 7fa55d3ff6c0 Delete type=0 #163
2023/08/15-22:11:19.858959 7f9e3ffff6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.694011 7fa55d3ff6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
2023/08/15-22:11:19.859011 7f9e3ffff6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.706151 7fa55d3ff6c0 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 +1 @@
MANIFEST-000074 MANIFEST-000164

View File

@ -1,8 +1,8 @@
2023/08/22-22:40:59.358596 7f4f611fe6c0 Recovering log #72 2023/08/30-20:10:47.498427 7fa55dffb6c0 Recovering log #162
2023/08/22-22:40:59.377178 7f4f611fe6c0 Delete type=3 #70 2023/08/30-20:10:47.619622 7fa55dffb6c0 Delete type=3 #160
2023/08/22-22:40:59.377250 7f4f611fe6c0 Delete type=0 #72 2023/08/30-20:10:47.619685 7fa55dffb6c0 Delete type=0 #162
2023/08/22-23:29:53.780352 7f4ccb7fe6c0 Level-0 table #77: started 2023/08/30-20:19:02.807339 7fa55d3ff6c0 Level-0 table #167: started
2023/08/22-23:29:53.780385 7f4ccb7fe6c0 Level-0 table #77: 0 bytes OK 2023/08/30-20:19:02.807359 7fa55d3ff6c0 Level-0 table #167: 0 bytes OK
2023/08/22-23:29:53.787130 7f4ccb7fe6c0 Delete type=0 #75 2023/08/30-20:19:02.814782 7fa55d3ff6c0 Delete type=0 #165
2023/08/22-23:29:53.787267 7f4ccb7fe6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.814992 7fa55d3ff6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
2023/08/22-23:29:53.787292 7f4ccb7fe6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end) 2023/08/30-20:19:02.815017 7fa55d3ff6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2023/08/15-21:47:52.052796 7fa0de7fc6c0 Recovering log #68 2023/08/30-17:17:42.701619 7fa55dffb6c0 Recovering log #158
2023/08/15-21:47:52.154403 7fa0de7fc6c0 Delete type=3 #66 2023/08/30-17:17:42.712665 7fa55dffb6c0 Delete type=3 #156
2023/08/15-21:47:52.154479 7fa0de7fc6c0 Delete type=0 #68 2023/08/30-17:17:42.712739 7fa55dffb6c0 Delete type=0 #158
2023/08/15-22:11:19.872538 7f9e3ffff6c0 Level-0 table #73: started 2023/08/30-17:20:34.712796 7fa55d3ff6c0 Level-0 table #163: started
2023/08/15-22:11:19.872564 7f9e3ffff6c0 Level-0 table #73: 0 bytes OK 2023/08/30-17:20:34.712855 7fa55d3ff6c0 Level-0 table #163: 0 bytes OK
2023/08/15-22:11:19.878867 7f9e3ffff6c0 Delete type=0 #71 2023/08/30-17:20:34.719473 7fa55d3ff6c0 Delete type=0 #161
2023/08/15-22:11:19.879310 7f9e3ffff6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.726655 7fa55d3ff6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
2023/08/15-22:11:19.879353 7f9e3ffff6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end) 2023/08/30-17:20:34.726714 7fa55d3ff6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000074 MANIFEST-000086

View File

@ -1,7 +1,7 @@
2023/08/22-22:40:59.298588 7f4f619ff6c0 Recovering log #72 2023/08/24-15:57:43.392826 7fab4affd6c0 Recovering log #84
2023/08/22-22:40:59.314798 7f4f619ff6c0 Delete type=3 #70 2023/08/24-15:57:43.403060 7fab4affd6c0 Delete type=3 #82
2023/08/22-22:40:59.314861 7f4f619ff6c0 Delete type=0 #72 2023/08/24-15:57:43.403157 7fab4affd6c0 Delete type=0 #84
2023/08/22-23:29:53.736237 7f4ccb7fe6c0 Level-0 table #77: started 2023/08/24-15:59:11.995583 7fab497fa6c0 Level-0 table #89: started
2023/08/22-23:29:53.736325 7f4ccb7fe6c0 Level-0 table #77: 0 bytes OK 2023/08/24-15:59:11.995614 7fab497fa6c0 Level-0 table #89: 0 bytes OK
2023/08/22-23:29:53.742930 7f4ccb7fe6c0 Delete type=0 #75 2023/08/24-15:59:12.004480 7fab497fa6c0 Delete type=0 #87
2023/08/22-23:29:53.757037 7f4ccb7fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 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 +1,7 @@
2023/08/15-21:47:51.802282 7fa0dcff96c0 Recovering log #68 2023/08/24-15:09:37.452353 7fab4b7fe6c0 Recovering log #80
2023/08/15-21:47:51.859665 7fa0dcff96c0 Delete type=3 #66 2023/08/24-15:09:37.462595 7fab4b7fe6c0 Delete type=3 #78
2023/08/15-21:47:51.859740 7fa0dcff96c0 Delete type=0 #68 2023/08/24-15:09:37.462673 7fab4b7fe6c0 Delete type=0 #80
2023/08/15-22:11:19.837182 7f9e3ffff6c0 Level-0 table #73: started 2023/08/24-15:56:20.976153 7fab497fa6c0 Level-0 table #85: started
2023/08/15-22:11:19.837243 7f9e3ffff6c0 Level-0 table #73: 0 bytes OK 2023/08/24-15:56:20.976179 7fab497fa6c0 Level-0 table #85: 0 bytes OK
2023/08/15-22:11:19.843628 7f9e3ffff6c0 Delete type=0 #71 2023/08/24-15:56:20.984268 7fab497fa6c0 Delete type=0 #83
2023/08/15-22:11:19.858980 7f9e3ffff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) 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.

Binary file not shown.

View File

@ -649,6 +649,11 @@ ul, li {
align-content: center; align-content: center;
} }
.content-center {
align-content: center;
text-align: center;
}
.attribut-value, .attribut-value,
.carac-value { .carac-value {
flex-grow: 0; flex-grow: 0;
@ -816,10 +821,13 @@ ul, li {
.roll-dialog-header { .roll-dialog-header {
height: 52px; height: 52px;
} }
.dialog-roll-title {
margin-left: 8px;
}
.actor-icon { .actor-icon {
float: left; float: left;
width: 48px; width: 48px;
max-width: 48px;
height: 48px; height: 48px;
padding: 2px 6px 2px 2px; padding: 2px 6px 2px 2px;
} }
@ -1147,8 +1155,8 @@ ul, li {
} }
#logo { #logo {
content : url(../images/ui/crucible_game_logo.png); content : url(../images/ui/logo_hex_yellow_01.webp);
width: 100px; width: 60px;
height: 60px; height: 60px;
} }
@ -1413,6 +1421,11 @@ Focus FOC: #ff0084
min-width:2rem; min-width:2rem;
/*max-width: 2rem;*/ /*max-width: 2rem;*/
} }
.item-controls-fixed-small {
min-width:1rem;
font-size: 0.8rem;
/*max-width: 2rem;*/
}
.biodata-portrait { .biodata-portrait {
min-height: 512px; min-height: 512px;
min-width: 256px; min-width: 256px;
@ -1430,4 +1443,7 @@ Focus FOC: #ff0084
.maneuver-is-stock { .maneuver-is-stock {
display: none; display: none;
visibility: hidden; visibility: hidden;
} }
.compendium .directory-list .directory-item .folder-header h3 {
color:#000
}

View File

@ -5,11 +5,11 @@
"flags": {} "flags": {}
} }
], ],
"description": "Hero System v6 for FoundryVTT (Official)", "description": "Hero System 6E for FoundryVTT (Official)",
"esmodules": [ "esmodules": [
"modules/hero6-main.js" "modules/hero6-main.js"
], ],
"gridDistance": 5, "gridDistance": 2,
"gridUnits": "m", "gridUnits": "m",
"languages": [ "languages": [
{ {
@ -30,15 +30,6 @@
"private": false, "private": false,
"flags": {} "flags": {}
}, },
{
"type": "Item",
"label": "Weapons",
"name": "weapons",
"path": "packs/weapons.db",
"system": "fvtt-hero-system-6",
"private": false,
"flags": {}
},
{ {
"type": "Item", "type": "Item",
"label": "Skills", "label": "Skills",
@ -100,15 +91,15 @@
"styles": [ "styles": [
"styles/simple.css" "styles/simple.css"
], ],
"version": "11.0.9", "version": "11.0.21",
"compatibility": { "compatibility": {
"minimum": "11", "minimum": "11",
"verified": "11" "verified": "11"
}, },
"title": "Hero System v6 for FoundrtVTT (Official)", "title": "Hero System 6E Basic (Official)",
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/main/system.json", "manifest": "https://www.uberwald.me/gitea/public/fvtt-hero-system-6/raw/branch/master/system.json",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/archive/fvtt-hero-system-6-v11.0.9.zip", "download": "https://www.uberwald.me/gitea/public/fvtt-hero-system-6/archive/fvtt-hero-system-6-v11.0.21.zip",
"url": "https://www.uberwald.me/gitea/uberwald/", "url": "https://www.uberwald.me/public/uberwald/",
"background": "systems/fvtt-hero-system-6/images/ui/hero_foundry_cover.webp", "background": "systems/fvtt-hero-system-6/images/ui/hero_foundry_cover.webp",
"id": "fvtt-hero-system-6" "id": "fvtt-hero-system-6"
} }

View File

@ -354,9 +354,12 @@
"levels": 0, "levels": 0,
"quantity": 1, "quantity": 1,
"range": "", "range": "",
"damageeffect": "normal",
"damage": "", "damage": "",
"stunx": 0,
"endurance": 0, "endurance": 0,
"hasroll": false, "hasroll": false,
"attackvalue": "ocv",
"roll": 0, "roll": 0,
"computebody": false, "computebody": false,
"haseffectroll": false, "haseffectroll": false,
@ -375,6 +378,8 @@
"pha": "", "pha": "",
"ocv": "", "ocv": "",
"dcv" : "", "dcv" : "",
"omcv": "",
"dmcv" : "",
"isstock": false, "isstock": false,
"active": false "active": false
}, },

View File

@ -149,36 +149,55 @@
</li> </li>
</ul> </ul>
{{#each maneuvers as |mlist key|}} {{#each maneuvers as |mlist mtype|}}
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
<li class="item flexrow list-item items-title-bg"> <li class="item flexrow list-item items-title-bg">
<span class="item-field-label-long-img"> <span class="item-field-label-long-img">
<label class="">{{upperFirst key}} Maneuver</label> <label class="">{{upperFirst mtype}} Maneuver</label>
</span> </span>
<span class="item-field-label-very-short"> <span class="item-field-label-very-short">
<label class="short-label">PHA</label> <label class="short-label">PHA</label>
</span> </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"> <span class="item-field-label-very-short">
<label class="short-label">OCV</label> <label class="short-label">OCV</label>
</span> </span>
<span class="item-field-label-very-short"> <span class="item-field-label-very-short">
<label class="short-label">DCV</label> <label class="short-label">DCV</label>
</span> </span>
{{/if}}
<span class="item-field-text-long"> <span class="item-field-text-long">
<label class="short-label">Effects</label> <label class="short-label">Effects</label>
</span> </span>
</li> </li>
{{#each mlist as |maneuver key|}} {{#each mlist as |maneuver key|}}
<li class="item flexrow list-item list-item-shadow " data-item-id="{{maneuver._id}}"> <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" <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{maneuver.img}}" /></a> src="{{maneuver.img}}" />
<a class="roll-item"><i class="fas fa-dice"></i></a><span class="item-field-label-long">{{maneuver.name}} </a>
</span> <span class="item-field-label-long">
<a class="roll-item"><i class="fas fa-dice"></i></a>
<span class="item-field-label-very-short">{{maneuver.system.pha}}</span> {{maneuver.name}}
<span class="item-field-label-very-short">{{maneuver.system.ocv}}</span> </span>
<span class="item-field-label-very-short">{{maneuver.system.dcv}}</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-text-long">{{maneuver.system.effects}} <span class="item-field-text-long">{{maneuver.system.effects}}
{{#if maneuver.system.haseffectroll}} {{#if maneuver.system.haseffectroll}}
<a class="roll-direct" data-roll-source="Maneuver {{maneuver.name}}" <a class="roll-direct" data-roll-source="Maneuver {{maneuver.name}}"
@ -556,26 +575,75 @@
</span> </span>
</li> </li>
{{#each allmaneuvers as |maneuver key|}} {{#each allmaneuvers as |maneuver key|}}
<div class="{{#if maneuver.system.isstock}}maneuver-list maneuver-is-stock{{/if}}"> {{#if (ne maneuver.system.maneuvertype "mental")}}
<li class="item stat flexrow list-item list-item-shadow " data-item-id="{{maneuver._id}}"> <div class="{{#if maneuver.system.isstock}}maneuver-list maneuver-is-stock{{/if}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <li class="item stat flexrow list-item list-item-shadow " data-item-id="{{maneuver._id}}">
src="{{maneuver.img}}" /></a> <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
<span class="item-field-label-long">{{maneuver.name}}</span> 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">{{maneuver.system.pha}}</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.ocv}}</span>
<span class="item-field-label-short">{{maneuver.system.dcv}}</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-long3">{{maneuver.system.effects}}</span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
</div> </div>
{{/if}}
{{/each}} {{/each}}
</ul> </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> </div>
{{!-- Powers Tab --}} {{!-- Powers Tab --}}
@ -610,7 +678,16 @@
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{power.img}}" /></a> src="{{power.img}}" /></a>
<span class="item-field-label-short">{{power.system.cost}}</span> <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> <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-long2">{{power.system.displayname}}</span>
<span class="item-field-label-medium"><a class="roll-damage" data-type="power"><i <span class="item-field-label-medium"><a class="roll-damage" data-type="power"><i
class="fas fa-dice"></i>{{power.system.damage}}</a></span> class="fas fa-dice"></i>{{power.system.damage}}</a></span>

View File

@ -1,9 +1,11 @@
<form class="skill-roll-dialog"> <form class="skill-roll-dialog">
<header class="roll-dialog-header"> <header class="roll-dialog-header">
{{#if img}} <div class="flexrow">
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" /> {{#if img}}
{{/if}} <img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
<h1 class="dialog-roll-title roll-dialog-header">{{title}}</h1> {{/if}}
<h2 class="dialog-roll-title roll-dialog-header">{{title}}</h2>
</div>
</header> </header>
<div class="flexcol"> <div class="flexcol">
@ -15,6 +17,28 @@
</div> </div>
{{/if}} {{/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}} {{#if item}}
<div class="flexrow"> <div class="flexrow">
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} - {{upperFirst item.name}}</span> <span class="item-field-label-long margin-item-list">{{upperFirst item.type}} - {{upperFirst item.name}}</span>

View File

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

View File

@ -7,22 +7,35 @@
<hr> <hr>
{{#if img}}
<div >
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
</div>
{{/if}}
<div class="flexcol"> <div class="flexcol">
</div> </div>
<div> <div>
<ul> <ul>
<li>Name : {{title}}</li> <li>Name : {{title}}</li>
<li>Damage Effect: {{upperFirst item.system.damageeffect}}</li>
<li>Damage formula : {{diceFormula}}</li> <li>Damage formula : {{diceFormula}}</li>
<li><strong>TOTAL : {{result}}</strong></li> <li><strong>Total formula : {{result}}</strong></li>
{{#if (eq item.system.damageeffect "normal")}}
<li><strong>BODY : {{bodyValue}}</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> </ul>
</div> </div>

View File

@ -7,12 +7,6 @@
<hr> <hr>
{{#if img}}
<div >
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
</div>
{{/if}}
<div class="flexcol"> <div class="flexcol">
</div> </div>
@ -23,6 +17,21 @@
</li> </li>
{{/if}} {{/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}} {{#if rollSource}}
<li>Roll : {{rollSource}}</li> <li>Roll : {{rollSource}}</li>
{{/if}} {{/if}}
@ -48,7 +57,7 @@
<li><strong>TOTAL : {{result}}</strong> <li><strong>TOTAL : {{result}}</strong>
{{#if (exists margin)}} {{#if (exists margin)}}
({{#if isSuccess}}Success!!{{else}}Failure!{{/if}}) (<strong>{{#if isSuccess}}Success!!{{else}}Failure!{{/if}}</strong>)
{{/if}} {{/if}}
</li> </li>
@ -57,7 +66,15 @@
{{/if}} {{/if}}
{{#if (exists margin)}} {{#if (exists margin)}}
<li><strong>Margin : {{margin}}</strong> {{#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}}
{{/if}} {{/if}}
</ul> </ul>

View File

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

View File

@ -37,14 +37,21 @@
<input type="text" class="item-field-label-medium" name="system.pha" value="{{system.pha}}" data-dtype="String"/> <input type="text" class="item-field-label-medium" name="system.pha" value="{{system.pha}}" data-dtype="String"/>
</li> </li>
{{#if (eq system.maneuvertype "mental")}}
<li class="flexrow"><label class="item-field-label-medium">OMCV</label>
<input type="text" class="item-field-label-medium" name="system.omcv" value="{{system.omcv}}" data-dtype="String"/>
</li>
<li class="flexrow"><label class="item-field-label-medium">DMCV</label>
<input type="text" class="item-field-label-medium" name="system.dmcv" value="{{system.dmcv}}" data-dtype="String"/>
</li>
{{else}}
<li class="flexrow"><label class="item-field-label-medium">OCV</label> <li class="flexrow"><label class="item-field-label-medium">OCV</label>
<input type="text" class="item-field-label-medium" name="system.ocv" value="{{system.ocv}}" data-dtype="String"/> <input type="text" class="item-field-label-medium" name="system.ocv" value="{{system.ocv}}" data-dtype="String"/>
</li> </li>
<li class="flexrow"><label class="item-field-label-medium">DCV</label> <li class="flexrow"><label class="item-field-label-medium">DCV</label>
<input type="text" class="item-field-label-medium" name="system.dcv" value="{{system.dcv}}" data-dtype="String"/> <input type="text" class="item-field-label-medium" name="system.dcv" value="{{system.dcv}}" data-dtype="String"/>
</li> </li>
{{/if}}
<li class="flexrow"><label class="item-field-label-medium">Effects</label> <li class="flexrow"><label class="item-field-label-medium">Effects</label>
<input type="text" class="item-field-label-long" name="system.effects" value="{{system.effects}}" data-dtype="String"/> <input type="text" class="item-field-label-long" name="system.effects" value="{{system.effects}}" data-dtype="String"/>
</li> </li>

View File

@ -52,22 +52,21 @@
data-dtype="Number"/> data-dtype="Number"/>
</li> </li>
<li class="flexrow"><label class="item-field-label-long">Familiarity only</label> <li class="flexrow"><label class="item-field-label-long">Proficency</label>
<input type="checkbox" class="item-field-label-medium item-skill-familiarity" name="system.skillfamiliarity" {{checked system.skillfamiliarity}} <input type="checkbox" class="item-field-label-medium item-skill-profiency" name="system.skillprofiency" {{checked system.skillprofiency}}
{{#if (or system.skillprofiency system.skilllevelonly)}}disabled{{/if}}
data-dtype="Number"/> data-dtype="Number"/>
</li> </li>
{{#if system.skillfamiliarity}}
{{#if (not system.skillprofiency)}}
<li class="flexrow"><label class="item-field-label-long">Familiarity only</label>
<input type="checkbox" class="item-field-label-medium item-skill-familiarity" name="system.skillfamiliarity" {{checked system.skillfamiliarity}}
data-dtype="Number"/>
</li>
<li class="flexrow"><label class="item-field-label-long">Everyman skill</label> <li class="flexrow"><label class="item-field-label-long">Everyman skill</label>
<input type="checkbox" class="item-field-label-medium item-skill-everyman" name="system.skilleveryman" {{checked system.skilleveryman}} data-dtype="Number"/> <input type="checkbox" class="item-field-label-medium item-skill-everyman" name="system.skilleveryman" {{checked system.skilleveryman}} data-dtype="Number"/>
</li> </li>
{{/if}} {{/if}}
<li class="flexrow"><label class="item-field-label-long">Proficency</label>
<input type="checkbox" class="item-field-label-medium item-skill-profiency" name="system.skillprofiency" {{checked system.skillprofiency}}
{{#if (or system.skillfamiliarity system.skilllevelonly)}}disabled{{/if}}
data-dtype="Number"/>
</li>
{{#if (ne system.skilltype "combat")}} {{#if (ne system.skilltype "combat")}}
<li class="flexrow"><label class="item-field-label-long">Levels Cost</label> <li class="flexrow"><label class="item-field-label-long">Levels Cost</label>

View File

@ -3,13 +3,31 @@
<span class="item-name-img"> <span class="item-name-img">
<label class="">&nbsp;</label> <label class="">&nbsp;</label>
</span> </span>
<span class="item-field-label-short"> <span class="item-field-label-very-short">
<label class="item-field-label-short">Qty</label> <label class="item-field-label-very-short">Qty</label>
</span> </span>
<span class="item-field-label-long2"> <span class="item-field-label-long2">
<label class="item-field-label-long2">{{title}}</label> <label class="item-field-label-long2">{{title}}</label>
</span> </span>
{{#if (or (eq title "Money") (eq title "Equipment"))}}
<span class="item-field-label-very-short">
<label class="item-field-label-very-short">&nbsp;</label>
</span>
<span class="item-field-label-very-short">
<label class="item-field-label-very-short">&nbsp;</label>
</span>
<span class="item-field-label-very-short">
<label class="item-field-label-very-short">&nbsp;</label>
</span>
<span class="item-field-label-very-short">
<label class="item-field-label-very-short">&nbsp;</label>
</span>
<span class="item-field-label-very-short">
<label class="item-field-label-very-short">&nbsp;</label>
</span>
{{/if}}
{{#if (eq title "Weapons")}} {{#if (eq title "Weapons")}}
<span class="item-field-label-very-short"> <span class="item-field-label-very-short">
<label class="item-field-label-very-short">OCV</label> <label class="item-field-label-very-short">OCV</label>
@ -20,6 +38,12 @@
<span class="item-field-label-very-short"> <span class="item-field-label-very-short">
<label class="item-field-label-very-short">rMod</label> <label class="item-field-label-very-short">rMod</label>
</span> </span>
<span class="item-field-label-very-short">
<label class="item-field-label-very-short">Rng</label>
</span>
<span class="item-field-label-very-short">
<label class="item-field-label-very-short">&nbsp;</label>
</span>
{{/if}} {{/if}}
{{#if (eq title "Shields")}} {{#if (eq title "Shields")}}
@ -35,6 +59,9 @@
<span class="item-field-label-very-short"> <span class="item-field-label-very-short">
<label class="item-field-label-very-short">DMCV</label> <label class="item-field-label-very-short">DMCV</label>
</span> </span>
<span class="item-field-label-very-short">
<label class="item-field-label-very-short">&nbsp;</label>
</span>
{{/if}} {{/if}}
{{#if (eq title "Armor")}} {{#if (eq title "Armor")}}
@ -63,6 +90,10 @@
<span class="item-field-label-short"> <span class="item-field-label-short">
<label class="item-field-label-short">Effect</label> <label class="item-field-label-short">Effect</label>
</span> </span>
{{else}}
<span class="item-field-label-short">
<label class="item-field-label-short">&nbsp;</label>
</span>
{{/if}} {{/if}}
<span class="item-field-label-short"> <span class="item-field-label-short">
@ -71,16 +102,15 @@
<span class="item-field-label-very-short"> <span class="item-field-label-very-short">
<label class="item-field-label-very-short">END</label> <label class="item-field-label-very-short">END</label>
</span> </span>
<span class="item-field-label-short"> <span class="item-field-label-very-short">
<label class="item-field-label-short">Value</label> <label class="item-field-label-very-short">Value</label>
</span> </span>
<span class="item-field-label-short"> <span class="item-field-label-short">
<label class="item-field-label-short">Weight</label> <label class="item-field-label-short">Weight</label>
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-controls item-controls-fixed-small">
<div class="item-controls item-controls-fixed"> <a class="item-control item-add" data-type="equipment" title="Create Item"><i class="fas fa-plus item-controls-fixed-small"></i></a>
<a class="item-control item-add" data-type="equipment" title="Create Item"><i class="fas fa-plus"></i></a>
</div> </div>
</li> </li>

View File

@ -1,29 +1,46 @@
<li class="item flexrow list-item list-item-shadow" data-item-id="{{equip._id}}"> <li class="item flexrow list-item list-item-shadow" data-item-id="{{equip._id}}">
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" src="{{equip.img}}" /></a> <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" src="{{equip.img}}" /></a>
<span class="item-field-label-short"><label>{{equip.system.quantity}}</label> </span> <span class="item-field-label-very-short content-center" ><label class="content-center">{{equip.system.quantity}}</label> </span>
<span class="item-field-label-long2">{{equip.name}}</span> <span class="item-field-label-long2">
{{#if (eq equip.system.subtype "weapon")}}
<a class="roll-weapon"><i class="fas fa-dice"></i>{{equip.name}}</a>
{{else}}
{{equip.name}}
{{/if}}
</span>
{{#if (or (eq equip.system.subtype "money") (eq equip.system.subtype "equipment"))}}
<span class="item-field-label-very-short"><label>&nbsp;</label> </span>
<span class="item-field-label-very-short"><label>&nbsp;</label> </span>
<span class="item-field-label-very-short"><label>&nbsp;</label> </span>
<span class="item-field-label-very-short"><label>&nbsp;</label> </span>
<span class="item-field-label-very-short"><label>&nbsp;</label> </span>
{{/if}}
{{#if (eq equip.system.subtype "weapon")}} {{#if (eq equip.system.subtype "weapon")}}
<span class="item-field-label-very-short"><label>{{equip.system.ocv}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{numberFormat (fixNum equip.system.ocv) decimals=0 sign=true}}</label> </span>
<span class="item-field-label-very-short"><label>{{equip.system.omcv}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{numberFormat (fixNum equip.system.omcv) decimals=0 sign=true}}</label> </span>
<span class="item-field-label-very-short"><label>{{equip.system.rmod}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{numberFormat (fixNum equip.system.rmod) decimals=0 sign=true}}</label> </span>
<span class="item-field-label-very-short content-center"><label>{{equip.system.range}}</label> </span>
<span class="item-field-label-very-short content-center"><label>&nbsp;</label> </span>
{{/if}} {{/if}}
{{#if (eq equip.system.subtype "shield")}} {{#if (eq equip.system.subtype "shield")}}
<span class="item-field-label-very-short"><label>{{equip.system.ocv}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{numberFormat (fixNum equip.system.ocv) decimals=0 sign=true}}</label> </span>
<span class="item-field-label-very-short"><label>{{equip.system.omcv}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{numberFormat (fixNum equip.system.dcv) decimals=0 sign=true}}</label> </span>
<span class="item-field-label-very-short"><label>{{equip.system.dcv}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{numberFormat (fixNum equip.system.omcv) decimals=0 sign=true}}</label> </span>
<span class="item-field-label-very-short"><label>{{equip.system.dmcv}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{numberFormat (fixNum equip.system.dmcv) decimals=0 sign=true}}</label> </span>
<span class="item-field-label-very-short content-center"><label>&nbsp;</label> </span>
{{/if}} {{/if}}
{{#if (eq equip.system.subtype "armor")}} {{#if (eq equip.system.subtype "armor")}}
<span class="item-field-label-very-short"><label>{{equip.system.pd}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{equip.system.pd}}</label> </span>
<span class="item-field-label-very-short"><label>{{equip.system.ed}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{equip.system.ed}}</label> </span>
<span class="item-field-label-very-short"><label>{{equip.system.rpd}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{equip.system.rpd}}</label> </span>
<span class="item-field-label-very-short"><label>{{equip.system.red}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{equip.system.red}}</label> </span>
<span class="item-field-label-very-short"><label>{{equip.system.dcv}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{numberFormat (fixNum equip.system.dcv) decimals=0 sign=true}}</label> </span>
{{/if}} {{/if}}
<span class="item-field-label-long2"><label>{{equip.system.displayname}} <span class="item-field-label-long2"><label>{{equip.system.displayname}}
@ -34,6 +51,8 @@
<span class="item-field-label-short"><label><a class="roll-damage" data-type="perk"><i class="fas fa-dice"></i>{{equip.system.damage}}</a> <span class="item-field-label-short"><label><a class="roll-damage" data-type="perk"><i class="fas fa-dice"></i>{{equip.system.damage}}</a>
</label> </label>
</span> </span>
{{else}}
<span class="item-field-label-short"><label>&nbsp;</label></span>
{{/if}} {{/if}}
{{#if equip.system.hasroll}} {{#if equip.system.hasroll}}
@ -42,13 +61,12 @@
<span class="item-field-label-short">&nbsp;</span> <span class="item-field-label-short">&nbsp;</span>
{{/if}} {{/if}}
<span class="item-field-label-very-short"><label>{{equip.system.endurance}}</label> </span> <span class="item-field-label-very-short content-center"><label>{{equip.system.endurance}}</label> </span>
<span class="item-field-label-short"><label>{{mul equip.system.quantity equip.system.value}}</label> </span> <span class="item-field-label-very-short"><label>{{mul equip.system.quantity equip.system.value}}</label> </span>
<span class="item-field-label-short"><label>{{mul equip.system.quantity equip.system.weight}}</label> </span> <span class="item-field-label-short content-center"><label>{{mul equip.system.quantity equip.system.weight}}</label> </span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a> <a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>

View File

@ -18,6 +18,18 @@
</select> </select>
</li> </li>
{{#if (eq (lower system.typemodifier) "attack")}}
<li class="flexrow"><label class="item-field-label-long">Attack Roll Uses OCV or OMCV</label>
<select class="item-field-label-long" type="text" name="system.attackvalue" value="{{system.attackvalue}}" data-dtype="String">
{{#select system.attackvalue}}
{{#each config.attackTypes as |name key|}}
<option value="{{key}}">{{name}}</option>
{{/each}}
{{/select}}
</select>
</li>
{{/if}}
<li class="flexrow"><label class="item-field-label-long">Is sense affecting ?</label> <li class="flexrow"><label class="item-field-label-long">Is sense affecting ?</label>
<label class="item-field-label-medium"><input type="checkbox" name="system.senseaffecting" {{checked system.senseaffecting}}/></label> <label class="item-field-label-medium"><input type="checkbox" name="system.senseaffecting" {{checked system.senseaffecting}}/></label>
</li> </li>
@ -26,9 +38,27 @@
<li class="flexrow"><label class="item-field-label-long">Range</label> <li class="flexrow"><label class="item-field-label-long">Range</label>
<input type="text" class="item-field-label-medium" name="system.range" value="{{system.range}}" data-dtype="String"/> <input type="text" class="item-field-label-medium" name="system.range" value="{{system.range}}" data-dtype="String"/>
</li> </li>
<li class="flexrow"><label class="item-field-label-long">Damage Effect</label>
<select class="item-field-label-long" type="text" name="system.damageeffect" value="{{system.damageeffect}}" data-dtype="String">
{{#select (lower system.damageeffect)}}
{{#each config.damageEffect as |name key|}}
<option value="{{key}}">{{name}}</option>
{{/each}}
{{/select}}
</select>
</li>
<li class="flexrow"><label class="item-field-label-long">Damage</label> <li class="flexrow"><label class="item-field-label-long">Damage</label>
<input type="text" class="item-field-label-medium" name="system.damage" value="{{system.damage}}" data-dtype="String"/> <input type="text" class="item-field-label-medium" name="system.damage" value="{{system.damage}}" data-dtype="String"/>
</li> </li>
{{#if (eq system.damageeffect "killing")}}
<li class="flexrow"><label class="item-field-label-long">STUNx</label>
<input type="text" class="item-field-label-medium" name="system.stunx" value="{{system.stunx}}" data-dtype="Number"/>
</li>
{{/if}}
{{/if}} {{/if}}
<li class="flexrow"><label class="item-field-label-long">Endurance</label> <li class="flexrow"><label class="item-field-label-long">Endurance</label>