Compare commits

...

31 Commits

Author SHA1 Message Date
a5c6ae8fcb Fix #35 2023-10-04 21:49:07 +02:00
5e42cfbab1 Fix sheet and weapons roll 2023-09-01 20:46:36 +02:00
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
88 changed files with 571 additions and 241 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.
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://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.

47
changelog.md Normal file
View File

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

View File

@ -162,13 +162,19 @@ 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")
@ -184,16 +190,6 @@ export class Hero6ActorSheet extends ActorSheet {
let itemId = li.data("item-id")
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) => {
this.actor.holdAction()

View File

@ -216,7 +216,6 @@ export class Hero6Actor extends Actor {
skill.roll = charac.roll
}
}
console.log("SILL", skill)
if (skill.system.levels > 0) {
skill.roll += skill.system.levels
}
@ -224,13 +223,25 @@ export class Hero6Actor extends Actor {
/* -------------------------------------------- */
prepareManeuver(maneuver) {
maneuver.roll = 11 + this.system.characteristics.ocv.value
if (Number(maneuver.system.ocv)) {
maneuver.roll += Number(maneuver.system.ocv)
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.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 = {
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")
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.offensive)
Hero6Utility.sortArrayObjectsByName(maneuvers.defensive)
Hero6Utility.sortArrayObjectsByName(maneuvers.mental)
return maneuvers
}
getAllManeuvers() {
@ -628,6 +641,9 @@ 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)
@ -646,12 +662,10 @@ 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)
@ -662,6 +676,7 @@ 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) {
@ -675,6 +690,7 @@ 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
@ -686,12 +702,13 @@ 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") {
this.prepareManeuver(rollData.item)
rollData.subMode = this.prepareManeuver(rollData.item)
}
this.startRoll(rollData)
}
@ -704,18 +721,32 @@ 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)
@ -743,28 +774,6 @@ export class Hero6Actor extends Actor {
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) {
let skill = this.items.get(skillId)
if (skill) {
@ -788,34 +797,58 @@ export class Hero6Actor extends Actor {
}
/* -------------------------------------------- */
rollWeapon(weaponId) {
async rollWeapon(weaponId) {
let weapon = this.items.get(weaponId)
if (weapon) {
weapon = duplicate(weapon)
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 {
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
}
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"
} 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) {
let rollDialog = await Hero6RollDialog.create(this, rollData)

View File

@ -54,6 +54,9 @@ export class Hero6Combat extends Combat {
/* -------------------------------------------- */
constructor(data, context) {
data.flags = { world: { turnData: { turnNumber: 0, segmentNumber: 12} } }
super(data, context);
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...")
await super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
await this.rebuildInitiative()
if (game.user.isGM) {
await super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
await this.rebuildInitiative()
}
}
/* --------------------------------------------
_onUpdate(changed, options, userId) {
}*/

View File

@ -10,7 +10,8 @@ export const Hero6_CONFIG = {
maneuverTypes: {
"general": "General",
"offensive": "Offensive",
"defensive": "Defensive"
"defensive": "Defensive",
"mental": "Mental"
},
rollCharac : {
"str": "Strength",
@ -21,6 +22,13 @@ 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",
@ -29,6 +37,10 @@ export const Hero6_CONFIG = {
"combat": "Combat" ,
"custom": "Custom"
},
attackTypes: {
"ocv": "OCV",
"omcv": "OMCV"
},
powerEquipmentType: {
"adjustment": "Adjustment",
"mental": "Mental",

View File

@ -147,13 +147,13 @@ export class Hero6ItemSheet extends ItemSheet {
});
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 => {
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 => {
this.object.update( {'system.levels': 8, 'system.cost': 0} )
this.object.update( {'system.cost': 0} )
} )
html.find('.view-subitem').click(ev => {

View File

@ -5,7 +5,7 @@ export class Hero6RollDialog extends Dialog {
/* -------------------------------------------- */
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);
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: (rollData.mode == "skill") ? "Skill" : "Attribute",
title: "Roll window",
content: html,
buttons: {
roll: {

View File

@ -43,6 +43,9 @@ 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]
})
@ -346,6 +349,7 @@ export class Hero6Utility {
// ability/save/size => 0
let diceFormula = "3d6"
let target = 10
if (rollData.charac) {
target = rollData.charac.roll
}
@ -355,7 +359,7 @@ 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 })
@ -370,6 +374,7 @@ 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
}

View File

@ -1 +1 @@
MANIFEST-000098
MANIFEST-000188

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.588130 7fda7bbff6c0 Recovering log #96
2023/08/24-20:28:52.597974 7fda7bbff6c0 Delete type=3 #94
2023/08/24-20:28:52.598068 7fda7bbff6c0 Delete type=0 #96
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 +1,8 @@
2023/08/24-20:11:49.190057 7fda7abfd6c0 Recovering log #92
2023/08/24-20:11:49.204015 7fda7abfd6c0 Delete type=3 #90
2023/08/24-20:11:49.204065 7fda7abfd6c0 Delete type=0 #92
2023/08/24-20:28:26.993087 7fda79bfb6c0 Level-0 table #97: started
2023/08/24-20:28:26.993130 7fda79bfb6c0 Level-0 table #97: 0 bytes OK
2023/08/24-20:28:27.002024 7fda79bfb6c0 Delete type=0 #95
2023/08/24-20:28:27.002188 7fda79bfb6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
2023/08/24-20:28:27.002221 7fda79bfb6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
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 +1 @@
MANIFEST-000100
MANIFEST-000190

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.572724 7fda7a3fc6c0 Recovering log #97
2023/08/24-20:28:52.584112 7fda7a3fc6c0 Delete type=3 #95
2023/08/24-20:28:52.584178 7fda7a3fc6c0 Delete type=0 #97
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,15 +1,8 @@
2023/08/24-20:11:49.176021 7fda7b3fe6c0 Recovering log #92
2023/08/24-20:11:49.186442 7fda7b3fe6c0 Delete type=3 #90
2023/08/24-20:11:49.186511 7fda7b3fe6c0 Delete type=0 #92
2023/08/24-20:28:26.929251 7fda79bfb6c0 Level-0 table #98: started
2023/08/24-20:28:26.933483 7fda79bfb6c0 Level-0 table #98: 61208 bytes OK
2023/08/24-20:28:26.940562 7fda79bfb6c0 Delete type=0 #96
2023/08/24-20:28:26.961338 7fda79bfb6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
2023/08/24-20:28:26.961409 7fda79bfb6c0 Manual compaction at level-1 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at '!items!zFQRJSrYV4E12NgW' @ 355 : 1
2023/08/24-20:28:26.961416 7fda79bfb6c0 Compacting 1@1 + 1@2 files
2023/08/24-20:28:26.966548 7fda79bfb6c0 Generated table #99@1: 125 keys, 61208 bytes
2023/08/24-20:28:26.966578 7fda79bfb6c0 Compacted 1@1 + 1@2 files => 61208 bytes
2023/08/24-20:28:26.974691 7fda79bfb6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2023/08/24-20:28:26.974830 7fda79bfb6c0 Delete type=2 #94
2023/08/24-20:28:26.975013 7fda79bfb6c0 Delete type=2 #98
2023/08/24-20:28:27.002145 7fda79bfb6c0 Manual compaction at level-1 from '!items!zFQRJSrYV4E12NgW' @ 355 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
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)

View File

@ -1 +1 @@
MANIFEST-000090
MANIFEST-000182

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.601708 7fda7a3fc6c0 Recovering log #88
2023/08/24-20:28:52.613896 7fda7a3fc6c0 Delete type=3 #86
2023/08/24-20:28:52.614012 7fda7a3fc6c0 Delete type=0 #88
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 +1,8 @@
2023/08/24-20:11:49.203061 7fda7bbff6c0 Recovering log #84
2023/08/24-20:11:49.219726 7fda7bbff6c0 Delete type=3 #82
2023/08/24-20:11:49.219820 7fda7bbff6c0 Delete type=0 #84
2023/08/24-20:28:27.002307 7fda79bfb6c0 Level-0 table #89: started
2023/08/24-20:28:27.002338 7fda79bfb6c0 Level-0 table #89: 0 bytes OK
2023/08/24-20:28:27.008560 7fda79bfb6c0 Delete type=0 #87
2023/08/24-20:28:27.051981 7fda79bfb6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
2023/08/24-20:28:27.052022 7fda79bfb6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
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

@ -1 +1 @@
MANIFEST-000098
MANIFEST-000188

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.601706 7fda7abfd6c0 Recovering log #96
2023/08/24-20:28:52.613896 7fda7abfd6c0 Delete type=3 #94
2023/08/24-20:28:52.613994 7fda7abfd6c0 Delete type=0 #96
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 +1,8 @@
2023/08/24-20:11:49.205472 7fda7b3fe6c0 Recovering log #92
2023/08/24-20:11:49.222633 7fda7b3fe6c0 Delete type=3 #90
2023/08/24-20:11:49.222697 7fda7b3fe6c0 Delete type=0 #92
2023/08/24-20:28:27.019936 7fda79bfb6c0 Level-0 table #97: started
2023/08/24-20:28:27.019979 7fda79bfb6c0 Level-0 table #97: 0 bytes OK
2023/08/24-20:28:27.051866 7fda79bfb6c0 Delete type=0 #95
2023/08/24-20:28:27.052012 7fda79bfb6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
2023/08/24-20:28:27.052040 7fda79bfb6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
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.

BIN
packs/perks/MANIFEST-000188 Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000099
MANIFEST-000190

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.588130 7fda7abfd6c0 Recovering log #97
2023/08/24-20:28:52.597915 7fda7abfd6c0 Delete type=3 #95
2023/08/24-20:28:52.597970 7fda7abfd6c0 Delete type=0 #97
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 +1,8 @@
2023/08/24-20:11:49.190059 7fda7a3fc6c0 Recovering log #93
2023/08/24-20:11:49.201012 7fda7a3fc6c0 Delete type=3 #91
2023/08/24-20:11:49.201080 7fda7a3fc6c0 Delete type=0 #93
2023/08/24-20:28:26.985277 7fda79bfb6c0 Level-0 table #98: started
2023/08/24-20:28:26.985305 7fda79bfb6c0 Level-0 table #98: 0 bytes OK
2023/08/24-20:28:26.992913 7fda79bfb6c0 Delete type=0 #96
2023/08/24-20:28:27.002175 7fda79bfb6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
2023/08/24-20:28:27.002210 7fda79bfb6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
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 +1 @@
MANIFEST-000098
MANIFEST-000190

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.572723 7fda7b3fe6c0 Recovering log #96
2023/08/24-20:28:52.584114 7fda7b3fe6c0 Delete type=3 #94
2023/08/24-20:28:52.584178 7fda7b3fe6c0 Delete type=0 #96
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 +1,8 @@
2023/08/24-20:11:49.176021 7fda7bbff6c0 Recovering log #92
2023/08/24-20:11:49.186443 7fda7bbff6c0 Delete type=3 #90
2023/08/24-20:11:49.186509 7fda7bbff6c0 Delete type=0 #92
2023/08/24-20:28:26.975180 7fda79bfb6c0 Level-0 table #97: started
2023/08/24-20:28:26.975225 7fda79bfb6c0 Level-0 table #97: 0 bytes OK
2023/08/24-20:28:26.985137 7fda79bfb6c0 Delete type=0 #95
2023/08/24-20:28:27.002160 7fda79bfb6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
2023/08/24-20:28:27.002199 7fda79bfb6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
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 +1 @@
MANIFEST-000098
MANIFEST-000188

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.617237 7fda7abfd6c0 Recovering log #96
2023/08/24-20:28:52.627761 7fda7abfd6c0 Delete type=3 #94
2023/08/24-20:28:52.627835 7fda7abfd6c0 Delete type=0 #96
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 +1,8 @@
2023/08/24-20:11:49.221624 7fda7a3fc6c0 Recovering log #92
2023/08/24-20:11:49.232090 7fda7a3fc6c0 Delete type=3 #90
2023/08/24-20:11:49.232138 7fda7a3fc6c0 Delete type=0 #92
2023/08/24-20:28:27.008700 7fda79bfb6c0 Level-0 table #97: started
2023/08/24-20:28:27.008737 7fda79bfb6c0 Level-0 table #97: 0 bytes OK
2023/08/24-20:28:27.019736 7fda79bfb6c0 Delete type=0 #95
2023/08/24-20:28:27.051993 7fda79bfb6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
2023/08/24-20:28:27.052030 7fda79bfb6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
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.

Binary file not shown.

View File

@ -821,10 +821,13 @@ 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;
}
@ -1395,6 +1398,9 @@ Focus FOC: #ff0084
.item-control-end {
align-self: flex-end;
}
.margin-space-4 {
margin-left: 4px;
}
.margin-item-list {
margin-top: 4px;
}

View File

@ -5,11 +5,11 @@
"flags": {}
}
],
"description": "Hero System v6 for FoundryVTT (Official)",
"description": "Hero System 6E for FoundryVTT (Official)",
"esmodules": [
"modules/hero6-main.js"
],
"gridDistance": 5,
"gridDistance": 2,
"gridUnits": "m",
"languages": [
{
@ -85,21 +85,21 @@
"flags": {}
}
],
"primaryTokenAttribute": "secondary.hp",
"secondaryTokenAttribute": "secondary.effort",
"primaryTokenAttribute": "characteristics.body",
"secondaryTokenAttribute": "characteristics.end",
"socket": true,
"styles": [
"styles/simple.css"
],
"version": "11.0.12",
"version": "11.0.23",
"compatibility": {
"minimum": "11",
"verified": "11"
},
"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-v11.0.12.zip",
"url": "https://www.uberwald.me/gitea/uberwald/",
"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",
"id": "fvtt-hero-system-6"
}

View File

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

View File

@ -149,35 +149,54 @@
</li>
</ul>
{{#each maneuvers as |mlist key|}}
{{#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 key}} Maneuver</label>
<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>
<a class="roll-item"><i class="fas fa-dice"></i></a><span class="item-field-label-long">{{maneuver.name}}
</span>
<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}}
</span>
<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-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}}
{{#if maneuver.system.haseffectroll}}
@ -241,9 +260,9 @@
<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" />
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}}
{{/each}}
@ -407,7 +426,7 @@
<div class="charac-item">
<ul>
<li class="item flexrow list-item items-title-bg">
<span class="item-field-label-medium">
<span class="item-field-label-short">
<label class="">Value</label>
</span>
<span class="item-field-label-medium">
@ -556,26 +575,75 @@
</span>
</li>
{{#each allmaneuvers as |maneuver key|}}
<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}}">
<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>
{{#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}}">
<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">{{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-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-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>
<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 --}}
@ -601,8 +669,8 @@
<span class="item-field-label-short">
<label class="item-field-label-short">Roll</label>
</span>
<span class="item-field-label-medium">
<label class="item-field-label-medium">END</label>
<span class="item-field-label-short">
<label class="item-field-label-short">END</label>
</span>
</li>
{{#each powers as |power key|}}
@ -610,7 +678,16 @@
<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>
@ -620,7 +697,7 @@
{{else}}
<span class="item-field-label-short">&nbsp;</span>
{{/if}}
<span class="item-field-label-medium">{{power.system.endurance}}</span>
<span class="item-field-label-short">{{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>

View File

@ -32,8 +32,6 @@
</a>
{{/if}}
{{log combat.flags}}
{{#if combatCount}}
{{#if combat.round}}
<!--<h3 class="encounter-title noborder">Turn {{combat.turnNumber}} Segment {{combat.segmentNumber}}</h3>-->

View File

@ -1,9 +1,11 @@
<form class="skill-roll-dialog">
<header class="roll-dialog-header">
{{#if img}}
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
{{/if}}
<h1 class="dialog-roll-title roll-dialog-header">{{title}}</h1>
<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>
</header>
<div class="flexcol">
@ -15,6 +17,28 @@
</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

@ -13,9 +13,28 @@
<div>
<ul>
<li>Name : {{title}}</li>
<li>Damage Effect: {{upperFirst item.system.damageeffect}}</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>
{{/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

@ -17,6 +17,21 @@
</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,7 +57,7 @@
<li><strong>TOTAL : {{result}}</strong>
{{#if (exists margin)}}
({{#if isSuccess}}Success!!{{else}}Failure!{{/if}})
(<strong>{{#if isSuccess}}Success!!{{else}}Failure!{{/if}}</strong>)
{{/if}}
</li>
@ -51,7 +66,15 @@
{{/if}}
{{#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}}
</ul>

View File

@ -37,14 +37,21 @@
<input type="text" class="item-field-label-medium" name="system.pha" value="{{system.pha}}" data-dtype="String"/>
</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>
<input type="text" class="item-field-label-medium" name="system.ocv" value="{{system.ocv}}" data-dtype="String"/>
</li>
<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"/>
</li>
{{/if}}
<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"/>
</li>

View File

@ -52,22 +52,21 @@
data-dtype="Number"/>
</li>
<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}}
{{#if (or system.skillprofiency system.skilllevelonly)}}disabled{{/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}}
data-dtype="Number"/>
</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>
<input type="checkbox" class="item-field-label-medium item-skill-everyman" name="system.skilleveryman" {{checked system.skilleveryman}} data-dtype="Number"/>
</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")}}
<li class="flexrow"><label class="item-field-label-long">Levels Cost</label>

View File

@ -3,7 +3,13 @@
<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>

View File

@ -1,9 +1,9 @@
<li class="item stat flexrow list-item list-item-shadow" data-attr-key="{{key}}">
<input type="text" class="item-field-label-medium" name="system.characteristics.{{key}}.value"
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.value"
value="{{charac.value}}" data-dtype="Number" />
<span class="item-field-label-medium" name="{{key}}">
<span class="item-field-label-medium margin-space-4" name="{{key}}">
<h4 class="item-field-label-medium margin-item-list">{{charac.label}}</a></h4>
</span>

View File

@ -18,6 +18,18 @@
</select>
</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>
<label class="item-field-label-medium"><input type="checkbox" name="system.senseaffecting" {{checked system.senseaffecting}}/></label>
</li>
@ -26,9 +38,27 @@
<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"/>
</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>
<input type="text" class="item-field-label-medium" name="system.damage" value="{{system.damage}}" data-dtype="String"/>
</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}}
<li class="flexrow"><label class="item-field-label-long">Endurance</label>