Compare commits
51 Commits
fvtt-hero-
...
fvtt-hero-
Author | SHA1 | Date | |
---|---|---|---|
86a9889359 | |||
7375fa39c5 | |||
ab587740d8 | |||
0f4fe253e0 | |||
3b13a44d9d | |||
0ebe0c3734 | |||
6a00dd8583 | |||
5064b83f2b | |||
58275c32e6 | |||
c22b950f7c | |||
893ca4cfa5 | |||
94065a3755 | |||
1d4d3054c3 | |||
e5c6d3f42f | |||
f914b9838e | |||
8a543068d2 | |||
379b8358ee | |||
40ee7c3c40 | |||
a07f367b0c | |||
09bb7fb692 | |||
92dc81af24 | |||
d2430ee482 | |||
86780ce8ae | |||
b383481915 | |||
dca78fd4b6 | |||
f381269acf | |||
686ea4cea6 | |||
c915b85a7b | |||
5026e120c1 | |||
9cefc6f816 | |||
11d7c7d1c0 | |||
3abf9a9f8f | |||
f5c0faffd3 | |||
3f0e0a41b8 | |||
20c49eb48c | |||
6275319164 | |||
19fb872824 | |||
002d6f4fbd | |||
43a3a2ccfa | |||
356f0fee5f | |||
58bcfc07a3 | |||
3dcb60e7a9 | |||
6c4812c7e4 | |||
099bb0d88c | |||
9a30275640 | |||
b798cde48d | |||
a943e6defa | |||
9099e812d5 | |||
6d6b7075df | |||
3762e6185b | |||
1e74d6f306 |
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
packs/* filter=lfs diff=lfs merge=lfs -text
|
28
README.md
28
README.md
@ -1,2 +1,28 @@
|
|||||||
# fvtt-dark-stars
|
This is the official Hero System 6th Edition game system for FoundryVTT, based on the TTRPG from Hero Games and developed by Legendsmiths, LLC. For more information about Legendsmiths and their work, visit https://legendsmiths.com/.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Installation
|
||||||
|
Manifest URL: https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/master/system.json
|
||||||
|
Project page : https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6
|
||||||
|
|
||||||
|
For manual installation, use the provided manifest URL in the "Install System" popup window while managing game systems.
|
||||||
|
|
||||||
|
Copyright (c) 2023 Legendsmiths, LLC
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
All content for the HERO System™® is DOJ, Inc.’s trademark for its roleplaying system. HERO System Copyright ©1984, 1989, 2002, 2009 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Fantasy Hero ©2003, 2010 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Star Hero ©2003, 2011 by DOJ, Inc. d/b/a Hero Games. All rights reserved. All DOJ trademarks and copyrights used with permission and under license with Legendsmiths , LLC. For further information about Hero Games and the HERO System, visit www.herogames.com. All HERO System™® content is not be included to copy, modify, merge, publish, distribute, sublicense, and/or sell with copies of the Software with the exception of the current licensee Legendsmiths, LLC.
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
38
changelog.md
Normal file
38
changelog.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
v11.0.21
|
||||||
|
|
||||||
|
- Fix grid default distance in system.json
|
||||||
|
- Fix powers roll again (#29)
|
||||||
|
|
||||||
|
v11.0.20
|
||||||
|
|
||||||
|
- Enhance chat message output (cf #25)
|
||||||
|
- Enhance roll window
|
||||||
|
- Code simplification
|
||||||
|
|
||||||
|
v11.0.19
|
||||||
|
|
||||||
|
- Fix killing damage computation (again)
|
||||||
|
|
||||||
|
v11.0.18
|
||||||
|
|
||||||
|
- Fix killing damage computation
|
||||||
|
|
||||||
|
v11.0.17
|
||||||
|
|
||||||
|
- Fix tickets 1, 2, 3, 7, 8, 9, 10
|
||||||
|
- Implements effects tagging (#11)
|
||||||
|
|
||||||
|
v11.0.16
|
||||||
|
|
||||||
|
- Fix mental maneuvers rolls
|
||||||
|
- Renamed title
|
||||||
|
|
||||||
|
v11.0.15
|
||||||
|
|
||||||
|
- Fix target rolls for power
|
||||||
|
- Add maneuvers roll in the maneuver tab
|
||||||
|
- Renamed title
|
||||||
|
|
||||||
|
v11.0.14
|
||||||
|
|
||||||
|
- Initial public release
|
BIN
images/ui/hero_foundry_cover.webp
Normal file
BIN
images/ui/hero_foundry_cover.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 202 KiB |
37
lang/en.json
37
lang/en.json
@ -1,18 +1,27 @@
|
|||||||
{
|
{
|
||||||
"ACTOR": {
|
"TYPES": {
|
||||||
"TypeCharacter": "Character"
|
"Actor": {
|
||||||
|
"character": "Character",
|
||||||
|
"minion": "Minion"
|
||||||
|
},
|
||||||
|
"Item": {
|
||||||
|
"skill": "Skill",
|
||||||
|
"perk": "Perk",
|
||||||
|
"power": "Power",
|
||||||
|
"talent": "Talent",
|
||||||
|
"advantage": "Advantage",
|
||||||
|
"martialart": "Martial art",
|
||||||
|
"limitation": "Limitation",
|
||||||
|
"complication": "Complication",
|
||||||
|
"equipment": "Equipment",
|
||||||
|
"currency": "Currency",
|
||||||
|
"maneuver": "Maneuver"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"ITEM": {
|
"COMBAT": {
|
||||||
"TypeSkill": "Skill",
|
"TurnPrev": "Previous initiative",
|
||||||
"TypePerk": "Perk",
|
"RoundPrev": "Previous segment",
|
||||||
"TypePower": "Power",
|
"TurnNext": "Next initiative",
|
||||||
"TypeTalent": "Talent",
|
"RoundNext": "Next segment"
|
||||||
"TypeAdvantage": "Advantage",
|
|
||||||
"TypeMartialart": "Martial art",
|
|
||||||
"TypeLimitation": "Limitation",
|
|
||||||
"TypeComplication": "Complication",
|
|
||||||
"TypeEquipment": "Equipment",
|
|
||||||
"TypeCurrency": "Currency",
|
|
||||||
"TypeManeuver": "Maneuver"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -46,13 +46,17 @@ export class Hero6ActorSheet extends ActorSheet {
|
|||||||
complications: this.actor.getComplications( ),
|
complications: this.actor.getComplications( ),
|
||||||
maneuvers: this.actor.getManeuvers( ),
|
maneuvers: this.actor.getManeuvers( ),
|
||||||
nonstockmaneuvers: this.actor.getNonStockManeuvers(),
|
nonstockmaneuvers: this.actor.getNonStockManeuvers(),
|
||||||
|
allmaneuvers: this.actor.getAllManeuvers(),
|
||||||
weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
|
weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
|
||||||
armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
|
armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
|
||||||
shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
|
shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
|
||||||
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsMoneys()) ),
|
moneys: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getMoneys())),
|
||||||
|
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipments()) ),
|
||||||
subActors: duplicate(this.actor.getSubActors()),
|
subActors: duplicate(this.actor.getSubActors()),
|
||||||
race: duplicate(this.actor.getRace()),
|
race: duplicate(this.actor.getRace()),
|
||||||
encCapacity: this.actor.getEncumbranceCapacity(),
|
encCapacity: this.actor.getEncumbranceCapacity(),
|
||||||
|
isHold: this.actor.getHoldAction(),
|
||||||
|
isAbort: this.actor.getAbortAction(),
|
||||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||||
motivation: await TextEditor.enrichHTML(this.object.system.biodata.motivation, {async: true}),
|
motivation: await TextEditor.enrichHTML(this.object.system.biodata.motivation, {async: true}),
|
||||||
quote: await TextEditor.enrichHTML(this.object.system.biodata.quote, {async: true}),
|
quote: await TextEditor.enrichHTML(this.object.system.biodata.quote, {async: true}),
|
||||||
@ -72,7 +76,9 @@ export class Hero6ActorSheet extends ActorSheet {
|
|||||||
editScore: this.options.editScore,
|
editScore: this.options.editScore,
|
||||||
isGM: game.user.isGM
|
isGM: game.user.isGM
|
||||||
}
|
}
|
||||||
|
|
||||||
this.formData = formData;
|
this.formData = formData;
|
||||||
|
this.stockManeuverDisplayed = false
|
||||||
|
|
||||||
console.log("PC : ", formData, this.object);
|
console.log("PC : ", formData, this.object);
|
||||||
return formData;
|
return formData;
|
||||||
@ -87,9 +93,9 @@ export class Hero6ActorSheet extends ActorSheet {
|
|||||||
// Everything below here is only needed if the sheet is editable
|
// Everything below here is only needed if the sheet is editable
|
||||||
if (!this.options.editable) return;
|
if (!this.options.editable) return;
|
||||||
|
|
||||||
html.bind("keydown", function(e) { // Ignore Enter in actores sheet
|
/*html.bind("keydown", function(e) { // Ignore Enter in actores sheet
|
||||||
if (e.keyCode === 13) return false;
|
if (e.keyCode === 13) return false;
|
||||||
});
|
});*/
|
||||||
|
|
||||||
// Update Inventory Item
|
// Update Inventory Item
|
||||||
html.find('.item-edit').click(ev => {
|
html.find('.item-edit').click(ev => {
|
||||||
@ -156,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")
|
||||||
@ -177,14 +189,8 @@ export class Hero6ActorSheet extends ActorSheet {
|
|||||||
const li = $(event.currentTarget).parents(".item");
|
const li = $(event.currentTarget).parents(".item");
|
||||||
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('.hold-action').click((event) => {
|
html.find('.hold-action').click((event) => {
|
||||||
this.actor.holdAction()
|
this.actor.holdAction()
|
||||||
});
|
});
|
||||||
@ -192,6 +198,16 @@ export class Hero6ActorSheet extends ActorSheet {
|
|||||||
this.actor.abortAction()
|
this.actor.abortAction()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
html.find(".show-stock-maneuver").click((event) => {
|
||||||
|
if ( !this.stockManeuverDisplayed) {
|
||||||
|
$('div .maneuver-list').removeClass('maneuver-is-stock');
|
||||||
|
this.stockManeuverDisplayed = true
|
||||||
|
} else {
|
||||||
|
$('div .maneuver-list').addClass('maneuver-is-stock');
|
||||||
|
this.stockManeuverDisplayed = false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
html.find('.lock-unlock-sheet').click((event) => {
|
html.find('.lock-unlock-sheet').click((event) => {
|
||||||
this.options.editScore = !this.options.editScore;
|
this.options.editScore = !this.options.editScore;
|
||||||
this.render(true);
|
this.render(true);
|
||||||
|
@ -4,7 +4,7 @@ import { Hero6RollDialog } from "./hero6-roll-dialog.js";
|
|||||||
import { Hero6LiftDice } from "./hero6-lift-dice.js";
|
import { Hero6LiftDice } from "./hero6-lift-dice.js";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
const __speed2Segments = [[0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12]
|
const __speed2Segments = [[0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12],
|
||||||
[2, 4, 6, 7, 9, 11, 12], [2, 3, 5, 6, 8, 9, 11, 12], [2, 3, 4, 6, 7, 8, 10, 11, 12], [2, 3, 4, 5, 6, 8, 9, 10, 11, 12],
|
[2, 4, 6, 7, 9, 11, 12], [2, 3, 5, 6, 8, 9, 11, 12], [2, 3, 4, 6, 7, 8, 10, 11, 12], [2, 3, 4, 5, 6, 8, 9, 10, 11, 12],
|
||||||
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
|
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
|
||||||
|
|
||||||
@ -40,11 +40,10 @@ export class Hero6Actor extends Actor {
|
|||||||
return actor;
|
return actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.type == 'character') {
|
if (data.type == 'character' || data.type == 'minion') {
|
||||||
//const skills = await Hero6Utility.loadCompendium("fvtt-hero-system-6.skills");
|
const maneuvers = await Hero6Utility.loadCompendium("fvtt-hero-system-6.maneuvers")
|
||||||
//data.items = skills.map(i => i.toObject())
|
let maneuversObj = maneuvers.map(i => i.toObject())
|
||||||
}
|
data.items = maneuversObj.filter(m => m.system.isstock)
|
||||||
if (data.type == 'npc') {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.create(data, options);
|
return super.create(data, options);
|
||||||
@ -61,14 +60,19 @@ export class Hero6Actor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
computeDerivatedData() {
|
computeDerivatedData() {
|
||||||
if (this.type == "character") {
|
let newSTREND = this.computeSTREND()
|
||||||
let newSTREND = this.computeSTREND()
|
if (newSTREND != this.system.characteristics.str.strend) {
|
||||||
if (newSTREND != this.system.characteristics.str.strend) {
|
this.update({ 'system.characteristics.str.strend': newSTREND })
|
||||||
this.update({ 'system.characteristics.str.strend': newSTREND })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
performMigration() {
|
||||||
|
// Fix OCV/OMCV rollable
|
||||||
|
if (!this.system.characteristics.ocv.hasroll) {
|
||||||
|
this.update({ 'system.characteristics.ocv.hasroll': true, 'system.characteristics.omcv.hasroll': true })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
computeDicesValue() {
|
computeDicesValue() {
|
||||||
this.system.biodata.presenceattack = Hero6Utility.getDerivatedDiceFormulas(this.system.characteristics.pre.value)
|
this.system.biodata.presenceattack = Hero6Utility.getDerivatedDiceFormulas(this.system.characteristics.pre.value)
|
||||||
this.system.characteristics.str.strdice = Hero6LiftDice.getLiftDice(this.system.characteristics.str.value)
|
this.system.characteristics.str.strdice = Hero6LiftDice.getLiftDice(this.system.characteristics.str.value)
|
||||||
@ -163,6 +167,19 @@ export class Hero6Actor extends Actor {
|
|||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async _preCreate(data, options, user) {
|
||||||
|
await super._preCreate(data, options, user);
|
||||||
|
|
||||||
|
// Configure prototype token settings
|
||||||
|
const prototypeToken = {};
|
||||||
|
if (this.type === "character") Object.assign(prototypeToken, {
|
||||||
|
sight: { enabled: true }, actorLink: true, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
|
||||||
|
});
|
||||||
|
this.updateSource({ prototypeToken });
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
prepareSkill(skill) {
|
prepareSkill(skill) {
|
||||||
skill.roll = 0
|
skill.roll = 0
|
||||||
@ -199,12 +216,34 @@ 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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
prepareManeuver(maneuver) {
|
||||||
|
let subMode = "normal"
|
||||||
|
if (maneuver.system.maneuvertype == "mental") {
|
||||||
|
maneuver.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0)
|
||||||
|
subMode = "omcv"
|
||||||
|
if (Number(maneuver.system.omcv)) {
|
||||||
|
maneuver.roll += (Number(maneuver.system.omcv) || 0)
|
||||||
|
} else {
|
||||||
|
maneuver.noOMCV = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
maneuver.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0)
|
||||||
|
subMode = "ocv"
|
||||||
|
if (Number(maneuver.system.ocv)) {
|
||||||
|
maneuver.roll += (Number(maneuver.system.ocv) || 0)
|
||||||
|
} else {
|
||||||
|
maneuver.noOCV = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return subMode
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getSkills() {
|
getSkills() {
|
||||||
let comp = duplicate(this.items.filter(item => item.type == 'skill') || [])
|
let comp = duplicate(this.items.filter(item => item.type == 'skill') || [])
|
||||||
@ -276,11 +315,18 @@ 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
|
||||||
|
}
|
||||||
|
getAllManeuvers() {
|
||||||
|
let maneuvers = this.items.filter(item => item.type == "maneuver")
|
||||||
|
Hero6Utility.sortArrayObjectsByName(maneuvers)
|
||||||
return maneuvers
|
return maneuvers
|
||||||
}
|
}
|
||||||
getNonStockManeuvers() {
|
getNonStockManeuvers() {
|
||||||
@ -293,6 +339,11 @@ export class Hero6Actor extends Actor {
|
|||||||
Hero6Utility.sortArrayObjectsByName(list)
|
Hero6Utility.sortArrayObjectsByName(list)
|
||||||
return list
|
return list
|
||||||
}
|
}
|
||||||
|
getMoneys() {
|
||||||
|
let list = this.items.filter(item => item.type == "equipment" && item.system.subtype == "money");
|
||||||
|
Hero6Utility.sortArrayObjectsByName(list)
|
||||||
|
return list
|
||||||
|
}
|
||||||
getWeapons() {
|
getWeapons() {
|
||||||
let list = this.items.filter(item => item.type == "equipment" && item.system.subtype == "weapon");
|
let list = this.items.filter(item => item.type == "equipment" && item.system.subtype == "weapon");
|
||||||
Hero6Utility.sortArrayObjectsByName(list)
|
Hero6Utility.sortArrayObjectsByName(list)
|
||||||
@ -388,27 +439,51 @@ export class Hero6Actor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async cleanCombat() {
|
async cleanCombat() {
|
||||||
await this.setFlag("world", "hold-action", false)
|
await this.setFlag("world", "hold-action", false)
|
||||||
await this.setFlag("world", "abort-action", false)
|
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
||||||
}
|
}
|
||||||
async holdAction() {
|
async holdAction() {
|
||||||
|
await this.disableAbortAction()
|
||||||
if (this.getFlag("world", "hold-action")) {
|
if (this.getFlag("world", "hold-action")) {
|
||||||
await this.setFlag("world", "hold-action", false)
|
await this.setFlag("world", "hold-action", false)
|
||||||
|
//game.combat.holdAction(this.id, false)
|
||||||
|
game.combat.forceHold(this, false)
|
||||||
|
return false
|
||||||
} else {
|
} else {
|
||||||
await this.setFlag("world", "hold-action", true)
|
await this.setFlag("world", "hold-action", true)
|
||||||
|
//game.combat.holdAction(this.id, false)
|
||||||
|
game.combat.forceHold(this, true)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
game.combat.rebuildInitiative()
|
}
|
||||||
|
async disableHoldAction() {
|
||||||
|
await this.setFlag("world", "hold-action", false)
|
||||||
}
|
}
|
||||||
async disableAbortAction() {
|
async disableAbortAction() {
|
||||||
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
||||||
}
|
}
|
||||||
async abortAction() {
|
async abortAction() {
|
||||||
|
await this.disableHoldAction()
|
||||||
let abort = this.getFlag("world", "abort-action")
|
let abort = this.getFlag("world", "abort-action")
|
||||||
if ( abort.state) {
|
if (abort.state) {
|
||||||
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
||||||
|
game.combat.forceAbort(this, false)
|
||||||
|
//game.combat.abortAction(this.id, false)
|
||||||
} else {
|
} else {
|
||||||
await this.setFlag("world", "abort-action", { state: true, count: 0 })
|
await this.setFlag("world", "abort-action", { state: true, count: 0 })
|
||||||
|
game.combat.forceAbort(this, true)
|
||||||
|
//game.combat.abortAction(this.id, true)
|
||||||
}
|
}
|
||||||
game.combat.rebuildInitiative()
|
}
|
||||||
|
async incAbortActionCount() {
|
||||||
|
let abort = this.getFlag("world", "abort-action")
|
||||||
|
if (abort.state) {
|
||||||
|
abort.count++
|
||||||
|
await this.setFlag("world", "abort-action", abort)
|
||||||
|
if (abort.count == 2) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
getHoldAction() {
|
getHoldAction() {
|
||||||
return this.getFlag("world", "hold-action")
|
return this.getFlag("world", "hold-action")
|
||||||
@ -422,19 +497,27 @@ export class Hero6Actor extends Actor {
|
|||||||
hasPhase(segmentNumber) {
|
hasPhase(segmentNumber) {
|
||||||
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
||||||
let phases = __speed2Segments[index]
|
let phases = __speed2Segments[index]
|
||||||
console.log("index", segmentNumber, index, phases, phases.includes(segmentNumber))
|
console.log("index", segmentNumber, index, phases, phases.includes(segmentNumber), __speed2Segments)
|
||||||
return phases.includes(segmentNumber)
|
return phases.includes(segmentNumber)
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getSegments() {
|
getSegments() {
|
||||||
let index = [Math.min(Math.max(this.system.characteristics.spd.value, 1), 12)] // Security bounds
|
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
||||||
|
//console.log("INDEX", index, __speed2Segments[index])
|
||||||
return __speed2Segments[index]
|
return __speed2Segments[index]
|
||||||
}
|
}
|
||||||
|
getPhasesString() {
|
||||||
|
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
||||||
|
return __speed2Segments[index].toString()
|
||||||
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getBaseInit() {
|
getBaseInit(turn) {
|
||||||
let r = new Roll("1d6").roll({ async: false })
|
if (turn != this.turn) {
|
||||||
let base = this.system.characteristics.dex.value + (r.total / 10)
|
let r = new Roll("1d6").roll({ async: false })
|
||||||
return base
|
this.currentInit = Number(this.system.characteristics.dex.initiative) + Number(((r.total / 10).toFixed(2)))
|
||||||
|
this.turn = turn
|
||||||
|
}
|
||||||
|
return this.currentInit
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -464,8 +547,13 @@ export class Hero6Actor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
prepareCharacValues(charac) {
|
prepareCharacValues(charac) {
|
||||||
charac.total = charac.value
|
if (charac.label == "OCV" || charac.label == "OMCV" ) {
|
||||||
charac.roll = 9 + Math.round((charac.value) / 5)
|
charac.total = charac.value
|
||||||
|
charac.roll = 11 + charac.value
|
||||||
|
} else {
|
||||||
|
charac.total = charac.value
|
||||||
|
charac.roll = 9 + Math.round((charac.value) / 5)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
prepareCharac() {
|
prepareCharac() {
|
||||||
let characs = duplicate(this.system.characteristics)
|
let characs = duplicate(this.system.characteristics)
|
||||||
@ -476,6 +564,12 @@ export class Hero6Actor extends Actor {
|
|||||||
ch.lift = Hero6LiftDice.getLift(ch.value)
|
ch.lift = Hero6LiftDice.getLift(ch.value)
|
||||||
ch.liftDice = Hero6LiftDice.getLiftDice(ch.value)
|
ch.liftDice = Hero6LiftDice.getLiftDice(ch.value)
|
||||||
}
|
}
|
||||||
|
if (key == "spd") {
|
||||||
|
ch.phasesString = this.getPhasesString()
|
||||||
|
}
|
||||||
|
if (key == "pre") {
|
||||||
|
ch.presenceattack = duplicate(this.system.biodata.presenceattack)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return characs
|
return characs
|
||||||
}
|
}
|
||||||
@ -547,6 +641,9 @@ export class Hero6Actor extends Actor {
|
|||||||
rollData.actorImg = this.img
|
rollData.actorImg = this.img
|
||||||
rollData.actorId = this.id
|
rollData.actorId = this.id
|
||||||
rollData.img = this.img
|
rollData.img = this.img
|
||||||
|
rollData.title = this.name
|
||||||
|
rollData.subMode = "normal"
|
||||||
|
rollData.characteristics = duplicate(this.system.characteristics)
|
||||||
if (chKey) {
|
if (chKey) {
|
||||||
rollData.charac = duplicate(this.system.characteristics[chKey])
|
rollData.charac = duplicate(this.system.characteristics[chKey])
|
||||||
this.prepareCharacValues(rollData.charac)
|
this.prepareCharacValues(rollData.charac)
|
||||||
@ -565,12 +662,10 @@ export class Hero6Actor extends Actor {
|
|||||||
const ray = new Ray(token.object?.center || token.center, defenderToken.center)
|
const ray = new Ray(token.object?.center || token.center, defenderToken.center)
|
||||||
rollData.tokensDistance = canvas.grid.measureDistances([{ ray }], { gridSpaces: false })[0] / canvas.grid.grid.options.dimensions.distance
|
rollData.tokensDistance = canvas.grid.measureDistances([{ ray }], { gridSpaces: false })[0] / canvas.grid.grid.options.dimensions.distance
|
||||||
} else {
|
} else {
|
||||||
ui.notifications.info("No token connected to this actor, unable to compute distance.")
|
//ui.notifications.info("No token connected to this actor, unable to compute distance.")
|
||||||
return
|
//return
|
||||||
}
|
}
|
||||||
if (defender) {
|
if (defender) {
|
||||||
rollData.forceAdvantage = defender.isAttackerAdvantage()
|
|
||||||
rollData.advantageFromTarget = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log("ROLLDATA", rollData)
|
console.log("ROLLDATA", rollData)
|
||||||
@ -581,6 +676,7 @@ export class Hero6Actor extends Actor {
|
|||||||
rollPerception() {
|
rollPerception() {
|
||||||
let rollData = this.getCommonRollData("int")
|
let rollData = this.getCommonRollData("int")
|
||||||
rollData.isPerception = true
|
rollData.isPerception = true
|
||||||
|
rollData.title = "Perception roll"
|
||||||
rollData.charac.roll = Number(rollData.charac.perceptionroll)
|
rollData.charac.roll = Number(rollData.charac.perceptionroll)
|
||||||
rollData.mode = "perception"
|
rollData.mode = "perception"
|
||||||
if (rollData.target) {
|
if (rollData.target) {
|
||||||
@ -594,6 +690,7 @@ export class Hero6Actor extends Actor {
|
|||||||
rollCharac(chKey) {
|
rollCharac(chKey) {
|
||||||
let rollData = this.getCommonRollData(chKey)
|
let rollData = this.getCommonRollData(chKey)
|
||||||
rollData.mode = "charac"
|
rollData.mode = "charac"
|
||||||
|
rollData.title = "Characteristic roll"
|
||||||
if (rollData.target) {
|
if (rollData.target) {
|
||||||
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
|
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
|
||||||
return
|
return
|
||||||
@ -605,10 +702,14 @@ export class Hero6Actor extends Actor {
|
|||||||
let item = this.items.get(itemId)
|
let item = this.items.get(itemId)
|
||||||
let rollData = this.getCommonRollData()
|
let rollData = this.getCommonRollData()
|
||||||
rollData.mode = "item"
|
rollData.mode = "item"
|
||||||
|
rollData.title = Hero6Utility.upperFirst(item.type) + " - " + item.name
|
||||||
rollData.item = duplicate(item)
|
rollData.item = duplicate(item)
|
||||||
if (item.type == "skill") {
|
if (item.type == "skill") {
|
||||||
this.prepareSkill(rollData.item)
|
this.prepareSkill(rollData.item)
|
||||||
}
|
}
|
||||||
|
if (item.type == "maneuver") {
|
||||||
|
rollData.subMode = this.prepareManeuver(rollData.item)
|
||||||
|
}
|
||||||
this.startRoll(rollData)
|
this.startRoll(rollData)
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -620,11 +721,20 @@ export class Hero6Actor extends Actor {
|
|||||||
rollData.title = item.name
|
rollData.title = item.name
|
||||||
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(item.system.damage)
|
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(item.system.damage)
|
||||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||||
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
//await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||||
|
|
||||||
rollData.roll = myRoll
|
rollData.roll = myRoll
|
||||||
rollData.result = myRoll.total
|
rollData.result = myRoll.total
|
||||||
rollData.bodyValue = Hero6Utility.computeBodyValue(myRoll)
|
rollData.bodyValue = Hero6Utility.computeBodyValue(myRoll)
|
||||||
|
|
||||||
|
let mult
|
||||||
|
if (item.system.damageeffect == "killing") { // As per issue #11
|
||||||
|
mult = new Roll("1d3").roll({ async: false })
|
||||||
|
rollData.killingMultiplier = mult.total
|
||||||
|
rollData.stunValue = Number(myRoll.total) * (Number(mult.total) + (Number(item.system.stunx) || 0))
|
||||||
|
} else {
|
||||||
|
rollData.stunValue = myRoll.total
|
||||||
|
}
|
||||||
|
|
||||||
let msgFlavor = await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-damage-result.hbs`, rollData)
|
let msgFlavor = await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-damage-result.hbs`, rollData)
|
||||||
let msg = await rollData.roll.toMessage({
|
let msg = await rollData.roll.toMessage({
|
||||||
@ -632,6 +742,11 @@ export class Hero6Actor extends Actor {
|
|||||||
rollMode: game.settings.get("core", "rollMode"),
|
rollMode: game.settings.get("core", "rollMode"),
|
||||||
flavor: msgFlavor
|
flavor: msgFlavor
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (mult) {
|
||||||
|
await Hero6Utility.showDiceSoNice(mult, game.settings.get("core", "rollMode"))
|
||||||
|
}
|
||||||
|
|
||||||
rollData.roll = duplicate(rollData.roll) // Convert to object
|
rollData.roll = duplicate(rollData.roll) // Convert to object
|
||||||
msg.setFlag("world", "rolldata", rollData)
|
msg.setFlag("world", "rolldata", rollData)
|
||||||
console.log("Rolldata result", rollData)
|
console.log("Rolldata result", rollData)
|
||||||
@ -658,7 +773,6 @@ export class Hero6Actor extends Actor {
|
|||||||
msg.setFlag("world", "rolldata", rollData)
|
msg.setFlag("world", "rolldata", rollData)
|
||||||
console.log("Rolldata result", rollData)
|
console.log("Rolldata result", rollData)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
rollSkill(skillId) {
|
rollSkill(skillId) {
|
||||||
let skill = this.items.get(skillId)
|
let skill = this.items.get(skillId)
|
||||||
@ -683,34 +797,58 @@ export class Hero6Actor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
rollWeapon(weaponId) {
|
async rollWeapon(weaponId) {
|
||||||
let weapon = this.items.get(weaponId)
|
let weapon = this.items.get(weaponId)
|
||||||
if (weapon) {
|
if (weapon) {
|
||||||
weapon = duplicate(weapon)
|
weapon = duplicate(weapon)
|
||||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
let rollData = this.getCommonRollData()
|
||||||
if (skill) {
|
rollData.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0) + (Number(weapon.system.ocv) || 0)
|
||||||
skill = duplicate(skill)
|
rollData.subMode = "ocv"
|
||||||
Hero6Utility.updateSkill(skill)
|
rollData.mode = "weapon"
|
||||||
let abilityKey = skill.system.ability
|
rollData.item = weapon
|
||||||
let rollData = this.getCommonRollData(abilityKey)
|
rollData.img = weapon.img
|
||||||
rollData.mode = "weapon"
|
this.startRoll(rollData)
|
||||||
rollData.skill = skill
|
} else {
|
||||||
rollData.weapon = weapon
|
ui.notifications.warn("Unable to find the weapon " + weapon.name)
|
||||||
rollData.img = weapon.img
|
}
|
||||||
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
|
}
|
||||||
rollData.forceDisadvantage = this.isAttackDisadvantage()
|
/* -------------------------------------------- */
|
||||||
}
|
rollMentalManeuver(maneuverId) {
|
||||||
/*if (rollData.weapon.system.isranged && rollData.tokensDistance > Hero6Utility.getWeaponMaxRange(rollData.weapon) ) {
|
let maneuver = this.items.get(maneuverId)
|
||||||
ui.notifications.warn(`Your target is out of range of your weapon (max: ${Hero6Utility.getWeaponMaxRange(rollData.weapon)} - current : ${rollData.tokensDistance})` )
|
if (maneuver) {
|
||||||
return
|
maneuver = duplicate(maneuver)
|
||||||
}*/
|
let rollData = this.getCommonRollData()
|
||||||
this.startRoll(rollData)
|
rollData.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(maneuver.system.omcv) || 0)
|
||||||
} else {
|
rollData.mode = "mentalmaneuver"
|
||||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
rollData.item = maneuver
|
||||||
}
|
rollData.img = maneuver.img
|
||||||
|
this.startRoll(rollData)
|
||||||
|
} else {
|
||||||
|
ui.notifications.warn("Unable to find the maneuver " + maneuver.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
rollPowerAttack(powerId ) {
|
||||||
|
let power = this.items.get(powerId)
|
||||||
|
if (power) {
|
||||||
|
power = duplicate(power)
|
||||||
|
let rollData = this.getCommonRollData()
|
||||||
|
rollData.mode = "powerattack"
|
||||||
|
rollData.item = power
|
||||||
|
rollData.img = power.img
|
||||||
|
|
||||||
|
if (power.system.attackvalue == "ocv") {
|
||||||
|
rollData.item.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0) + (Number(power.system.ocv) || 0)
|
||||||
|
rollData.subMode = "ocv"
|
||||||
|
} else {
|
||||||
|
rollData.item.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(power.system.omcv) || 0)
|
||||||
|
rollData.subMode = "omcv"
|
||||||
|
}
|
||||||
|
this.startRoll(rollData)
|
||||||
|
} else {
|
||||||
|
ui.notifications.warn("Unable to find power " + power.name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async startRoll(rollData) {
|
async startRoll(rollData) {
|
||||||
let rollDialog = await Hero6RollDialog.create(this, rollData)
|
let rollDialog = await Hero6RollDialog.create(this, rollData)
|
||||||
|
@ -31,7 +31,9 @@ export class Hero6Combat extends Combat {
|
|||||||
option.condition = true;
|
option.condition = true;
|
||||||
option.icon = '<i class="far fa-question-circle"></i>';
|
option.icon = '<i class="far fa-question-circle"></i>';
|
||||||
option.callback = target => {
|
option.callback = target => {
|
||||||
Hero6Combat.holdAction(target.data('combatant-id'));
|
let id = target.data('combatant-id')
|
||||||
|
let c = game.combat.combatants.get(id)
|
||||||
|
c.actor.holdAction()
|
||||||
}
|
}
|
||||||
//newOpt = duplicate(option)
|
//newOpt = duplicate(option)
|
||||||
}
|
}
|
||||||
@ -40,13 +42,21 @@ export class Hero6Combat extends Combat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static holdAction(combatantId) {
|
holdAction(combatantId) {
|
||||||
const combatant = game.combat.combatants.get(combatantId)
|
this.rebuildInitiative()
|
||||||
combatant.actor.holdAction()
|
//console.log("Rebuilding.....")
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
abortAction(actorId, abortState) {
|
||||||
|
this.rebuildInitiative()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
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;
|
||||||
@ -68,19 +78,53 @@ export class Hero6Combat extends Combat {
|
|||||||
|
|
||||||
super.startCombat();
|
super.startCombat();
|
||||||
}
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
forceHold(actor, isHold) {
|
||||||
|
if (game.user.isGM) {
|
||||||
|
let updList = []
|
||||||
|
let c = this.combatants.find(c => c.actor._id == actor.id)
|
||||||
|
let name = actor.name + ((isHold) ? " (H)" : "")
|
||||||
|
console.log("ForceHold!!", c, actor)
|
||||||
|
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
|
||||||
|
this.updateEmbeddedDocuments("Combatant", updList)
|
||||||
|
} else {
|
||||||
|
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_hold", data: { actorId: actor.id, isHold: isHold } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
forceAbort(actor, isAbort) {
|
||||||
|
if (game.user.isGM) {
|
||||||
|
let updList = []
|
||||||
|
let c = this.combatants.find(c => c.actor._id == actor.id)
|
||||||
|
let name = actor.name + ((isAbort) ? " (A)" : "")
|
||||||
|
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
|
||||||
|
this.updateEmbeddedDocuments("Combatant", updList)
|
||||||
|
} else {
|
||||||
|
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_abort", data: { actorId: actor.id, isAbort: isAbort } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
computeInitiative(c, updList) {
|
computeInitiative(c, updList) {
|
||||||
let id = c._id || c.id
|
let id = c._id || c.id
|
||||||
if (c.actor.hasPhase(this.segmentNumber) || c.actor.getHoldAction()) {
|
let hasSegment = c.actor.hasPhase(this.segmentNumber)
|
||||||
let baseInit = c.actor ? c.actor.getBaseInit() : 0;
|
let isOnHold = c.actor.getHoldAction()
|
||||||
let name = c.actor.name
|
let isOnAbort = c.actor.getAbortAction()
|
||||||
if (c.actor.getHoldAction()) {
|
let name = c.actor.name
|
||||||
name = c.actor.name + " (H)"
|
if (hasSegment || isOnHold || isOnAbort) {
|
||||||
|
let baseInit = c.actor ? c.actor.getBaseInit(this.segmentNumber) : 0;
|
||||||
|
if (isOnHold) {
|
||||||
|
if (hasSegment) { // On hold + current segment -> auto-disable on hold
|
||||||
|
c.actor.disableHoldAction()
|
||||||
|
} else {
|
||||||
|
name = c.actor.name + " (H)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (c.actor.getAbortAction()) {
|
if (isOnAbort) {
|
||||||
name = c.actor.name + " (A)"
|
name = c.actor.name + " (A)"
|
||||||
c.actor.disableAbortAction()
|
if (c.actor.incAbortActionCount()) {
|
||||||
|
c.actor.disableAbortAction()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
updList.push({ _id: id, name: name, initiative: baseInit, holdAction: c.holdAction })
|
updList.push({ _id: id, name: name, initiative: baseInit, holdAction: c.holdAction })
|
||||||
} else {
|
} else {
|
||||||
@ -92,7 +136,6 @@ export class Hero6Combat extends Combat {
|
|||||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||||
ids = typeof ids === "string" ? [ids] : ids;
|
ids = typeof ids === "string" ? [ids] : ids;
|
||||||
|
|
||||||
console.log("Roll INIT")
|
|
||||||
let updList = []
|
let updList = []
|
||||||
for (let cId = 0; cId < ids.length; cId++) {
|
for (let cId = 0; cId < ids.length; cId++) {
|
||||||
const c = this.combatants.get(ids[cId])
|
const c = this.combatants.get(ids[cId])
|
||||||
@ -112,60 +155,144 @@ export class Hero6Combat extends Combat {
|
|||||||
for (let c of this.combatants) {
|
for (let c of this.combatants) {
|
||||||
this.computeInitiative(c, updList)
|
this.computeInitiative(c, updList)
|
||||||
}
|
}
|
||||||
console.log(this.combatants, updList)
|
|
||||||
if (updList.length > 0) {
|
if (updList.length > 0) {
|
||||||
await this.updateEmbeddedDocuments("Combatant", updList);
|
await this.updateEmbeddedDocuments("Combatant", updList);
|
||||||
|
//console.log("Rebuild INIT", updList)
|
||||||
|
for (let c of updList) {
|
||||||
|
if (c.initiative != 0) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
nextTurn() {
|
||||||
|
let nbC = this.combatants.filter(c => c.initiative > 0).length
|
||||||
|
//console.log("Next turn called....", this.turn, nbC)
|
||||||
|
if (this.turn < nbC - 1) {
|
||||||
|
super.nextTurn()
|
||||||
|
} else {
|
||||||
|
this.nextRound()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
nextRound() {
|
async previousRound() {
|
||||||
|
let hasCombatants = false
|
||||||
|
let nextRound = this.round
|
||||||
|
let advanceTime = 0
|
||||||
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
|
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
|
||||||
if (this.settings.skipDefeated && (turn !== null)) {
|
let turnData = this.getFlag("world", "turnData")
|
||||||
turn = this.turns.findIndex(t => !t.isDefeated);
|
|
||||||
if (turn === -1) {
|
//console.log("Next round called....", nextRound, turnData)
|
||||||
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
|
while (!hasCombatants) {
|
||||||
turn = 0;
|
if (this.settings.skipDefeated && (turn !== null)) {
|
||||||
|
turn = this.turns.findIndex(t => !t.isDefeated);
|
||||||
|
if (turn === -1) {
|
||||||
|
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
|
||||||
|
turn = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
advanceTime = -1 * (Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime);
|
||||||
|
advanceTime -= CONFIG.time.roundTime;
|
||||||
|
nextRound = nextRound -1
|
||||||
|
//console.log("Next round called....2", nextRound, turnData)
|
||||||
|
turnData = this.getFlag("world", "turnData")
|
||||||
|
if (!turnData) {
|
||||||
|
turnData = { turnNumber: 0, segmentNumber: 12 }
|
||||||
|
this.setFlag("world", "turnData", turnData)
|
||||||
}
|
}
|
||||||
}
|
turnData = duplicate(turnData)
|
||||||
let advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime;
|
turnData.segmentNumber -= 1
|
||||||
advanceTime += CONFIG.time.roundTime;
|
if (turnData.segmentNumber <= 0) {
|
||||||
let nextRound = this.round + 1;
|
turnData.segmentNumber = 12
|
||||||
|
turnData.turnNumber--
|
||||||
|
}
|
||||||
|
await this.setFlag("world", "turnData", turnData)
|
||||||
|
this.turnNumber = turnData.turnNumber;
|
||||||
|
this.segmentNumber = turnData.segmentNumber;
|
||||||
|
//console.log("Next round called....3", nextRound, turnData)
|
||||||
|
|
||||||
let turnData = this.getFlag("world", "hero6-turn-data")
|
// Re-compute init of actors
|
||||||
if (!turnData) {
|
hasCombatants = await this.rebuildInitiative()
|
||||||
turnData = { turnNumber: 0, segmentNumber: 12 }
|
//console.log("Going round....", nextRound, hasCombatants)
|
||||||
this.setFlag("world", "hero6-turn-data", turnData)
|
|
||||||
}
|
}
|
||||||
turnData = duplicate(turnData)
|
|
||||||
turnData.segmentNumber += 1
|
|
||||||
if (turnData.segmentNumber > 12) {
|
|
||||||
turnData.segmentNumber = 1
|
|
||||||
turnData.turnNumber++
|
|
||||||
}
|
|
||||||
this.setFlag("world", "hero6-turn-data", turnData)
|
|
||||||
this.turnNumber = turnData.turnNumber;
|
|
||||||
this.segmentNumber = turnData.segmentNumber;
|
|
||||||
|
|
||||||
// Re-compute init of actors
|
|
||||||
this.rebuildInitiative()
|
|
||||||
|
|
||||||
// Update the document, passing data through a hook first
|
// Update the document, passing data through a hook first
|
||||||
const updateData = { round: nextRound, turn, segmentNumber: turnData.segmentNumber, turnNumber: turnData.turnNumber };
|
const updateData = { round: nextRound, turn };
|
||||||
|
const updateOptions = { advanceTime, direction: -1 };
|
||||||
|
Hooks.callAll("combatRound", this, updateData, updateOptions);
|
||||||
|
console.log(this)
|
||||||
|
return this.update(updateData, updateOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async nextRound() {
|
||||||
|
let hasCombatants = false
|
||||||
|
let nextRound = this.round
|
||||||
|
let advanceTime = 0
|
||||||
|
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
|
||||||
|
let turnData = this.getFlag("world", "turnData")
|
||||||
|
|
||||||
|
//console.log("Next round called....", nextRound, turnData)
|
||||||
|
while (!hasCombatants) {
|
||||||
|
if (this.settings.skipDefeated && (turn !== null)) {
|
||||||
|
turn = this.turns.findIndex(t => !t.isDefeated);
|
||||||
|
if (turn === -1) {
|
||||||
|
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
|
||||||
|
turn = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime;
|
||||||
|
advanceTime += CONFIG.time.roundTime;
|
||||||
|
nextRound = nextRound + 1;
|
||||||
|
//console.log("Next round called....2", nextRound, turnData)
|
||||||
|
turnData = this.getFlag("world", "turnData")
|
||||||
|
if (!turnData) {
|
||||||
|
turnData = { turnNumber: 0, segmentNumber: 12 }
|
||||||
|
this.setFlag("world", "turnData", turnData)
|
||||||
|
}
|
||||||
|
turnData = duplicate(turnData)
|
||||||
|
turnData.segmentNumber += 1
|
||||||
|
if (turnData.segmentNumber > 12) {
|
||||||
|
turnData.segmentNumber = 1
|
||||||
|
turnData.turnNumber++
|
||||||
|
ChatMessage.create({
|
||||||
|
content: "Complete Post-Segment 12 Recoveries."
|
||||||
|
})
|
||||||
|
}
|
||||||
|
await this.setFlag("world", "turnData", turnData)
|
||||||
|
this.turnNumber = turnData.turnNumber;
|
||||||
|
this.segmentNumber = turnData.segmentNumber;
|
||||||
|
//console.log("Next round called....3", nextRound, turnData)
|
||||||
|
|
||||||
|
// Re-compute init of actors
|
||||||
|
hasCombatants = await this.rebuildInitiative()
|
||||||
|
//console.log("Going round....", nextRound, hasCombatants)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the document, passing data through a hook first
|
||||||
|
const updateData = { round: nextRound, turn };
|
||||||
const updateOptions = { advanceTime, direction: 1 };
|
const updateOptions = { advanceTime, direction: 1 };
|
||||||
Hooks.callAll("combatRound", this, updateData, updateOptions);
|
Hooks.callAll("combatRound", this, updateData, updateOptions);
|
||||||
|
console.log(this)
|
||||||
return this.update(updateData, updateOptions);
|
return this.update(updateData, updateOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _onCreateEmbeddedDocuments(type, documents, result, options, userId) {
|
async _onCreateDescendantDocuments(type, documents, result, options, userId) {
|
||||||
super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
|
//console.log("Added...")
|
||||||
|
if (game.user.isGM) {
|
||||||
|
await super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
|
||||||
|
await this.rebuildInitiative()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
/* --------------------------------------------
|
||||||
/* -------------------------------------------- */
|
|
||||||
_onUpdate(changed, options, userId) {
|
_onUpdate(changed, options, userId) {
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async checkTurnPosition() {
|
static async checkTurnPosition() {
|
||||||
|
@ -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",
|
||||||
@ -53,6 +65,5 @@ export const Hero6_CONFIG = {
|
|||||||
"standard": "Standard",
|
"standard": "Standard",
|
||||||
"normal": "Normal",
|
"normal": "Normal",
|
||||||
"killing": "Killing",
|
"killing": "Killing",
|
||||||
"countbody": "Killing (Count BODY)"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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 => {
|
||||||
|
@ -41,7 +41,7 @@ Hooks.once("init", async function () {
|
|||||||
// Set an initiative formula for the system
|
// Set an initiative formula for the system
|
||||||
CONFIG.Combat.initiative = {
|
CONFIG.Combat.initiative = {
|
||||||
formula: "1d6",
|
formula: "1d6",
|
||||||
decimals: 3
|
decimals: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ------------------------------- ------------- */
|
/* ------------------------------- ------------- */
|
||||||
@ -61,7 +61,7 @@ Hooks.once("init", async function () {
|
|||||||
// Register sheet application classes
|
// Register sheet application classes
|
||||||
Actors.unregisterSheet("core", ActorSheet);
|
Actors.unregisterSheet("core", ActorSheet);
|
||||||
Actors.registerSheet("fvtt-hero-system-6", Hero6ActorSheet, { types: ["character"], makeDefault: true });
|
Actors.registerSheet("fvtt-hero-system-6", Hero6ActorSheet, { types: ["character"], makeDefault: true });
|
||||||
Actors.registerSheet("fvtt-hero-system-6", Hero6NPCSheet, { types: ["npc"], makeDefault: false });
|
Actors.registerSheet("fvtt-hero-system-6", Hero6ActorSheet, { types: ["minion"], makeDefault: false });
|
||||||
|
|
||||||
Items.unregisterSheet("core", ItemSheet);
|
Items.unregisterSheet("core", ItemSheet);
|
||||||
Items.registerSheet("fvtt-hero-system-6", Hero6ItemSheet, { makeDefault: true });
|
Items.registerSheet("fvtt-hero-system-6", Hero6ItemSheet, { makeDefault: true });
|
||||||
@ -75,7 +75,7 @@ function welcomeMessage() {
|
|||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
whisper: [game.user.id],
|
whisper: [game.user.id],
|
||||||
content: `<div id="welcome-message-dark-stars"><span class="rdd-roll-part">
|
content: `<div id="welcome-message-dark-stars"><span class="rdd-roll-part">
|
||||||
<strong>Welcome to the Hero6 RPG.</strong>
|
<strong>Welcome to Hero System 6E RPG.</strong>
|
||||||
` });
|
` });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ export class Hero6RollDialog extends Dialog {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async create(actor, rollData) {
|
static async create(actor, rollData) {
|
||||||
|
|
||||||
let options = { classes: ["Hero6Dialog"], width: 460, height: 'fit-content', 'z-index': 99999 };
|
let options = { classes: ["Hero6Dialog"], width: 320, height: 'fit-content', 'z-index': 99999 };
|
||||||
let html = await renderTemplate('systems/fvtt-hero-system-6/templates/apps/roll-dialog-generic.hbs', rollData);
|
let html = await renderTemplate('systems/fvtt-hero-system-6/templates/apps/roll-dialog-generic.hbs', rollData);
|
||||||
|
|
||||||
return new Hero6RollDialog(actor, rollData, html, options);
|
return new Hero6RollDialog(actor, rollData, html, options);
|
||||||
@ -14,7 +14,7 @@ export class Hero6RollDialog extends Dialog {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
constructor(actor, rollData, html, options, close = undefined) {
|
constructor(actor, rollData, html, options, close = undefined) {
|
||||||
let conf = {
|
let conf = {
|
||||||
title: (rollData.mode == "skill") ? "Skill" : "Attribute",
|
title: "Roll window",
|
||||||
content: html,
|
content: html,
|
||||||
buttons: {
|
buttons: {
|
||||||
roll: {
|
roll: {
|
||||||
|
@ -43,6 +43,9 @@ export class Hero6Utility {
|
|||||||
Handlebars.registerHelper('mul', function (a, b) {
|
Handlebars.registerHelper('mul', function (a, b) {
|
||||||
return Number(a) * Number(b);
|
return Number(a) * Number(b);
|
||||||
})
|
})
|
||||||
|
Handlebars.registerHelper('add', function (a, b) {
|
||||||
|
return (Number(a) || 0) + (Number(b) || 0);
|
||||||
|
})
|
||||||
Handlebars.registerHelper('locationLabel', function (key) {
|
Handlebars.registerHelper('locationLabel', function (key) {
|
||||||
return __locationNames[key]
|
return __locationNames[key]
|
||||||
})
|
})
|
||||||
@ -52,6 +55,9 @@ export class Hero6Utility {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
Handlebars.registerHelper('fixNum', function (value) {
|
||||||
|
return Number(value) || 0
|
||||||
|
})
|
||||||
Handlebars.registerHelper('checkInit', function (value) {
|
Handlebars.registerHelper('checkInit', function (value) {
|
||||||
let myValue = Number(value) || 0
|
let myValue = Number(value) || 0
|
||||||
return myValue > 0
|
return myValue > 0
|
||||||
@ -124,6 +130,10 @@ export class Hero6Utility {
|
|||||||
const rollTables = await Hero6Utility.loadCompendium("fvtt-hero-system-6.rolltables")
|
const rollTables = await Hero6Utility.loadCompendium("fvtt-hero-system-6.rolltables")
|
||||||
this.rollTables = rollTables.map(i => i.toObject())
|
this.rollTables = rollTables.map(i => i.toObject())
|
||||||
|
|
||||||
|
for (let actor of game.actors) {
|
||||||
|
actor.performMigration()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -159,6 +169,7 @@ export class Hero6Utility {
|
|||||||
'systems/fvtt-hero-system-6/templates/partials/partial-options-abilities.hbs',
|
'systems/fvtt-hero-system-6/templates/partials/partial-options-abilities.hbs',
|
||||||
'systems/fvtt-hero-system-6/templates/partials/partial-item-nav.hbs',
|
'systems/fvtt-hero-system-6/templates/partials/partial-item-nav.hbs',
|
||||||
'systems/fvtt-hero-system-6/templates/partials/partial-item-description.hbs',
|
'systems/fvtt-hero-system-6/templates/partials/partial-item-description.hbs',
|
||||||
|
'systems/fvtt-hero-system-6/templates/partials/partial-item-notes.hbs',
|
||||||
'systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment.hbs',
|
'systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment.hbs',
|
||||||
'systems/fvtt-hero-system-6/templates/partials/partial-item-cost.hbs',
|
'systems/fvtt-hero-system-6/templates/partials/partial-item-cost.hbs',
|
||||||
'systems/fvtt-hero-system-6/templates/partials/partial-power-equipment-cost.hbs',
|
'systems/fvtt-hero-system-6/templates/partials/partial-power-equipment-cost.hbs',
|
||||||
@ -230,12 +241,21 @@ export class Hero6Utility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async onSocketMesssage(msg) {
|
static async onSocketMesssage(msg) {
|
||||||
console.log("SOCKET MESSAGE", msg.name)
|
console.log("SOCKET MESSAGE", msg.name, msg)
|
||||||
if (msg.name == "msg_update_roll") {
|
if (msg.name == "msg_update_roll") {
|
||||||
this.updateRollData(msg.data)
|
this.updateRollData(msg.data)
|
||||||
}
|
}
|
||||||
if (msg.name == "msg_gm_process_attack_defense") {
|
if (msg.name == "msg_force_hold") {
|
||||||
this.processSuccessResult(msg.data)
|
if (game.user.isGM) {
|
||||||
|
let actor = game.actors.get(msg.data.actorId)
|
||||||
|
game.combat.forceHold(actor, msg.data.isHold)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (msg.name == "msg_force_abort") {
|
||||||
|
if (game.user.isGM) {
|
||||||
|
let actor = game.actors.get(msg.data.actorId)
|
||||||
|
game.combat.forceAbort(actor, msg.data.isAbort)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (msg.name == "msg_gm_item_drop" && game.user.isGM) {
|
if (msg.name == "msg_gm_item_drop" && game.user.isGM) {
|
||||||
let actor = game.actors.get(msg.data.actorId)
|
let actor = game.actors.get(msg.data.actorId)
|
||||||
@ -329,6 +349,7 @@ export class Hero6Utility {
|
|||||||
// ability/save/size => 0
|
// ability/save/size => 0
|
||||||
let diceFormula = "3d6"
|
let diceFormula = "3d6"
|
||||||
let target = 10
|
let target = 10
|
||||||
|
|
||||||
if (rollData.charac) {
|
if (rollData.charac) {
|
||||||
target = rollData.charac.roll
|
target = rollData.charac.roll
|
||||||
}
|
}
|
||||||
@ -338,11 +359,11 @@ export class Hero6Utility {
|
|||||||
target += rollData.bonusMalus
|
target += rollData.bonusMalus
|
||||||
|
|
||||||
// Performs roll
|
// Performs roll
|
||||||
console.log("Roll formula", diceFormula)
|
//console.log("Roll formula", diceFormula)
|
||||||
let myRoll = rollData.roll
|
let myRoll = rollData.roll
|
||||||
if (!myRoll) { // New rolls only of no rerolls
|
if (!myRoll) { // New rolls only of no rerolls
|
||||||
myRoll = new Roll(diceFormula).roll({ async: false })
|
myRoll = new Roll(diceFormula).roll({ async: false })
|
||||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
//await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||||
}
|
}
|
||||||
|
|
||||||
rollData.roll = myRoll
|
rollData.roll = myRoll
|
||||||
@ -353,6 +374,7 @@ export class Hero6Utility {
|
|||||||
if (rollData.result <= target) {
|
if (rollData.result <= target) {
|
||||||
rollData.isSuccess = true
|
rollData.isSuccess = true
|
||||||
}
|
}
|
||||||
|
//console.log("Roll result", rollData)
|
||||||
if (myRoll.terms[0].total == 3) { // Always a success
|
if (myRoll.terms[0].total == 3) { // Always a success
|
||||||
rollData.isSuccess = true
|
rollData.isSuccess = true
|
||||||
}
|
}
|
||||||
|
BIN
packs/complications/000009.ldb
Normal file
BIN
packs/complications/000009.ldb
Normal file
Binary file not shown.
1
packs/complications/CURRENT
Normal file
1
packs/complications/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000164
|
0
packs/complications/LOCK
Normal file
0
packs/complications/LOCK
Normal file
8
packs/complications/LOG
Normal file
8
packs/complications/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-20:10:47.117841 7fa55e7fc6c0 Recovering log #162
|
||||||
|
2023/08/30-20:10:47.323059 7fa55e7fc6c0 Delete type=3 #160
|
||||||
|
2023/08/30-20:10:47.323156 7fa55e7fc6c0 Delete type=0 #162
|
||||||
|
2023/08/30-20:19:02.780276 7fa55d3ff6c0 Level-0 table #167: started
|
||||||
|
2023/08/30-20:19:02.780299 7fa55d3ff6c0 Level-0 table #167: 0 bytes OK
|
||||||
|
2023/08/30-20:19:02.786823 7fa55d3ff6c0 Delete type=0 #165
|
||||||
|
2023/08/30-20:19:02.807165 7fa55d3ff6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-20:19:02.807232 7fa55d3ff6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
8
packs/complications/LOG.old
Normal file
8
packs/complications/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-17:17:42.658402 7fa55e7fc6c0 Recovering log #158
|
||||||
|
2023/08/30-17:17:42.678153 7fa55e7fc6c0 Delete type=3 #156
|
||||||
|
2023/08/30-17:17:42.678218 7fa55e7fc6c0 Delete type=0 #158
|
||||||
|
2023/08/30-17:20:34.680709 7fa55d3ff6c0 Level-0 table #163: started
|
||||||
|
2023/08/30-17:20:34.680731 7fa55d3ff6c0 Level-0 table #163: 0 bytes OK
|
||||||
|
2023/08/30-17:20:34.687119 7fa55d3ff6c0 Delete type=0 #161
|
||||||
|
2023/08/30-17:20:34.693978 7fa55d3ff6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-17:20:34.706140 7fa55d3ff6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
BIN
packs/complications/MANIFEST-000164
Normal file
BIN
packs/complications/MANIFEST-000164
Normal file
Binary file not shown.
BIN
packs/equipment/000099.ldb
Normal file
BIN
packs/equipment/000099.ldb
Normal file
Binary file not shown.
0
packs/equipment/000168.log
Normal file
0
packs/equipment/000168.log
Normal file
1
packs/equipment/CURRENT
Normal file
1
packs/equipment/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000166
|
0
packs/equipment/LOCK
Normal file
0
packs/equipment/LOCK
Normal file
8
packs/equipment/LOG
Normal file
8
packs/equipment/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-20:10:46.913567 7fa55effd6c0 Recovering log #164
|
||||||
|
2023/08/30-20:10:47.085816 7fa55effd6c0 Delete type=3 #162
|
||||||
|
2023/08/30-20:10:47.085887 7fa55effd6c0 Delete type=0 #164
|
||||||
|
2023/08/30-20:19:02.772964 7fa55d3ff6c0 Level-0 table #169: started
|
||||||
|
2023/08/30-20:19:02.773053 7fa55d3ff6c0 Level-0 table #169: 0 bytes OK
|
||||||
|
2023/08/30-20:19:02.779629 7fa55d3ff6c0 Delete type=0 #167
|
||||||
|
2023/08/30-20:19:02.780116 7fa55d3ff6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-20:19:02.780129 7fa55d3ff6c0 Manual compaction at level-1 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
|
8
packs/equipment/LOG.old
Normal file
8
packs/equipment/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-17:17:42.644053 7fa55f7fe6c0 Recovering log #160
|
||||||
|
2023/08/30-17:17:42.654259 7fa55f7fe6c0 Delete type=3 #158
|
||||||
|
2023/08/30-17:17:42.654538 7fa55f7fe6c0 Delete type=0 #160
|
||||||
|
2023/08/30-17:20:34.652977 7fa55d3ff6c0 Level-0 table #165: started
|
||||||
|
2023/08/30-17:20:34.653019 7fa55d3ff6c0 Level-0 table #165: 0 bytes OK
|
||||||
|
2023/08/30-17:20:34.659536 7fa55d3ff6c0 Delete type=0 #163
|
||||||
|
2023/08/30-17:20:34.659715 7fa55d3ff6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-17:20:34.659733 7fa55d3ff6c0 Manual compaction at level-1 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
|
BIN
packs/equipment/MANIFEST-000166
Normal file
BIN
packs/equipment/MANIFEST-000166
Normal file
Binary file not shown.
BIN
packs/maneuvers/000129.ldb
Normal file
BIN
packs/maneuvers/000129.ldb
Normal file
Binary file not shown.
0
packs/maneuvers/000160.log
Normal file
0
packs/maneuvers/000160.log
Normal file
1
packs/maneuvers/CURRENT
Normal file
1
packs/maneuvers/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000158
|
0
packs/maneuvers/LOCK
Normal file
0
packs/maneuvers/LOCK
Normal file
8
packs/maneuvers/LOG
Normal file
8
packs/maneuvers/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-20:10:47.287095 7fa55f7fe6c0 Recovering log #156
|
||||||
|
2023/08/30-20:10:47.496255 7fa55f7fe6c0 Delete type=3 #154
|
||||||
|
2023/08/30-20:10:47.496306 7fa55f7fe6c0 Delete type=0 #156
|
||||||
|
2023/08/30-20:19:02.786933 7fa55d3ff6c0 Level-0 table #161: started
|
||||||
|
2023/08/30-20:19:02.786958 7fa55d3ff6c0 Level-0 table #161: 0 bytes OK
|
||||||
|
2023/08/30-20:19:02.793209 7fa55d3ff6c0 Delete type=0 #159
|
||||||
|
2023/08/30-20:19:02.807175 7fa55d3ff6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-20:19:02.807218 7fa55d3ff6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
8
packs/maneuvers/LOG.old
Normal file
8
packs/maneuvers/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-17:17:42.680473 7fa55effd6c0 Recovering log #152
|
||||||
|
2023/08/30-17:17:42.696562 7fa55effd6c0 Delete type=3 #150
|
||||||
|
2023/08/30-17:17:42.696621 7fa55effd6c0 Delete type=0 #152
|
||||||
|
2023/08/30-17:20:34.706161 7fa55d3ff6c0 Level-0 table #157: started
|
||||||
|
2023/08/30-17:20:34.706183 7fa55d3ff6c0 Level-0 table #157: 0 bytes OK
|
||||||
|
2023/08/30-17:20:34.712608 7fa55d3ff6c0 Delete type=0 #155
|
||||||
|
2023/08/30-17:20:34.726643 7fa55d3ff6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-17:20:34.726673 7fa55d3ff6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
BIN
packs/maneuvers/MANIFEST-000158
Normal file
BIN
packs/maneuvers/MANIFEST-000158
Normal file
Binary file not shown.
BIN
packs/perks/000005.ldb
Normal file
BIN
packs/perks/000005.ldb
Normal file
Binary file not shown.
0
packs/perks/000166.log
Normal file
0
packs/perks/000166.log
Normal file
1
packs/perks/CURRENT
Normal file
1
packs/perks/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000164
|
0
packs/perks/LOCK
Normal file
0
packs/perks/LOCK
Normal file
8
packs/perks/LOG
Normal file
8
packs/perks/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-20:10:47.325002 7fa55effd6c0 Recovering log #162
|
||||||
|
2023/08/30-20:10:47.532075 7fa55effd6c0 Delete type=3 #160
|
||||||
|
2023/08/30-20:10:47.532180 7fa55effd6c0 Delete type=0 #162
|
||||||
|
2023/08/30-20:19:02.800848 7fa55d3ff6c0 Level-0 table #167: started
|
||||||
|
2023/08/30-20:19:02.800897 7fa55d3ff6c0 Level-0 table #167: 0 bytes OK
|
||||||
|
2023/08/30-20:19:02.807064 7fa55d3ff6c0 Delete type=0 #165
|
||||||
|
2023/08/30-20:19:02.807205 7fa55d3ff6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-20:19:02.807225 7fa55d3ff6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
8
packs/perks/LOG.old
Normal file
8
packs/perks/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-17:17:42.680933 7fa55dffb6c0 Recovering log #158
|
||||||
|
2023/08/30-17:17:42.699576 7fa55dffb6c0 Delete type=3 #156
|
||||||
|
2023/08/30-17:17:42.699635 7fa55dffb6c0 Delete type=0 #158
|
||||||
|
2023/08/30-17:20:34.719643 7fa55d3ff6c0 Level-0 table #163: started
|
||||||
|
2023/08/30-17:20:34.719703 7fa55d3ff6c0 Level-0 table #163: 0 bytes OK
|
||||||
|
2023/08/30-17:20:34.726540 7fa55d3ff6c0 Delete type=0 #161
|
||||||
|
2023/08/30-17:20:34.726665 7fa55d3ff6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-17:20:34.726679 7fa55d3ff6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
BIN
packs/perks/MANIFEST-000164
Normal file
BIN
packs/perks/MANIFEST-000164
Normal file
Binary file not shown.
BIN
packs/powers/000165.ldb
Normal file
BIN
packs/powers/000165.ldb
Normal file
Binary file not shown.
0
packs/powers/000168.log
Normal file
0
packs/powers/000168.log
Normal file
1
packs/powers/CURRENT
Normal file
1
packs/powers/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000166
|
0
packs/powers/LOCK
Normal file
0
packs/powers/LOCK
Normal file
8
packs/powers/LOG
Normal file
8
packs/powers/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-20:10:47.089737 7fa55dffb6c0 Recovering log #163
|
||||||
|
2023/08/30-20:10:47.283952 7fa55dffb6c0 Delete type=3 #161
|
||||||
|
2023/08/30-20:10:47.284018 7fa55dffb6c0 Delete type=0 #163
|
||||||
|
2023/08/30-20:19:02.793322 7fa55d3ff6c0 Level-0 table #169: started
|
||||||
|
2023/08/30-20:19:02.793349 7fa55d3ff6c0 Level-0 table #169: 0 bytes OK
|
||||||
|
2023/08/30-20:19:02.800604 7fa55d3ff6c0 Delete type=0 #167
|
||||||
|
2023/08/30-20:19:02.807184 7fa55d3ff6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-20:19:02.807212 7fa55d3ff6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
15
packs/powers/LOG.old
Normal file
15
packs/powers/LOG.old
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
2023/08/30-17:17:42.658365 7fa55effd6c0 Recovering log #159
|
||||||
|
2023/08/30-17:17:42.675069 7fa55effd6c0 Delete type=3 #157
|
||||||
|
2023/08/30-17:17:42.675219 7fa55effd6c0 Delete type=0 #159
|
||||||
|
2023/08/30-17:20:34.670106 7fa55d3ff6c0 Level-0 table #164: started
|
||||||
|
2023/08/30-17:20:34.673725 7fa55d3ff6c0 Level-0 table #164: 18207 bytes OK
|
||||||
|
2023/08/30-17:20:34.680563 7fa55d3ff6c0 Delete type=0 #162
|
||||||
|
2023/08/30-17:20:34.693950 7fa55d3ff6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-17:20:34.694048 7fa55d3ff6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at '!items!zpF2QY4tx7qdBomQ' @ 109 : 1
|
||||||
|
2023/08/30-17:20:34.694069 7fa55d3ff6c0 Compacting 1@1 + 1@2 files
|
||||||
|
2023/08/30-17:20:34.699691 7fa55d3ff6c0 Generated table #165@1: 51 keys, 68929 bytes
|
||||||
|
2023/08/30-17:20:34.699708 7fa55d3ff6c0 Compacted 1@1 + 1@2 files => 68929 bytes
|
||||||
|
2023/08/30-17:20:34.705867 7fa55d3ff6c0 compacted to: files[ 0 0 1 0 0 0 0 ]
|
||||||
|
2023/08/30-17:20:34.705956 7fa55d3ff6c0 Delete type=2 #62
|
||||||
|
2023/08/30-17:20:34.706078 7fa55d3ff6c0 Delete type=2 #164
|
||||||
|
2023/08/30-17:20:34.712776 7fa55d3ff6c0 Manual compaction at level-1 from '!items!zpF2QY4tx7qdBomQ' @ 109 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
BIN
packs/powers/MANIFEST-000166
Normal file
BIN
packs/powers/MANIFEST-000166
Normal file
Binary file not shown.
BIN
packs/skills/000005.ldb
Normal file
BIN
packs/skills/000005.ldb
Normal file
Binary file not shown.
0
packs/skills/000168.log
Normal file
0
packs/skills/000168.log
Normal file
1
packs/skills/CURRENT
Normal file
1
packs/skills/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000166
|
0
packs/skills/LOCK
Normal file
0
packs/skills/LOCK
Normal file
8
packs/skills/LOG
Normal file
8
packs/skills/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-20:10:46.913667 7fa55f7fe6c0 Recovering log #164
|
||||||
|
2023/08/30-20:10:47.114760 7fa55f7fe6c0 Delete type=3 #162
|
||||||
|
2023/08/30-20:10:47.114894 7fa55f7fe6c0 Delete type=0 #164
|
||||||
|
2023/08/30-20:19:02.757545 7fa55d3ff6c0 Level-0 table #169: started
|
||||||
|
2023/08/30-20:19:02.757594 7fa55d3ff6c0 Level-0 table #169: 0 bytes OK
|
||||||
|
2023/08/30-20:19:02.765676 7fa55d3ff6c0 Delete type=0 #167
|
||||||
|
2023/08/30-20:19:02.780087 7fa55d3ff6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-20:19:02.780123 7fa55d3ff6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
8
packs/skills/LOG.old
Normal file
8
packs/skills/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-17:17:42.644052 7fa55e7fc6c0 Recovering log #160
|
||||||
|
2023/08/30-17:17:42.654264 7fa55e7fc6c0 Delete type=3 #158
|
||||||
|
2023/08/30-17:17:42.654371 7fa55e7fc6c0 Delete type=0 #160
|
||||||
|
2023/08/30-17:20:34.687213 7fa55d3ff6c0 Level-0 table #165: started
|
||||||
|
2023/08/30-17:20:34.687246 7fa55d3ff6c0 Level-0 table #165: 0 bytes OK
|
||||||
|
2023/08/30-17:20:34.693666 7fa55d3ff6c0 Delete type=0 #163
|
||||||
|
2023/08/30-17:20:34.694011 7fa55d3ff6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-17:20:34.706151 7fa55d3ff6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
BIN
packs/skills/MANIFEST-000166
Normal file
BIN
packs/skills/MANIFEST-000166
Normal file
Binary file not shown.
BIN
packs/talents/000005.ldb
Normal file
BIN
packs/talents/000005.ldb
Normal file
Binary file not shown.
0
packs/talents/000166.log
Normal file
0
packs/talents/000166.log
Normal file
1
packs/talents/CURRENT
Normal file
1
packs/talents/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000164
|
0
packs/talents/LOCK
Normal file
0
packs/talents/LOCK
Normal file
8
packs/talents/LOG
Normal file
8
packs/talents/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-20:10:47.498427 7fa55dffb6c0 Recovering log #162
|
||||||
|
2023/08/30-20:10:47.619622 7fa55dffb6c0 Delete type=3 #160
|
||||||
|
2023/08/30-20:10:47.619685 7fa55dffb6c0 Delete type=0 #162
|
||||||
|
2023/08/30-20:19:02.807339 7fa55d3ff6c0 Level-0 table #167: started
|
||||||
|
2023/08/30-20:19:02.807359 7fa55d3ff6c0 Level-0 table #167: 0 bytes OK
|
||||||
|
2023/08/30-20:19:02.814782 7fa55d3ff6c0 Delete type=0 #165
|
||||||
|
2023/08/30-20:19:02.814992 7fa55d3ff6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-20:19:02.815017 7fa55d3ff6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
8
packs/talents/LOG.old
Normal file
8
packs/talents/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/30-17:17:42.701619 7fa55dffb6c0 Recovering log #158
|
||||||
|
2023/08/30-17:17:42.712665 7fa55dffb6c0 Delete type=3 #156
|
||||||
|
2023/08/30-17:17:42.712739 7fa55dffb6c0 Delete type=0 #158
|
||||||
|
2023/08/30-17:20:34.712796 7fa55d3ff6c0 Level-0 table #163: started
|
||||||
|
2023/08/30-17:20:34.712855 7fa55d3ff6c0 Level-0 table #163: 0 bytes OK
|
||||||
|
2023/08/30-17:20:34.719473 7fa55d3ff6c0 Delete type=0 #161
|
||||||
|
2023/08/30-17:20:34.726655 7fa55d3ff6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/30-17:20:34.726714 7fa55d3ff6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
BIN
packs/talents/MANIFEST-000164
Normal file
BIN
packs/talents/MANIFEST-000164
Normal file
Binary file not shown.
0
packs/weapons/000088.log
Normal file
0
packs/weapons/000088.log
Normal file
1
packs/weapons/CURRENT
Normal file
1
packs/weapons/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000086
|
0
packs/weapons/LOCK
Normal file
0
packs/weapons/LOCK
Normal file
7
packs/weapons/LOG
Normal file
7
packs/weapons/LOG
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
2023/08/24-15:57:43.392826 7fab4affd6c0 Recovering log #84
|
||||||
|
2023/08/24-15:57:43.403060 7fab4affd6c0 Delete type=3 #82
|
||||||
|
2023/08/24-15:57:43.403157 7fab4affd6c0 Delete type=0 #84
|
||||||
|
2023/08/24-15:59:11.995583 7fab497fa6c0 Level-0 table #89: started
|
||||||
|
2023/08/24-15:59:11.995614 7fab497fa6c0 Level-0 table #89: 0 bytes OK
|
||||||
|
2023/08/24-15:59:12.004480 7fab497fa6c0 Delete type=0 #87
|
||||||
|
2023/08/24-15:59:12.025495 7fab497fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
7
packs/weapons/LOG.old
Normal file
7
packs/weapons/LOG.old
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
2023/08/24-15:09:37.452353 7fab4b7fe6c0 Recovering log #80
|
||||||
|
2023/08/24-15:09:37.462595 7fab4b7fe6c0 Delete type=3 #78
|
||||||
|
2023/08/24-15:09:37.462673 7fab4b7fe6c0 Delete type=0 #80
|
||||||
|
2023/08/24-15:56:20.976153 7fab497fa6c0 Level-0 table #85: started
|
||||||
|
2023/08/24-15:56:20.976179 7fab497fa6c0 Level-0 table #85: 0 bytes OK
|
||||||
|
2023/08/24-15:56:20.984268 7fab497fa6c0 Delete type=0 #83
|
||||||
|
2023/08/24-15:56:20.984458 7fab497fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
BIN
packs/weapons/MANIFEST-000086
Normal file
BIN
packs/weapons/MANIFEST-000086
Normal file
Binary file not shown.
@ -63,6 +63,10 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app.sidebar-popout .window-content {
|
||||||
|
color: rgba(4, 44, 44, 0.98);
|
||||||
|
}
|
||||||
|
|
||||||
.window-header{
|
.window-header{
|
||||||
background: rgba(0,0,0,0.75);
|
background: rgba(0,0,0,0.75);
|
||||||
}
|
}
|
||||||
@ -70,13 +74,13 @@
|
|||||||
color: rgba(224, 208, 197, 0.9);
|
color: rgba(224, 208, 197, 0.9);
|
||||||
}
|
}
|
||||||
.dialog-content, .dialog-buttons, .form-fields {
|
.dialog-content, .dialog-buttons, .form-fields {
|
||||||
color: rgba(224, 208, 197, 0.9);
|
color: rgba(4, 44, 44, 0.98);
|
||||||
}
|
}
|
||||||
.dialog-buttons {
|
.dialog-buttons {
|
||||||
color: rgba(224, 208, 197, 0.9);
|
color: rgba(224, 208, 197, 0.9);
|
||||||
}
|
}
|
||||||
.dialog .dialog-buttons button.default {
|
.dialog .dialog-buttons button.default {
|
||||||
color: rgba(224, 208, 197, 0.9);
|
color: rgba(4, 44, 44, 0.98);
|
||||||
}
|
}
|
||||||
.window-app.sheet .window-content {
|
.window-app.sheet .window-content {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@ -645,6 +649,11 @@ ul, li {
|
|||||||
align-content: center;
|
align-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.content-center {
|
||||||
|
align-content: center;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
.attribut-value,
|
.attribut-value,
|
||||||
.carac-value {
|
.carac-value {
|
||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
@ -812,10 +821,13 @@ ul, li {
|
|||||||
.roll-dialog-header {
|
.roll-dialog-header {
|
||||||
height: 52px;
|
height: 52px;
|
||||||
}
|
}
|
||||||
|
.dialog-roll-title {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
.actor-icon {
|
.actor-icon {
|
||||||
float: left;
|
float: left;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
|
max-width: 48px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
padding: 2px 6px 2px 2px;
|
padding: 2px 6px 2px 2px;
|
||||||
}
|
}
|
||||||
@ -1035,6 +1047,31 @@ ul, li {
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chat-card-small-button {
|
||||||
|
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||||
|
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||||
|
background-color: #7d5d3b00;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px ridge #846109;
|
||||||
|
display: inline-block;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
text-decoration: none;
|
||||||
|
text-shadow: 0px 1px 0px #4d3534;
|
||||||
|
position: relative;
|
||||||
|
margin:1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chat-card-small-button:hover {
|
||||||
|
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
.chat-card-small-button:active {
|
||||||
|
position:relative;
|
||||||
|
top:1px;
|
||||||
|
}
|
||||||
|
|
||||||
.chat-card-button {
|
.chat-card-button {
|
||||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||||
@ -1118,8 +1155,8 @@ ul, li {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#logo {
|
#logo {
|
||||||
content : url(../images/ui/crucible_game_logo.png);
|
content : url(../images/ui/logo_hex_yellow_01.webp);
|
||||||
width: 100px;
|
width: 60px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1258,6 +1295,9 @@ Focus FOC: #ff0084
|
|||||||
background: black;
|
background: black;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
.item-packed {
|
||||||
|
flex-grow:0;
|
||||||
|
}
|
||||||
.items-title-text {
|
.items-title-text {
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
@ -1328,6 +1368,12 @@ Focus FOC: #ff0084
|
|||||||
flex-grow:1;
|
flex-grow:1;
|
||||||
max-width: 8rem;
|
max-width: 8rem;
|
||||||
min-width: 8rem;
|
min-width: 8rem;
|
||||||
|
text-align: start;
|
||||||
|
}
|
||||||
|
.item-field-text-long {
|
||||||
|
flex-grow:1;
|
||||||
|
max-width: 14rem;
|
||||||
|
min-width: 14rem;
|
||||||
}
|
}
|
||||||
.item-field-label-long-img {
|
.item-field-label-long-img {
|
||||||
flex-grow:1;
|
flex-grow:1;
|
||||||
@ -1373,7 +1419,12 @@ Focus FOC: #ff0084
|
|||||||
}
|
}
|
||||||
.item-controls-fixed {
|
.item-controls-fixed {
|
||||||
min-width:2rem;
|
min-width:2rem;
|
||||||
max-width: 2rem;
|
/*max-width: 2rem;*/
|
||||||
|
}
|
||||||
|
.item-controls-fixed-small {
|
||||||
|
min-width:1rem;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
/*max-width: 2rem;*/
|
||||||
}
|
}
|
||||||
.biodata-portrait {
|
.biodata-portrait {
|
||||||
min-height: 512px;
|
min-height: 512px;
|
||||||
@ -1382,4 +1433,17 @@ Focus FOC: #ff0084
|
|||||||
.textarea-full-height {
|
.textarea-full-height {
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
.margin-left-4 {
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
.margin-left-8 {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
.maneuver-is-stock {
|
||||||
|
display: none;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.compendium .directory-list .directory-item .folder-header h3 {
|
||||||
|
color:#000
|
||||||
|
}
|
||||||
|
39
system.json
39
system.json
@ -5,11 +5,11 @@
|
|||||||
"flags": {}
|
"flags": {}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Hero System v6 for FoundryVTT (Official)",
|
"description": "Hero System 6E for FoundryVTT (Official)",
|
||||||
"esmodules": [
|
"esmodules": [
|
||||||
"modules/hero6-main.js"
|
"modules/hero6-main.js"
|
||||||
],
|
],
|
||||||
"gridDistance": 5,
|
"gridDistance": 2,
|
||||||
"gridUnits": "m",
|
"gridUnits": "m",
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
@ -30,15 +30,6 @@
|
|||||||
"private": false,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "Item",
|
|
||||||
"label": "Weapons",
|
|
||||||
"name": "weapons",
|
|
||||||
"path": "packs/weapons.db",
|
|
||||||
"system": "fvtt-hero-system-6",
|
|
||||||
"private": false,
|
|
||||||
"flags": {}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"label": "Skills",
|
"label": "Skills",
|
||||||
@ -66,6 +57,15 @@
|
|||||||
"private": false,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "Item",
|
||||||
|
"label": "Maneuvers",
|
||||||
|
"name": "maneuvers",
|
||||||
|
"path": "packs/maneuvers.db",
|
||||||
|
"system": "fvtt-hero-system-6",
|
||||||
|
"private": false,
|
||||||
|
"flags": {}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"label": "Perks",
|
"label": "Perks",
|
||||||
@ -91,16 +91,15 @@
|
|||||||
"styles": [
|
"styles": [
|
||||||
"styles/simple.css"
|
"styles/simple.css"
|
||||||
],
|
],
|
||||||
"version": "10.0.43",
|
"version": "11.0.21",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "10",
|
"minimum": "11",
|
||||||
"verified": "10",
|
"verified": "11"
|
||||||
"maximum": "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-v10.0.43.zip",
|
"download": "https://www.uberwald.me/gitea/public/fvtt-hero-system-6/archive/fvtt-hero-system-6-v11.0.21.zip",
|
||||||
"url": "https://www.uberwald.me/gitea/uberwald/",
|
"url": "https://www.uberwald.me/public/uberwald/",
|
||||||
"background": "images/ui/hro6_welcome_page.webp",
|
"background": "systems/fvtt-hero-system-6/images/ui/hero_foundry_cover.webp",
|
||||||
"id": "fvtt-hero-system-6"
|
"id": "fvtt-hero-system-6"
|
||||||
}
|
}
|
@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"Actor": {
|
"Actor": {
|
||||||
"types": [
|
"types": [
|
||||||
"character"
|
"character",
|
||||||
|
"minion"
|
||||||
],
|
],
|
||||||
"templates": {
|
"templates": {
|
||||||
"biodata": {
|
"biodata": {
|
||||||
@ -56,6 +57,7 @@
|
|||||||
"value": 10,
|
"value": 10,
|
||||||
"base": 10,
|
"base": 10,
|
||||||
"hasroll": true,
|
"hasroll": true,
|
||||||
|
"initiative": 10,
|
||||||
"category": "main"
|
"category": "main"
|
||||||
},
|
},
|
||||||
"con": {
|
"con": {
|
||||||
@ -71,7 +73,7 @@
|
|||||||
"category": "main",
|
"category": "main",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"base": 10,
|
"base": 10,
|
||||||
"perceptionroll": 10
|
"perceptionroll": 11
|
||||||
},
|
},
|
||||||
"ego": {
|
"ego": {
|
||||||
"label": "EGO",
|
"label": "EGO",
|
||||||
@ -89,7 +91,7 @@
|
|||||||
},
|
},
|
||||||
"ocv": {
|
"ocv": {
|
||||||
"label": "OCV",
|
"label": "OCV",
|
||||||
"hasroll": false,
|
"hasroll": true,
|
||||||
"base": 3,
|
"base": 3,
|
||||||
"autoMod": "0",
|
"autoMod": "0",
|
||||||
"userMod": "0",
|
"userMod": "0",
|
||||||
@ -107,7 +109,7 @@
|
|||||||
},
|
},
|
||||||
"omcv": {
|
"omcv": {
|
||||||
"label": "OMCV",
|
"label": "OMCV",
|
||||||
"hasroll": false,
|
"hasroll": true,
|
||||||
"base": 3,
|
"base": 3,
|
||||||
"autoMod": "0",
|
"autoMod": "0",
|
||||||
"userMod": "0",
|
"userMod": "0",
|
||||||
@ -204,6 +206,7 @@
|
|||||||
"ismovement": true,
|
"ismovement": true,
|
||||||
"hasroll": false,
|
"hasroll": false,
|
||||||
"value": 12,
|
"value": 12,
|
||||||
|
"ncvalue": 24,
|
||||||
"base": 12
|
"base": 12
|
||||||
},
|
},
|
||||||
"swimming": {
|
"swimming": {
|
||||||
@ -211,6 +214,7 @@
|
|||||||
"ismovement": true,
|
"ismovement": true,
|
||||||
"hasroll": false,
|
"hasroll": false,
|
||||||
"value": 4,
|
"value": 4,
|
||||||
|
"ncvalue": 8,
|
||||||
"base": 4
|
"base": 4
|
||||||
},
|
},
|
||||||
"leaping": {
|
"leaping": {
|
||||||
@ -218,6 +222,7 @@
|
|||||||
"ismovement": true,
|
"ismovement": true,
|
||||||
"hasroll": false,
|
"hasroll": false,
|
||||||
"value": 4,
|
"value": 4,
|
||||||
|
"ncvalue": 8,
|
||||||
"base": 4,
|
"base": 4,
|
||||||
"leaping_horizontal_base": 0,
|
"leaping_horizontal_base": 0,
|
||||||
"leaping_horizontal_total": 0,
|
"leaping_horizontal_total": 0,
|
||||||
@ -230,25 +235,31 @@
|
|||||||
"movements": {
|
"movements": {
|
||||||
"fly": {
|
"fly": {
|
||||||
"label": "Fly",
|
"label": "Fly",
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
|
|
||||||
},
|
},
|
||||||
"teleport": {
|
"teleport": {
|
||||||
"label": "Teleport",
|
"label": "Teleport",
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
},
|
},
|
||||||
"tunnel": {
|
"tunnel": {
|
||||||
"label": "Tunnel",
|
"label": "Tunnel",
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
},
|
},
|
||||||
"move1": {
|
"move1": {
|
||||||
"label": "N/A",
|
"label": "N/A",
|
||||||
"iseditable": true,
|
"iseditable": true,
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
},
|
},
|
||||||
"move2": {
|
"move2": {
|
||||||
"label": "N/A",
|
"label": "N/A",
|
||||||
"iseditable": true,
|
"iseditable": true,
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -299,6 +310,15 @@
|
|||||||
"movements"
|
"movements"
|
||||||
],
|
],
|
||||||
"subactors": []
|
"subactors": []
|
||||||
|
},
|
||||||
|
"minion": {
|
||||||
|
"templates": [
|
||||||
|
"biodata",
|
||||||
|
"characteristics",
|
||||||
|
"defenses",
|
||||||
|
"movements"
|
||||||
|
],
|
||||||
|
"subactors": []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Item": {
|
"Item": {
|
||||||
@ -334,14 +354,19 @@
|
|||||||
"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,
|
||||||
"effectroll": "standard",
|
"effectroll": "standard",
|
||||||
"effectrollformula": "",
|
"effectrollformula": "",
|
||||||
|
"hascharges": false,
|
||||||
|
"nbcharges": 0,
|
||||||
"items": {}
|
"items": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -353,6 +378,8 @@
|
|||||||
"pha": "",
|
"pha": "",
|
||||||
"ocv": "",
|
"ocv": "",
|
||||||
"dcv" : "",
|
"dcv" : "",
|
||||||
|
"omcv": "",
|
||||||
|
"dmcv" : "",
|
||||||
"isstock": false,
|
"isstock": false,
|
||||||
"active": false
|
"active": false
|
||||||
},
|
},
|
||||||
@ -394,7 +421,19 @@
|
|||||||
"subtype": "equipment",
|
"subtype": "equipment",
|
||||||
"value": 0,
|
"value": 0,
|
||||||
"weight": 0,
|
"weight": 0,
|
||||||
"moneycost": 0
|
"moneycost": 0,
|
||||||
|
"ocv": 0,
|
||||||
|
"omcv": 0,
|
||||||
|
"dmcv": 0,
|
||||||
|
"rmod": 0,
|
||||||
|
"pd": 0,
|
||||||
|
"ed": 0,
|
||||||
|
"rpd": 0,
|
||||||
|
"red": 0,
|
||||||
|
"mentaldefense": 0,
|
||||||
|
"powerdefense": 0,
|
||||||
|
"flashdefense": 0,
|
||||||
|
"otherdefense": 0
|
||||||
},
|
},
|
||||||
"attack": {
|
"attack": {
|
||||||
"templates": [
|
"templates": [
|
||||||
|
@ -4,68 +4,74 @@
|
|||||||
<header class="sheet-header">
|
<header class="sheet-header">
|
||||||
<div class="header-fields">
|
<div class="header-fields">
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
|
|
||||||
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
|
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||||
|
|
||||||
<div class="fixed-separator">
|
<div class="fixed-separator">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
<h1 class="charname "><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
<h1 class="charname "><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||||
|
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<ul class="item-list alternate-list">
|
<ul class="item-list alternate-list">
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="item-field-label-medium">Alternate IDs</label>
|
<label class="item-field-label-medium">Alternate IDs</label>
|
||||||
<input type="text" class="item-field-label-long4" name="system.biodata.alternateids" value="{{system.biodata.origin}}"
|
<input type="text" class="item-field-label-long4" name="system.biodata.alternateids"
|
||||||
data-dtype="String" />
|
value="{{system.biodata.origin}}" data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
<div>
|
<div>
|
||||||
<ul class="item-list alternate-list">
|
<ul class="item-list alternate-list">
|
||||||
<li class="flexrow item">
|
<li class="flexrow item">
|
||||||
<label class="item-field-label-medium">Campaign</label>
|
<label class="item-field-label-medium">Campaign</label>
|
||||||
<input type="text" class="item-field-label-long3" name="system.biodata.campaign" value="{{system.biodata.campaign}}" data-dtype="String" />
|
<input type="text" class="item-field-label-long3" name="system.biodata.campaign"
|
||||||
</li>
|
value="{{system.biodata.campaign}}" data-dtype="String" />
|
||||||
<li class="flexrow item">
|
</li>
|
||||||
<label class="item-field-label-medium">Player</label>
|
<li class="flexrow item">
|
||||||
<input type="text" class="item-field-label-long3" name="system.biodata.player" value="{{system.biodata.player}}"
|
<label class="item-field-label-medium">Player</label>
|
||||||
data-dtype="String" />
|
<input type="text" class="item-field-label-long3" name="system.biodata.player"
|
||||||
</li>
|
value="{{system.biodata.player}}" data-dtype="String" />
|
||||||
<li class="flexrow item">
|
</li>
|
||||||
<label class="item-field-label-medium">GM</label>
|
<li class="flexrow item">
|
||||||
<input type="text" class="item-field-label-long3" name="system.biodata.gm" value="{{system.biodata.gm}}"
|
<label class="item-field-label-medium">GM</label>
|
||||||
data-dtype="String" />
|
<input type="text" class="item-field-label-long3" name="system.biodata.gm"
|
||||||
</li>
|
value="{{system.biodata.gm}}" data-dtype="String" />
|
||||||
<li class="item flexrow">
|
</li>
|
||||||
<label class="item-field-label-medium">Hair</label>
|
<li class="item flexrow">
|
||||||
<input type="text" class="item-field-label-long3" name="system.biodata.hair" value="{{system.biodata.hair}}" data-dtype="String" />
|
<label class="item-field-label-medium">Hair</label>
|
||||||
</li>
|
<input type="text" class="item-field-label-long3" name="system.biodata.hair"
|
||||||
</ul>
|
value="{{system.biodata.hair}}" data-dtype="String" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<ul class="item-list alternate-list">
|
<ul class="item-list alternate-list">
|
||||||
<li class="flexrow item">
|
<li class="flexrow item">
|
||||||
<label class="item-field-label-medium">Gender</label>
|
<label class="item-field-label-medium">Gender</label>
|
||||||
<input type="text" class="item-field-label-medium" name="system.biodata.gender" value="{{system.biodata.gender}}" data-dtype="String" />
|
<input type="text" class="item-field-label-medium" name="system.biodata.gender"
|
||||||
</li>
|
value="{{system.biodata.gender}}" data-dtype="String" />
|
||||||
<li class="item flexrow">
|
</li>
|
||||||
<label class="item-field-label-medium">Height</label>
|
<li class="item flexrow">
|
||||||
<input type="text" class="item-field-label-medium" name="system.biodata.height" value="{{system.biodata.height}}" data-dtype="String" />
|
<label class="item-field-label-medium">Height</label>
|
||||||
</li>
|
<input type="text" class="item-field-label-medium" name="system.biodata.height"
|
||||||
<li class="item flexrow">
|
value="{{system.biodata.height}}" data-dtype="String" />
|
||||||
<label class="item-field-label-medium">Mass</label>
|
</li>
|
||||||
<input type="text" class="item-field-label-medium" name="system.biodata.mass" value="{{system.biodata.mass}}" data-dtype="String" />
|
<li class="item flexrow">
|
||||||
</li>
|
<label class="item-field-label-medium">Mass</label>
|
||||||
<li class="item flexrow">
|
<input type="text" class="item-field-label-medium" name="system.biodata.mass"
|
||||||
<label class="item-field-label-medium">Eyes</label>
|
value="{{system.biodata.mass}}" data-dtype="String" />
|
||||||
<input type="text" class="item-field-label-medium" name="system.biodata.eyes" value="{{system.biodata.eyes}}" data-dtype="String" />
|
</li>
|
||||||
</li>
|
<li class="item flexrow">
|
||||||
</ul>
|
<label class="item-field-label-medium">Eyes</label>
|
||||||
|
<input type="text" class="item-field-label-medium" name="system.biodata.eyes"
|
||||||
|
value="{{system.biodata.eyes}}" data-dtype="String" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -73,19 +79,23 @@
|
|||||||
<ul class="item-list alternate-list">
|
<ul class="item-list alternate-list">
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="item-field-label-medium">Points</label>
|
<label class="item-field-label-medium">Points</label>
|
||||||
<input type="text" class="item-field-label-short" name="system.biodata.points" value="{{system.biodata.origin}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short" name="system.biodata.points"
|
||||||
|
value="{{system.biodata.origin}}" data-dtype="Number" />
|
||||||
<label class=""> </label>
|
<label class=""> </label>
|
||||||
|
|
||||||
<label class="item-field-label-medium">Complications</label>
|
<label class="item-field-label-medium">Complications</label>
|
||||||
<input type="text" class="item-field-label-short" name="system.biodata.complications" value="{{system.biodata.complications}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short" name="system.biodata.complications"
|
||||||
|
value="{{system.biodata.complications}}" data-dtype="Number" />
|
||||||
<label class=""> </label>
|
<label class=""> </label>
|
||||||
|
|
||||||
<label class="item-field-label-medium">XP Earned</label>
|
<label class="item-field-label-medium">XP Earned</label>
|
||||||
<input type="text" class="item-field-label-short" name="system.biodata.xpearned" value="{{system.biodata.xpearned}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short" name="system.biodata.xpearned"
|
||||||
|
value="{{system.biodata.xpearned}}" data-dtype="Number" />
|
||||||
<label class=""> </label>
|
<label class=""> </label>
|
||||||
|
|
||||||
<label class="item-field-label-medium">XP Spent</label>
|
<label class="item-field-label-medium">XP Spent</label>
|
||||||
<input type="text" class="item-field-label-short" name="system.biodata.xpspent" value="{{system.biodata.xpspent}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short" name="system.biodata.xpspent"
|
||||||
|
value="{{system.biodata.xpspent}}" data-dtype="Number" />
|
||||||
<label class=""> </label>
|
<label class=""> </label>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -117,78 +127,116 @@
|
|||||||
|
|
||||||
{{!-- Combat Tab --}}
|
{{!-- Combat Tab --}}
|
||||||
<div class="tab combat" data-group="primary" data-tab="combat">
|
<div class="tab combat" data-group="primary" data-tab="combat">
|
||||||
|
|
||||||
<div class="grid grid2col">
|
<div class="grid grid2col">
|
||||||
<div>
|
<div>
|
||||||
<ul class="item-list alternate-list">
|
<ul class="item-list alternate-list">
|
||||||
<li class="item">
|
<li class="item">
|
||||||
<label class="item-field-label-medium">STR Dice</label>
|
<label class="item-field-label-medium">STR Dice</label>
|
||||||
<a class="roll-lift-dice"><i class="fas fa-dice"></i>{{characteristics.str.strdice}}</a>
|
<a class="roll-lift-dice"><i class="fas fa-dice"></i>{{characteristics.str.strdice}}</a>
|
||||||
<label class="item-field-label-short"> </label>
|
<label class="item-field-label-short"> </label>
|
||||||
|
|
||||||
<label class="item-field-label-medium">Lift</label>
|
<label class="item-field-label-medium">Lift</label>
|
||||||
<input type="text" class="item-field-label-short update-field" disabled data-field-name="system.characteristics.str.lift" value="{{characteristics.str.lift}}" data-dtype="String" />
|
<input type="text" class="item-field-label-short update-field" disabled
|
||||||
|
data-field-name="system.characteristics.str.lift" value="{{characteristics.str.lift}}"
|
||||||
|
data-dtype="String" />
|
||||||
<label class="item-field-label-short"> </label>
|
<label class="item-field-label-short"> </label>
|
||||||
<label class="item-field-label-medium">STR END</label>
|
<label class="item-field-label-medium">STR END</label>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.str.strend" disabled value="{{characteristics.str.strend}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field"
|
||||||
|
data-field-name="system.characteristics.str.strend" disabled value="{{characteristics.str.strend}}"
|
||||||
|
data-dtype="Number" />
|
||||||
|
|
||||||
</li>
|
</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>
|
||||||
<span class="item-field-label-very-short">
|
|
||||||
<label class="short-label">OCV</label>
|
{{#if (eq mtype "mental")}}
|
||||||
</span>
|
<span class="item-field-label-very-short">
|
||||||
<span class="item-field-label-short">
|
<label class="short-label">OMCV</label>
|
||||||
<label class="short-label">DCV</label>
|
</span>
|
||||||
</span>
|
<span class="item-field-label-very-short">
|
||||||
<span class="item-field-label-long">
|
<label class="short-label">DMCV</label>
|
||||||
<label class="short-label">Effects</label>
|
</span>
|
||||||
</span>
|
{{else}}
|
||||||
</li>
|
<span class="item-field-label-very-short">
|
||||||
{{#each mlist as |maneuver key|}}
|
<label class="short-label">OCV</label>
|
||||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{maneuver._id}}">
|
</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"
|
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||||
src="{{maneuver.img}}" /></a>
|
src="{{maneuver.img}}" />
|
||||||
<span class="item-field-label-long">{{maneuver.name}}</span>
|
</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 content-center">{{maneuver.system.pha}}</span>
|
||||||
<span class="item-field-label-very-short">{{maneuver.system.ocv}}</span>
|
{{#if (eq ../mtype "mental")}}
|
||||||
<span class="item-field-label-short">{{maneuver.system.dcv}}</span>
|
<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}}
|
||||||
|
<a class="roll-direct" data-roll-source="Maneuver {{maneuver.name}}"
|
||||||
|
data-roll-formula="{{maneuver.system.effectrollformula}}">
|
||||||
|
<i class="fas fa-dice"></i>{{maneuver.system.effectrollformula}}
|
||||||
|
</a>
|
||||||
|
{{/if}}
|
||||||
|
</span>
|
||||||
|
|
||||||
<span class="item-field-label-long">{{maneuver.system.effects}}</span>
|
</li>
|
||||||
|
{{/each}}
|
||||||
<span class="item-field-label-short"> </span>
|
</ul>
|
||||||
<div class="item-controls item-controls-fixed">
|
|
||||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
{{/each}}
|
|
||||||
</ul>
|
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ul class="item-list alternate-list">
|
<ul class="item-list alternate-list">
|
||||||
<li class="flexrow item">
|
<li class="flexrow item">
|
||||||
<label class="item-field-label-medium">SPD</label>
|
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.spd.value" value="{{characteristics.spd.value}}" data-dtype="Number" />
|
|
||||||
|
|
||||||
<span class="item-field-label-very-short"> </span>
|
|
||||||
<button class="chat-card-button item-field-label-medium hold-action">Hold/Unhold</button>
|
|
||||||
<button class="chat-card-button item-field-label-medium abort-action">Abort/Unabort</button>
|
|
||||||
<span class=""> </span>
|
|
||||||
|
|
||||||
<label class="item-field-label-long">Presence attack</label>
|
<label class="item-packed">Initiative</label>
|
||||||
<a class="roll-direct" data-roll-source="Presence attack" data-roll-formula="{{system.biodata.presenceattack.rollFormula}}"><i class="fas fa-dice"></i>{{system.biodata.presenceattack.displayFormula}}</a>
|
<input type="text" class="margin-left-4item-packed item-field-label-very-short update-field"
|
||||||
|
data-field-name="system.characteristics.dex.initiative" value="{{characteristics.dex.initiative}}"
|
||||||
|
data-dtype="Number" />
|
||||||
|
|
||||||
|
<label class="items-title-text item-packed margin-left-8">SPD</label>
|
||||||
|
<input type="text" class="item-field-label-very-short margin-left-4 update-field item-packed"
|
||||||
|
data-field-name="system.characteristics.spd.value" value="{{characteristics.spd.value}}"
|
||||||
|
data-dtype="Number" />
|
||||||
|
|
||||||
|
<button class="chat-card-small-button item-field-label-short margin-left-8 hold-action item-packed">{{#if
|
||||||
|
isHold}}Unhold{{else}}Hold{{/if}}</button>
|
||||||
|
<button class="chat-card-small-button item-field-label-short margin-left-4 abort-action item-packed">{{#if
|
||||||
|
isAbort}}Unabort{{else}}Abort{{/if}}</button>
|
||||||
|
|
||||||
|
<label class="items-title-text margin-left-8">Presence attack</label>
|
||||||
|
<a class="roll-direct" data-roll-source="Presence attack"
|
||||||
|
data-roll-formula="{{system.biodata.presenceattack.rollFormula}}">
|
||||||
|
<i class="fas fa-dice"></i>{{system.biodata.presenceattack.displayFormula}}
|
||||||
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -197,24 +245,26 @@
|
|||||||
<div>
|
<div>
|
||||||
<ul class="stat-list alternate-list">
|
<ul class="stat-list alternate-list">
|
||||||
<li class="item flexrow list-item items-title-bg">
|
<li class="item flexrow list-item items-title-bg">
|
||||||
<span class="item-field-label-long">
|
<span class="item-field-label-long">
|
||||||
<label class="">Vitals</label>
|
<label class="">Vitals</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">Val</label>
|
<label class="short-label">Val</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">Dmg</label>
|
<label class="short-label">Dmg</label>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{#each characteristics as |char key|}}
|
{{#each characteristics as |char key|}}
|
||||||
{{#if char.isvital}}
|
{{#if char.isvital}}
|
||||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||||
<span class="item-field-label-long">{{char.label}}</span>
|
<span class="item-field-label-long">{{char.label}}</span>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field"
|
||||||
<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}}.value" value="{{char.value}}" data-dtype="Number" />
|
||||||
</li>
|
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.damage"
|
||||||
{{/if}}
|
value="{{char.damage}}" data-dtype="Number" />
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -224,57 +274,73 @@
|
|||||||
|
|
||||||
<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">
|
<span class="item-field-label-long">
|
||||||
<label class="">Defenses</label>
|
<label class="">Defenses</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">Normal</label>
|
<label class="short-label">Normal</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">Resistant</label>
|
<label class="short-label">Resistant</label>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{#each characteristics as |char key|}}
|
{{#each characteristics as |char key|}}
|
||||||
{{#if char.isdefense}}
|
{{#if char.isdefense}}
|
||||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||||
<span class="item-field-label-long">{{char.label}}</span>
|
<span class="item-field-label-long">{{char.label}}</span>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field"
|
||||||
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.resistant" value="{{char.resistant}}" data-dtype="Number" />
|
data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
||||||
</li>
|
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.resistant"
|
||||||
{{/if}}
|
value="{{char.resistant}}" data-dtype="Number" />
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{#each defenses as |def key|}}
|
{{#each defenses as |def key|}}
|
||||||
<li class="item flexrow list-item list-item-shadow" data-defense-key="{{key}}">
|
<li class="item flexrow list-item list-item-shadow" data-defense-key="{{key}}">
|
||||||
{{#if def.iseditable}}
|
{{#if def.iseditable}}
|
||||||
<input type="text" class="item-field-label-long update-field" data-field-name="system.defenses.{{key}}.label" value="{{def.label}}" data-dtype="String" />
|
<input type="text" class="item-field-label-long update-field"
|
||||||
{{else}}
|
data-field-name="system.defenses.{{key}}.label" value="{{def.label}}" data-dtype="String" />
|
||||||
<span class="item-field-label-long">{{def.label}}</span>
|
{{else}}
|
||||||
{{/if}}
|
<span class="item-field-label-long">{{def.label}}</span>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.defenses.{{key}}.value" value="{{def.value}}" data-dtype="Number" />
|
{{/if}}
|
||||||
<input type="text" class="item-field-label-short" name="system.defenses.{{key}}.resistant" value="{{def.resistant}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field"
|
||||||
</li>
|
data-field-name="system.defenses.{{key}}.value" value="{{def.value}}" data-dtype="Number" />
|
||||||
|
<input type="text" class="item-field-label-short" name="system.defenses.{{key}}.resistant"
|
||||||
|
value="{{def.resistant}}" data-dtype="Number" />
|
||||||
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<label class="item-field-label-short">OCV</label>
|
<label class="item-field-label-short">
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.ocv.value" value="{{characteristics.ocv.value}}" data-dtype="Number" />
|
<a class="roll-charac" data-charac-key="ocv"><i class="fas fa-dice"></i>OCV</a>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="text" class="item-field-label-short update-field"
|
||||||
|
data-field-name="system.characteristics.ocv.value" value="{{characteristics.ocv.value}}"
|
||||||
|
data-dtype="Number" />
|
||||||
<label class="item-field-label-short"> </label>
|
<label class="item-field-label-short"> </label>
|
||||||
|
|
||||||
<label class="item-field-label-short">DCV</label>
|
<label class="item-field-label-short">DCV</label>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.dcv.value" value="{{characteristics.dcv.value}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field"
|
||||||
|
data-field-name="system.characteristics.dcv.value" value="{{characteristics.dcv.value}}"
|
||||||
|
data-dtype="Number" />
|
||||||
<label class="item-field-label-short"> </label>
|
<label class="item-field-label-short"> </label>
|
||||||
|
|
||||||
<label class="item-field-label-short">OMCV</label>
|
<label class="item-field-label-short">
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.omcv.value" value="{{characteristics.omcv.value}}" data-dtype="Number" />
|
<a class="roll-charac" data-charac-key="omcv"><i class="fas fa-dice"></i>OMCV</a>
|
||||||
|
</label>
|
||||||
|
<input type="text" class="item-field-label-short update-field"
|
||||||
|
data-field-name="system.characteristics.omcv.value" value="{{characteristics.omcv.value}}"
|
||||||
|
data-dtype="Number" />
|
||||||
<label class="item-field-label-short"> </label>
|
<label class="item-field-label-short"> </label>
|
||||||
|
|
||||||
<label class="item-field-label-short">DMCV</label>
|
<label class="item-field-label-short">DMCV</label>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.dmcv.value" value="{{characteristics.dmcv.value}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field"
|
||||||
|
data-field-name="system.characteristics.dmcv.value" value="{{characteristics.dmcv.value}}"
|
||||||
|
data-dtype="Number" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
@ -282,66 +348,75 @@
|
|||||||
<textarea rows="4" type="text" class="padd-right" name="system.biodata.combatskills"
|
<textarea rows="4" type="text" class="padd-right" name="system.biodata.combatskills"
|
||||||
data-dtype="String">{{system.biodata.combatskills}}</textarea>
|
data-dtype="String">{{system.biodata.combatskills}}</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid grid2col">
|
<div class="grid grid2col">
|
||||||
<div>
|
<div>
|
||||||
<ul class="stat-list alternate-list">
|
<ul class="stat-list alternate-list">
|
||||||
<li class="item flexrow list-item items-title-bg">
|
<li class="item flexrow list-item items-title-bg">
|
||||||
<span class="item-field-label-long">
|
<span class="item-field-label-long">
|
||||||
<label class="">Senses</label>
|
<label class="">Senses</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
</span>
|
</span>
|
||||||
|
</li>
|
||||||
|
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||||
|
<span class="item-field-label-long">
|
||||||
|
<a class="roll-perception"><i class="fas fa-dice"></i>Perception Roll</a>
|
||||||
|
</span>
|
||||||
|
<input type="text" class="item-field-label-short update-field"
|
||||||
|
data-field-name="system.characteristics.int.perceptionroll"
|
||||||
|
value="{{characteristics.int.perceptionroll}}" data-dtype="Number" />
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
|
||||||
<span class="item-field-label-long">
|
|
||||||
<a class="roll-perception"><i class="fas fa-dice"></i>Perception Roll</a>
|
|
||||||
</span>
|
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.int.perceptionroll" value="{{characteristics.int.perceptionroll}}" data-dtype="Number" />
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<textarea type="text" class="textarea-full-height padd-right" name="system.biodata.combatnotes1" data-dtype="String">{{system.biodata.combatnotes1}}</textarea>
|
<textarea rows="20" type="text" class="textarea-full-height padd-right" name="system.biodata.combatnotes1"
|
||||||
|
data-dtype="String">{{system.biodata.combatnotes1}}</textarea>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ul class="stat-list alternate-list">
|
<ul class="stat-list alternate-list">
|
||||||
<li class="item flexrow list-item items-title-bg">
|
<li class="item flexrow list-item items-title-bg">
|
||||||
<span class="item-field-label-long">
|
<span class="item-field-label-long">
|
||||||
<label class="">Movement</label>
|
<label class="">Movement</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">C</label>
|
<label class="short-label">Combat</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">NC</label>
|
<label class="short-label">NC</label>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{#each characteristics as |char key|}}
|
{{#each characteristics as |char key|}}
|
||||||
{{#if char.ismovement}}
|
{{#if char.ismovement}}
|
||||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||||
<span class="item-field-label-long">{{char.label}}</span>
|
<span class="item-field-label-long">{{char.label}}</span>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field"
|
||||||
<input type="text" class="item-field-label-short" value="{{mul char.value 2}}" disabled data-dtype="Number" />
|
data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
||||||
</li>
|
<input type="text" class="item-field-label-short update-field"
|
||||||
{{/if}}
|
data-field-name="system.characteristics.{{key}}.ncvalue" value="{{char.ncvalue}}"
|
||||||
|
data-dtype="Number" />
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{#each movements as |move key|}}
|
{{#each movements as |move key|}}
|
||||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||||
{{#if move.iseditable}}
|
{{#if move.iseditable}}
|
||||||
<input type="text" class="item-field-label-long update-field" data-field-name="system.movements.{{key}}.label" value="{{move.label}}" data-dtype="String" />
|
<input type="text" class="item-field-label-long update-field"
|
||||||
{{else}}
|
data-field-name="system.movements.{{key}}.label" value="{{move.label}}" data-dtype="String" />
|
||||||
<span class="item-field-label-long">{{move.label}}</span>
|
{{else}}
|
||||||
{{/if}}
|
<span class="item-field-label-long">{{move.label}}</span>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.movements.{{key}}.value" value="{{move.value}}" data-dtype="Number" />
|
{{/if}}
|
||||||
<input type="text" class="item-field-label-short" value="{{mul move.value 2}}" disabled data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field"
|
||||||
</li>
|
data-field-name="system.movements.{{key}}.value" value="{{move.value}}" data-dtype="Number" />
|
||||||
|
<input type="text" class="item-field-label-short" value="{{mul move.value 2}}" disabled
|
||||||
|
data-dtype="Number" />
|
||||||
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -351,28 +426,28 @@
|
|||||||
<div class="charac-item">
|
<div class="charac-item">
|
||||||
<ul>
|
<ul>
|
||||||
<li class="item flexrow list-item items-title-bg">
|
<li class="item flexrow list-item items-title-bg">
|
||||||
<span class="item-field-label-medium">
|
<span class="item-field-label-medium">
|
||||||
<label class="">Value</label>
|
<label class="">Value</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-medium">
|
<span class="item-field-label-medium">
|
||||||
<label class="item-field-label-medium">CHAR</label>
|
<label class="item-field-label-medium">CHAR</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">Base</label>
|
<label class="short-label">Base</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">Roll</label>
|
<label class="short-label">Roll</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-long">
|
<span class="item-field-label-long">
|
||||||
<label class="short-label">Notes</label>
|
<label class="short-label">Notes</label>
|
||||||
</span>
|
</span>
|
||||||
<div class="item-filler"> </div>
|
<div class="item-filler"> </div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{{#each characteristics as |charac key|}}
|
{{#each characteristics as |charac key|}}
|
||||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-full-charac.hbs charac=charac key=key}}
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-full-charac.hbs charac=charac key=key}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -399,7 +474,8 @@
|
|||||||
src="{{skill.img}}" /></a>
|
src="{{skill.img}}" /></a>
|
||||||
<span class="item-field-label-long">{{skill.name}}</span>
|
<span class="item-field-label-long">{{skill.name}}</span>
|
||||||
<span class="item-field-label-medium">{{upper skill.charac}}</span>
|
<span class="item-field-label-medium">{{upper skill.charac}}</span>
|
||||||
<span class="item-field-label-short"><a class="roll-item" data-type="skill"><i class="fas fa-dice"></i>{{skill.roll}}-</a></span>
|
<span class="item-field-label-short"><a class="roll-item" data-type="skill"><i
|
||||||
|
class="fas fa-dice"></i>{{skill.roll}}-</a></span>
|
||||||
<div class="item-filler"> </div>
|
<div class="item-filler"> </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>
|
||||||
@ -426,8 +502,9 @@
|
|||||||
<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="{{perk.img}}" /></a>
|
src="{{perk.img}}" /></a>
|
||||||
<span class="item-name-label">{{perk.name}}</span>
|
<span class="item-name-label">{{perk.name}}</span>
|
||||||
{{#if perk.system.hasroll}}
|
{{#if perk.system.hasroll}}
|
||||||
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i class="fas fa-dice"></i>{{perk.system.roll}}-</a></span>
|
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i
|
||||||
|
class="fas fa-dice"></i>{{perk.system.roll}}-</a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
<span class="item-field-label-short"> </span>
|
<span class="item-field-label-short"> </span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@ -457,8 +534,9 @@
|
|||||||
<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="{{talent.img}}" /></a>
|
src="{{talent.img}}" /></a>
|
||||||
<span class="item-name-label">{{talent.name}}</span>
|
<span class="item-name-label">{{talent.name}}</span>
|
||||||
{{#if talent.system.hasroll}}
|
{{#if talent.system.hasroll}}
|
||||||
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i class="fas fa-dice"></i>{{talent.system.roll}}-</a></span>
|
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i
|
||||||
|
class="fas fa-dice"></i>{{talent.system.roll}}-</a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
<span class="item-field-label-short"> </span>
|
<span class="item-field-label-short"> </span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@ -474,6 +552,10 @@
|
|||||||
{{!-- Maneuvers Tab --}}
|
{{!-- Maneuvers Tab --}}
|
||||||
<div class="tab maneuver" data-group="primary" data-tab="maneuver">
|
<div class="tab maneuver" data-group="primary" data-tab="maneuver">
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<button class="show-stock-maneuver">Show/Hide stock maneuvers</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<ul class="stat-list alternate-list item-list">
|
<ul class="stat-list alternate-list item-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">
|
||||||
@ -488,29 +570,80 @@
|
|||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">DCV</label>
|
<label class="short-label">DCV</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-long">
|
<span class="item-field-label-long3">
|
||||||
<label class="short-label">Effects</label>
|
<label class="short-label">Effects</label>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{#each nonstockmaneuvers as |maneuver key|}}
|
{{#each allmaneuvers as |maneuver key|}}
|
||||||
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{maneuver._id}}">
|
{{#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"
|
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||||
src="{{maneuver.img}}" /></a>
|
src="{{maneuver.img}}" /></a>
|
||||||
<span class="item-field-label-long">{{maneuver.name}}</span>
|
<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-long">{{maneuver.system.effects}}</span>
|
<span class="item-field-label-long3">{{maneuver.system.effects}}</span>
|
||||||
|
|
||||||
<div class="item-filler"> </div>
|
<div class="item-filler"> </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>
|
||||||
|
{{/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"> </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 --}}
|
||||||
@ -543,13 +676,24 @@
|
|||||||
{{#each powers as |power key|}}
|
{{#each powers as |power key|}}
|
||||||
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{power._id}}">
|
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{power._id}}">
|
||||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||||
src="{{power.img}}" /></a>
|
src="{{power.img}}" /></a>
|
||||||
<span class="item-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 class="fas fa-dice"></i>{{power.system.damage}}</a></span>
|
<span class="item-field-label-medium"><a class="roll-damage" data-type="power"><i
|
||||||
{{#if power.system.hasroll}}
|
class="fas fa-dice"></i>{{power.system.damage}}</a></span>
|
||||||
<span class="item-field-label-short"><a class="roll-item" data-type="power"><i class="fas fa-dice"></i>{{power.system.roll}}-</a></span>
|
{{#if power.system.hasroll}}
|
||||||
|
<span class="item-field-label-short"><a class="roll-item" data-type="power"><i
|
||||||
|
class="fas fa-dice"></i>{{power.system.roll}}-</a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
<span class="item-field-label-short"> </span>
|
<span class="item-field-label-short"> </span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@ -580,8 +724,9 @@
|
|||||||
<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="{{comp.img}}" /></a>
|
src="{{comp.img}}" /></a>
|
||||||
<span class="item-name-label">{{comp.name}}</span>
|
<span class="item-name-label">{{comp.name}}</span>
|
||||||
{{#if comp.system.hasroll}}
|
{{#if comp.system.hasroll}}
|
||||||
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i class="fas fa-dice"></i>{{comp.system.roll}}-</a></span>
|
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i
|
||||||
|
class="fas fa-dice"></i>{{comp.system.roll}}-</a></span>
|
||||||
{{else}}
|
{{else}}
|
||||||
<span class="item-field-label-short"> </span>
|
<span class="item-field-label-short"> </span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@ -604,13 +749,19 @@
|
|||||||
<span class="small-label">Total value : {{totalValue}}</span>
|
<span class="small-label">Total value : {{totalValue}}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Weapons" items=weapons}}
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Money"
|
||||||
|
items=moneys}}
|
||||||
|
|
||||||
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Weapons"
|
||||||
|
items=weapons}}
|
||||||
|
|
||||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Armor" items=armors}}
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Armor" items=armors}}
|
||||||
|
|
||||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Shields" items=shields}}
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Shields"
|
||||||
|
items=shields}}
|
||||||
|
|
||||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Equipment" items=equipments}}
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Equipment"
|
||||||
|
items=equipments}}
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
@ -665,7 +816,7 @@
|
|||||||
<div class="medium-editor ">
|
<div class="medium-editor ">
|
||||||
{{editor notes1 target="system.biodata.notes1" button=true owner=owner
|
{{editor notes1 target="system.biodata.notes1" button=true owner=owner
|
||||||
editable=editable}}
|
editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<h3>Notes 2 : </h3>
|
<h3>Notes 2 : </h3>
|
||||||
<div class="small-editor">
|
<div class="small-editor">
|
||||||
@ -693,7 +844,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
</form>
|
</form>
|
@ -32,9 +32,12 @@
|
|||||||
</a>
|
</a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
{{log combat.flags}}
|
||||||
|
|
||||||
{{#if combatCount}}
|
{{#if combatCount}}
|
||||||
{{#if combat.round}}
|
{{#if combat.round}}
|
||||||
<h3 class="encounter-title noborder">Turn {{combat.turnNumber}} Segment {{combat.segmentNumber}}</h3>
|
<!--<h3 class="encounter-title noborder">Turn {{combat.turnNumber}} Segment {{combat.segmentNumber}}</h3>-->
|
||||||
|
<h3 class="encounter-title noborder">Turn {{combat.flags.world.turnData.turnNumber}} Segment {{combat.flags.world.turnData.segmentNumber}}</h3>
|
||||||
{{else}}
|
{{else}}
|
||||||
<h3 class="encounter-title noborder">{{localize 'COMBAT.NotStarted'}}</h3>
|
<h3 class="encounter-title noborder">{{localize 'COMBAT.NotStarted'}}</h3>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
<form class="skill-roll-dialog">
|
<form class="skill-roll-dialog">
|
||||||
<header class="roll-dialog-header">
|
<header class="roll-dialog-header">
|
||||||
{{#if img}}
|
<div class="flexrow">
|
||||||
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
|
{{#if img}}
|
||||||
{{/if}}
|
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||||
<h1 class="dialog-roll-title roll-dialog-header">{{title}}</h1>
|
{{/if}}
|
||||||
|
<h2 class="dialog-roll-title roll-dialog-header">{{title}}</h2>
|
||||||
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
@ -15,6 +17,28 @@
|
|||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (eq subMode "ocv")}}
|
||||||
|
<div class="flexrow">
|
||||||
|
<span class="item-field-label-long margin-item-list">OCV : </span>
|
||||||
|
<span class="item-field-label-medium margin-item-list">{{characteristics.ocv.value}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flexrow">
|
||||||
|
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} OCV : </span>
|
||||||
|
<span class="item-field-label-medium margin-item-list">{{fixNum item.system.ocv}}</span>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (eq subMode "omcv")}}
|
||||||
|
<div class="flexrow">
|
||||||
|
<span class="item-field-label-long margin-item-list">OMCV : </span>
|
||||||
|
<span class="item-field-label-medium margin-item-list">{{characteristics.omcv.value}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="flexrow">
|
||||||
|
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} OMCV : </span>
|
||||||
|
<span class="item-field-label-medium margin-item-list">{{fixNum item.system.omcv}}</span>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#if item}}
|
{{#if item}}
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} - {{upperFirst item.name}}</span>
|
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} - {{upperFirst item.name}}</span>
|
||||||
|
@ -7,12 +7,6 @@
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
{{#if img}}
|
|
||||||
<div >
|
|
||||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -7,22 +7,35 @@
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
{{#if img}}
|
|
||||||
<div >
|
|
||||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Name : {{title}}</li>
|
<li>Name : {{title}}</li>
|
||||||
|
<li>Damage Effect: {{upperFirst item.system.damageeffect}}</li>
|
||||||
<li>Damage formula : {{diceFormula}}</li>
|
<li>Damage formula : {{diceFormula}}</li>
|
||||||
<li><strong>TOTAL : {{result}}</strong></li>
|
<li><strong>Total formula : {{result}}</strong></li>
|
||||||
|
|
||||||
|
{{#if (eq item.system.damageeffect "normal")}}
|
||||||
<li><strong>BODY : {{bodyValue}}</strong></li>
|
<li><strong>BODY : {{bodyValue}}</strong></li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (eq item.system.damageeffect "killing")}}
|
||||||
|
<li><strong>1d3 result + STUNx : {{killingMultiplier}} + {{item.system.stunx}} = {{add killingMultiplier item.system.stunx}}</strong></li>
|
||||||
|
<li><strong>STUN : {{stunValue}}</strong></li>
|
||||||
|
<li><strong>BODY : {{result}}</strong></li>
|
||||||
|
<li><strong>Penetrating BODY : {{bodyValue}}</strong></li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (eq item.system.damageeffect "stunonly")}}
|
||||||
|
<li><strong>STUN : {{stunValue}}</strong></li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (eq item.system.damageeffect "bodyonly")}}
|
||||||
|
<li><strong>BODY : {{bodyValue}}</strong></li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -7,12 +7,6 @@
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
{{#if img}}
|
|
||||||
<div >
|
|
||||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -23,6 +17,21 @@
|
|||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if weapon}}
|
||||||
|
<li>Weapon : {{weapon.name}}
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if maneuver}}
|
||||||
|
<li>Maneuver : {{maneuver.name}}
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if power}}
|
||||||
|
<li>Power : {{power.name}}
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#if rollSource}}
|
{{#if rollSource}}
|
||||||
<li>Roll : {{rollSource}}</li>
|
<li>Roll : {{rollSource}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@ -33,6 +42,12 @@
|
|||||||
|
|
||||||
{{#if item}}
|
{{#if item}}
|
||||||
<li>{{item.name}} ({{upperFirst item.type}})</li>
|
<li>{{item.name}} ({{upperFirst item.type}})</li>
|
||||||
|
{{#if (eq item.type "maneuver")}}
|
||||||
|
<li>{{item.system.effects}}</li>
|
||||||
|
{{#if item.system.haseffectroll}}
|
||||||
|
<li>{{item.system.effectrollformula}}</li>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if (exists bonusMalus)}}
|
{{#if (exists bonusMalus)}}
|
||||||
@ -42,7 +57,7 @@
|
|||||||
|
|
||||||
<li><strong>TOTAL : {{result}}</strong>
|
<li><strong>TOTAL : {{result}}</strong>
|
||||||
{{#if (exists margin)}}
|
{{#if (exists margin)}}
|
||||||
({{#if isSuccess}}Success!!{{else}}Failure!{{/if}})
|
(<strong>{{#if isSuccess}}Success!!{{else}}Failure!{{/if}}</strong>)
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@ -51,7 +66,15 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if (exists margin)}}
|
{{#if (exists margin)}}
|
||||||
<li><strong>Margin : {{margin}}</strong>
|
{{#if (eq subMode "normal")}}
|
||||||
|
<li><strong>Margin : {{margin}}</strong>
|
||||||
|
{{/if}}
|
||||||
|
{{#if (eq subMode "ocv")}}
|
||||||
|
<li><strong>Margin (DCV Hit): {{margin}}</strong>
|
||||||
|
{{/if}}
|
||||||
|
{{#if (eq subMode "omcv")}}
|
||||||
|
<li><strong>Margin (DMCV Hit): {{margin}}</strong>
|
||||||
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -7,12 +7,6 @@
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
{{#if img}}
|
|
||||||
<div >
|
|
||||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user