Compare commits

...

18 Commits

59 changed files with 500 additions and 216 deletions

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.

19
changelog.md Normal file
View File

@ -0,0 +1,19 @@
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) => { 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,12 +223,20 @@ export class Hero6Actor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
prepareManeuver(maneuver) { prepareManeuver(maneuver) {
if (maneuver.system.maneuvertype == "mental") {
maneuver.roll = 11 + this.system.characteristics.ocv.value maneuver.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0)
if (Number(maneuver.system.ocv)) { if (Number(maneuver.system.omcv)) {
maneuver.roll += Number(maneuver.system.ocv) 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)
if (Number(maneuver.system.ocv)) {
maneuver.roll += (Number(maneuver.system.ocv) || 0)
} else {
maneuver.noOCV = true
}
} }
} }
@ -304,11 +311,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() {
@ -646,12 +655,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)
@ -704,11 +711,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 +732,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 +764,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 +787,54 @@ 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.weaponRoll = 11 + (Number(this.system.characteristics.ocv.value) || 0) + (Number(weapon.system.ocv) || 0)
skill = duplicate(skill) rollData.mode = "weapon"
Hero6Utility.updateSkill(skill) rollData.weapon = weapon
let abilityKey = skill.system.ability rollData.img = weapon.img
let rollData = this.getCommonRollData(abilityKey) this.startRoll(rollData)
rollData.mode = "weapon" } else {
rollData.skill = skill ui.notifications.warn("Unable to find the weapon " + weapon.name)
rollData.weapon = weapon }
rollData.img = weapon.img }
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged /* -------------------------------------------- */
rollData.forceDisadvantage = this.isAttackDisadvantage() rollMentalManeuver(maneuverId) {
} let maneuver = this.items.get(maneuverId)
/*if (rollData.weapon.system.isranged && rollData.tokensDistance > Hero6Utility.getWeaponMaxRange(rollData.weapon) ) { if (maneuver) {
ui.notifications.warn(`Your target is out of range of your weapon (max: ${Hero6Utility.getWeaponMaxRange(rollData.weapon)} - current : ${rollData.tokensDistance})` ) maneuver = duplicate(maneuver)
return let rollData = this.getCommonRollData()
}*/ rollData.maneuverRoll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(maneuver.system.omcv) || 0)
this.startRoll(rollData) rollData.mode = "mentalmaneuver"
} else { rollData.maneuver = maneuver
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name) 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()
if (power.system.attackvalue == "ocv") {
rollData.powerRoll = 11 + (Number(this.system.characteristics.ocv.value) || 0) + (Number(power.system.ocv) || 0)
} else {
rollData.powerRoll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(power.system.omcv) || 0)
}
rollData.mode = "powerattack"
rollData.power = power
rollData.img = power.img
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

@ -346,6 +346,16 @@ 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.weapon) {
target = rollData.weaponRoll
}
if(rollData.maneuver) {
target = rollData.maneuverRoll
}
if(rollData.power) {
target = rollData.powerRoll
}
if (rollData.charac) { if (rollData.charac) {
target = rollData.charac.roll target = rollData.charac.roll
} }

View File

@ -1 +1 @@
MANIFEST-000098 MANIFEST-000132

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.588130 7fda7bbff6c0 Recovering log #96 2023/08/27-08:29:22.284274 7f2dea7fc6c0 Recovering log #130
2023/08/24-20:28:52.597974 7fda7bbff6c0 Delete type=3 #94 2023/08/27-08:29:22.301134 7f2dea7fc6c0 Delete type=3 #128
2023/08/24-20:28:52.598068 7fda7bbff6c0 Delete type=0 #96 2023/08/27-08:29:22.301181 7f2dea7fc6c0 Delete type=0 #130
2023/08/27-08:39:31.996089 7f2b69bff6c0 Level-0 table #135: started
2023/08/27-08:39:31.996115 7f2b69bff6c0 Level-0 table #135: 0 bytes OK
2023/08/27-08:39:32.003139 7f2b69bff6c0 Delete type=0 #133
2023/08/27-08:39:32.003292 7f2b69bff6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
2023/08/27-08:39:32.003321 7f2b69bff6c0 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/26-22:07:58.627561 7f2deaffd6c0 Recovering log #126
2023/08/24-20:11:49.204015 7fda7abfd6c0 Delete type=3 #90 2023/08/26-22:07:58.748615 7f2deaffd6c0 Delete type=3 #124
2023/08/24-20:11:49.204065 7fda7abfd6c0 Delete type=0 #92 2023/08/26-22:07:58.748679 7f2deaffd6c0 Delete type=0 #126
2023/08/24-20:28:26.993087 7fda79bfb6c0 Level-0 table #97: started 2023/08/26-22:16:27.923271 7f2b69bff6c0 Level-0 table #131: started
2023/08/24-20:28:26.993130 7fda79bfb6c0 Level-0 table #97: 0 bytes OK 2023/08/26-22:16:27.923312 7f2b69bff6c0 Level-0 table #131: 0 bytes OK
2023/08/24-20:28:27.002024 7fda79bfb6c0 Delete type=0 #95 2023/08/26-22:16:27.929503 7f2b69bff6c0 Delete type=0 #129
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/26-22:16:27.949795 7f2b69bff6c0 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/08/26-22:16:27.949837 7f2b69bff6c0 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-000134

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.572724 7fda7a3fc6c0 Recovering log #97 2023/08/27-08:29:22.269478 7f2deaffd6c0 Recovering log #132
2023/08/24-20:28:52.584112 7fda7a3fc6c0 Delete type=3 #95 2023/08/27-08:29:22.279442 7f2deaffd6c0 Delete type=3 #130
2023/08/24-20:28:52.584178 7fda7a3fc6c0 Delete type=0 #97 2023/08/27-08:29:22.279516 7f2deaffd6c0 Delete type=0 #132
2023/08/27-08:39:31.935876 7f2b69bff6c0 Level-0 table #137: started
2023/08/27-08:39:31.935922 7f2b69bff6c0 Level-0 table #137: 0 bytes OK
2023/08/27-08:39:31.943117 7f2b69bff6c0 Delete type=0 #135
2023/08/27-08:39:31.968194 7f2b69bff6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
2023/08/27-08:39:31.968240 7f2b69bff6c0 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/26-22:07:58.520995 7f2deb7fe6c0 Recovering log #128
2023/08/24-20:11:49.186442 7fda7b3fe6c0 Delete type=3 #90 2023/08/26-22:07:58.608948 7f2deb7fe6c0 Delete type=3 #126
2023/08/24-20:11:49.186511 7fda7b3fe6c0 Delete type=0 #92 2023/08/26-22:07:58.609004 7f2deb7fe6c0 Delete type=0 #128
2023/08/24-20:28:26.929251 7fda79bfb6c0 Level-0 table #98: started 2023/08/26-22:16:27.903755 7f2b69bff6c0 Level-0 table #133: started
2023/08/24-20:28:26.933483 7fda79bfb6c0 Level-0 table #98: 61208 bytes OK 2023/08/26-22:16:27.903791 7f2b69bff6c0 Level-0 table #133: 0 bytes OK
2023/08/24-20:28:26.940562 7fda79bfb6c0 Delete type=0 #96 2023/08/26-22:16:27.909699 7f2b69bff6c0 Delete type=0 #131
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/26-22:16:27.916391 7f2b69bff6c0 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/26-22:16:27.923165 7f2b69bff6c0 Manual compaction at level-1 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
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)

View File

@ -1 +1 @@
MANIFEST-000090 MANIFEST-000125

View File

@ -1,3 +1,15 @@
2023/08/24-20:28:52.601708 7fda7a3fc6c0 Recovering log #88 2023/08/27-08:29:22.300538 7f2deaffd6c0 Recovering log #123
2023/08/24-20:28:52.613896 7fda7a3fc6c0 Delete type=3 #86 2023/08/27-08:29:22.317575 7f2deaffd6c0 Delete type=3 #121
2023/08/24-20:28:52.614012 7fda7a3fc6c0 Delete type=0 #88 2023/08/27-08:29:22.317668 7f2deaffd6c0 Delete type=0 #123
2023/08/27-08:39:31.985594 7f2b69bff6c0 Level-0 table #128: started
2023/08/27-08:39:31.989270 7f2b69bff6c0 Level-0 table #128: 885 bytes OK
2023/08/27-08:39:31.995966 7f2b69bff6c0 Delete type=0 #126
2023/08/27-08:39:32.003282 7f2b69bff6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
2023/08/27-08:39:32.003339 7f2b69bff6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at '!items!M7GTfolCobuXkfpd' @ 28 : 1
2023/08/27-08:39:32.003347 7f2b69bff6c0 Compacting 1@1 + 1@2 files
2023/08/27-08:39:32.006911 7f2b69bff6c0 Generated table #129@1: 26 keys, 15634 bytes
2023/08/27-08:39:32.006934 7f2b69bff6c0 Compacted 1@1 + 1@2 files => 15634 bytes
2023/08/27-08:39:32.013790 7f2b69bff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
2023/08/27-08:39:32.013955 7f2b69bff6c0 Delete type=2 #116
2023/08/27-08:39:32.014188 7f2b69bff6c0 Delete type=2 #128
2023/08/27-08:39:32.026889 7f2b69bff6c0 Manual compaction at level-1 from '!items!M7GTfolCobuXkfpd' @ 28 : 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/26-22:07:58.730640 7f2deb7fe6c0 Recovering log #119
2023/08/24-20:11:49.219726 7fda7bbff6c0 Delete type=3 #82 2023/08/26-22:07:58.841210 7f2deb7fe6c0 Delete type=3 #117
2023/08/24-20:11:49.219820 7fda7bbff6c0 Delete type=0 #84 2023/08/26-22:07:58.841288 7f2deb7fe6c0 Delete type=0 #119
2023/08/24-20:28:27.002307 7fda79bfb6c0 Level-0 table #89: started 2023/08/26-22:16:27.936844 7f2b69bff6c0 Level-0 table #124: started
2023/08/24-20:28:27.002338 7fda79bfb6c0 Level-0 table #89: 0 bytes OK 2023/08/26-22:16:27.936868 7f2b69bff6c0 Level-0 table #124: 0 bytes OK
2023/08/24-20:28:27.008560 7fda79bfb6c0 Delete type=0 #87 2023/08/26-22:16:27.942975 7f2b69bff6c0 Delete type=0 #122
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/26-22:16:27.949818 7f2b69bff6c0 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/08/26-22:16:27.949853 7f2b69bff6c0 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-000132

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.601706 7fda7abfd6c0 Recovering log #96 2023/08/27-08:29:22.302661 7f2debfff6c0 Recovering log #130
2023/08/24-20:28:52.613896 7fda7abfd6c0 Delete type=3 #94 2023/08/27-08:29:22.321361 7f2debfff6c0 Delete type=3 #128
2023/08/24-20:28:52.613994 7fda7abfd6c0 Delete type=0 #96 2023/08/27-08:29:22.321420 7f2debfff6c0 Delete type=0 #130
2023/08/27-08:39:32.020735 7f2b69bff6c0 Level-0 table #135: started
2023/08/27-08:39:32.020763 7f2b69bff6c0 Level-0 table #135: 0 bytes OK
2023/08/27-08:39:32.026780 7f2b69bff6c0 Delete type=0 #133
2023/08/27-08:39:32.026919 7f2b69bff6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
2023/08/27-08:39:32.026945 7f2b69bff6c0 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/26-22:07:58.751122 7f2dea7fc6c0 Recovering log #126
2023/08/24-20:11:49.222633 7fda7b3fe6c0 Delete type=3 #90 2023/08/26-22:07:58.864497 7f2dea7fc6c0 Delete type=3 #124
2023/08/24-20:11:49.222697 7fda7b3fe6c0 Delete type=0 #92 2023/08/26-22:07:58.864580 7f2dea7fc6c0 Delete type=0 #126
2023/08/24-20:28:27.019936 7fda79bfb6c0 Level-0 table #97: started 2023/08/26-22:16:27.929655 7f2b69bff6c0 Level-0 table #131: started
2023/08/24-20:28:27.019979 7fda79bfb6c0 Level-0 table #97: 0 bytes OK 2023/08/26-22:16:27.929696 7f2b69bff6c0 Level-0 table #131: 0 bytes OK
2023/08/24-20:28:27.051866 7fda79bfb6c0 Delete type=0 #95 2023/08/26-22:16:27.936745 7f2b69bff6c0 Delete type=0 #129
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/26-22:16:27.949807 7f2b69bff6c0 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/08/26-22:16:27.949861 7f2b69bff6c0 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-000132 Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000099 MANIFEST-000133

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.588130 7fda7abfd6c0 Recovering log #97 2023/08/27-08:29:22.281768 7f2deb7fe6c0 Recovering log #131
2023/08/24-20:28:52.597915 7fda7abfd6c0 Delete type=3 #95 2023/08/27-08:29:22.298260 7f2deb7fe6c0 Delete type=3 #129
2023/08/24-20:28:52.597970 7fda7abfd6c0 Delete type=0 #97 2023/08/27-08:29:22.298361 7f2deb7fe6c0 Delete type=0 #131
2023/08/27-08:39:31.977972 7f2b69bff6c0 Level-0 table #136: started
2023/08/27-08:39:31.978008 7f2b69bff6c0 Level-0 table #136: 0 bytes OK
2023/08/27-08:39:31.985417 7f2b69bff6c0 Delete type=0 #134
2023/08/27-08:39:32.003270 7f2b69bff6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
2023/08/27-08:39:32.003309 7f2b69bff6c0 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/26-22:07:58.612145 7f2debfff6c0 Recovering log #127
2023/08/24-20:11:49.201012 7fda7a3fc6c0 Delete type=3 #91 2023/08/26-22:07:58.728418 7f2debfff6c0 Delete type=3 #125
2023/08/24-20:11:49.201080 7fda7a3fc6c0 Delete type=0 #93 2023/08/26-22:07:58.728498 7f2debfff6c0 Delete type=0 #127
2023/08/24-20:28:26.985277 7fda79bfb6c0 Level-0 table #98: started 2023/08/26-22:16:27.916401 7f2b69bff6c0 Level-0 table #132: started
2023/08/24-20:28:26.985305 7fda79bfb6c0 Level-0 table #98: 0 bytes OK 2023/08/26-22:16:27.916423 7f2b69bff6c0 Level-0 table #132: 0 bytes OK
2023/08/24-20:28:26.992913 7fda79bfb6c0 Delete type=0 #96 2023/08/26-22:16:27.923048 7f2b69bff6c0 Delete type=0 #130
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/26-22:16:27.923174 7f2b69bff6c0 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/08/26-22:16:27.923191 7f2b69bff6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000098 MANIFEST-000132

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.572723 7fda7b3fe6c0 Recovering log #96 2023/08/27-08:29:22.269474 7f2debfff6c0 Recovering log #130
2023/08/24-20:28:52.584114 7fda7b3fe6c0 Delete type=3 #94 2023/08/27-08:29:22.282410 7f2debfff6c0 Delete type=3 #128
2023/08/24-20:28:52.584178 7fda7b3fe6c0 Delete type=0 #96 2023/08/27-08:29:22.282470 7f2debfff6c0 Delete type=0 #130
2023/08/27-08:39:31.960813 7f2b69bff6c0 Level-0 table #135: started
2023/08/27-08:39:31.960840 7f2b69bff6c0 Level-0 table #135: 0 bytes OK
2023/08/27-08:39:31.968065 7f2b69bff6c0 Delete type=0 #133
2023/08/27-08:39:31.968231 7f2b69bff6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
2023/08/27-08:39:31.968249 7f2b69bff6c0 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/26-22:07:58.521207 7f2dea7fc6c0 Recovering log #126
2023/08/24-20:11:49.186443 7fda7bbff6c0 Delete type=3 #90 2023/08/26-22:07:58.625202 7f2dea7fc6c0 Delete type=3 #124
2023/08/24-20:11:49.186509 7fda7bbff6c0 Delete type=0 #92 2023/08/26-22:07:58.625257 7f2dea7fc6c0 Delete type=0 #126
2023/08/24-20:28:26.975180 7fda79bfb6c0 Level-0 table #97: started 2023/08/26-22:16:27.909865 7f2b69bff6c0 Level-0 table #131: started
2023/08/24-20:28:26.975225 7fda79bfb6c0 Level-0 table #97: 0 bytes OK 2023/08/26-22:16:27.909908 7f2b69bff6c0 Level-0 table #131: 0 bytes OK
2023/08/24-20:28:26.985137 7fda79bfb6c0 Delete type=0 #95 2023/08/26-22:16:27.916292 7f2b69bff6c0 Delete type=0 #129
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/26-22:16:27.923145 7f2b69bff6c0 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/08/26-22:16:27.923202 7f2b69bff6c0 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-000132

View File

@ -1,3 +1,8 @@
2023/08/24-20:28:52.617237 7fda7abfd6c0 Recovering log #96 2023/08/27-08:29:22.319586 7f2deb7fe6c0 Recovering log #130
2023/08/24-20:28:52.627761 7fda7abfd6c0 Delete type=3 #94 2023/08/27-08:29:22.330371 7f2deb7fe6c0 Delete type=3 #128
2023/08/24-20:28:52.627835 7fda7abfd6c0 Delete type=0 #96 2023/08/27-08:29:22.330427 7f2deb7fe6c0 Delete type=0 #130
2023/08/27-08:39:32.014249 7f2b69bff6c0 Level-0 table #135: started
2023/08/27-08:39:32.014276 7f2b69bff6c0 Level-0 table #135: 0 bytes OK
2023/08/27-08:39:32.020634 7f2b69bff6c0 Delete type=0 #133
2023/08/27-08:39:32.026909 7f2b69bff6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
2023/08/27-08:39:32.026927 7f2b69bff6c0 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/26-22:07:58.844046 7f2debfff6c0 Recovering log #126
2023/08/24-20:11:49.232090 7fda7a3fc6c0 Delete type=3 #90 2023/08/26-22:07:58.925665 7f2debfff6c0 Delete type=3 #124
2023/08/24-20:11:49.232138 7fda7a3fc6c0 Delete type=0 #92 2023/08/26-22:07:58.926331 7f2debfff6c0 Delete type=0 #126
2023/08/24-20:28:27.008700 7fda79bfb6c0 Level-0 table #97: started 2023/08/26-22:16:27.943060 7f2b69bff6c0 Level-0 table #131: started
2023/08/24-20:28:27.008737 7fda79bfb6c0 Level-0 table #97: 0 bytes OK 2023/08/26-22:16:27.943083 7f2b69bff6c0 Level-0 table #131: 0 bytes OK
2023/08/24-20:28:27.019736 7fda79bfb6c0 Delete type=0 #95 2023/08/26-22:16:27.949677 7f2b69bff6c0 Delete type=0 #129
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/26-22:16:27.949829 7f2b69bff6c0 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/08/26-22:16:27.949845 7f2b69bff6c0 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

@ -5,7 +5,7 @@
"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"
], ],
@ -91,15 +91,15 @@
"styles": [ "styles": [
"styles/simple.css" "styles/simple.css"
], ],
"version": "11.0.12", "version": "11.0.18",
"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.12.zip", "download": "https://www.uberwald.me/gitea/public/fvtt-hero-system-6/archive/fvtt-hero-system-6-v11.0.18.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

@ -15,6 +15,27 @@
</div> </div>
{{/if}} {{/if}}
{{#if weapon}}
<div class="flexrow">
<span class="item-field-label-long margin-item-list">{{weapon.name}} : </span>
<span class="item-field-label-medium margin-item-list">{{weaponRoll}}-</span>
</div>
{{/if}}
{{#if maneuver}}
<div class="flexrow">
<span class="item-field-label-long margin-item-list">{{maneuver.name}} : </span>
<span class="item-field-label-medium margin-item-list">{{maneuverRoll}}-</span>
</div>
{{/if}}
{{#if power}}
<div class="flexrow">
<span class="item-field-label-long margin-item-list">{{power.name}} : </span>
<span class="item-field-label-medium margin-item-list">{{powerRoll}}-</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

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

@ -17,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}}

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,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-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"))}} {{#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>

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>