Compare commits
59 Commits
fvtt-hero-
...
master
Author | SHA1 | Date | |
---|---|---|---|
a5c6ae8fcb | |||
5e42cfbab1 | |||
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 | |||
8f10b9825e | |||
297c94adb7 | |||
b535a86116 | |||
270c7c4a91 | |||
0b0b74754f | |||
cf4de99242 |
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
|
||||
|
||||
![Snapshot](https://www.lahiette.com/leratierbretonnien/wp-content/uploads/2023/08/hero6_snapshot_02.webp "Snapshot")
|
||||
|
||||
Installation
|
||||
Manifest URL: https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/master/system.json
|
||||
Project page : https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6
|
||||
|
||||
For manual installation, use the provided manifest URL in the "Install System" popup window while managing game systems.
|
||||
|
||||
Copyright (c) 2023 Legendsmiths, LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
All content for the HERO System™® is DOJ, Inc.’s trademark for its roleplaying system. HERO System Copyright ©1984, 1989, 2002, 2009 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Fantasy Hero ©2003, 2010 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Star Hero ©2003, 2011 by DOJ, Inc. d/b/a Hero Games. All rights reserved. All DOJ trademarks and copyrights used with permission and under license with Legendsmiths , LLC. For further information about Hero Games and the HERO System, visit www.herogames.com. All HERO System™® content is not be included to copy, modify, merge, publish, distribute, sublicense, and/or sell with copies of the Software with the exception of the current licensee Legendsmiths, LLC.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
@ -39,9 +39,9 @@
|
||||
{"name":"Concealment","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Concealment","description":"Concealment represents a character’s ability to hide things and to find things which others have hidden — important papers, weapons, jewels, arti- facts, drugs, and so forth.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505024,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"YfLechAkLdcHGPCm"}
|
||||
{"name":"Security Systems","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Security Systems","description":"A character with Security Systems can locate, recognize, evade, and build various types of alarms and traps. This usually requires the proper equipment, and often a lot of time (one Turn or longer) as well.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505024,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"bBoNhL0myNTylcHm"}
|
||||
{"name":"Transport Familiarity","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Transport Familiarity","description":"This Background Skill allows characters to drive or pilot specific types of vehicles, or ride a living mount, under routine conditions (combat or crisis conditions require other Skills listed above).\nEach Transport Familiarity (TF) costs 2 Character Points. The character must select one of the following groups of vehicles:\n\nRiding Animals (horses, camels, elephants, and so on)\nGround Vehicles (cars, trucks, trains, motorcycles, sleds, snowmobiles)\nWater Vehicles (rowed boats, sailed boats, motorized boats)\nAir Vehicles (airplanes, helicopters) Space Vehicles (spaceships, starships) Mecha\nCharacters can purchase a TF with a single specific type of vehicle for 1 Character Point. This includes not only individual vehicles (Ford Mus- tangs, Los Angeles-class submarines) but recreational “vehicles” (such as SCUBA, Parachuting, Snow Skiing, or the like).","notes":"","effects":"","cost":"","activecost":"","basecost":"","value":"","modifiers":"","skilltype":"Background","characteristic":"","base":"","levelscost":"","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505028,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"bstMbLdHkP16NpyE"}
|
||||
{"name":"Charm","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Charm","description":"Charm is the ability to gain others’ trust (and perhaps even friendship) by offering companionship or favors. This Skill is normally only for use on NPCs; a player should have more control over his character’s actions. The GM may rule that Charm can be used on a PC when it fits his Complications or personality.","notes":"","effects":"","cost":null,"activecost":null,"basecost":3,"value":"","modifiers":"","skilltype":"interaction","characteristic":"PRE","base":"","levelscost":2,"levels":null,"skilllevelonly":0,"skillfamiliarity":0,"skilleveryman":false,"skillprofiency":0,"plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.39","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1686003305741,"lastModifiedBy":"psfGTCIZQgpI1hvV"},"ownership":{"default":0,"psfGTCIZQgpI1hvV":3},"folder":null,"sort":0,"_id":"ddpdwDnfixUNP0eF"}
|
||||
{"name":"Streetwise","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Streetwise","description":"Streetwise gives a character knowledge of the seamy side of civilization. He knows how to find the black market, talk to thugs and criminals, gain information, deal with organized (and not so organized) crime figures, and so on.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Interaction","characteristic":"PRE","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505023,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"gIYMsOzBOnRNRCLv"}
|
||||
{"name":"Tracking","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Tracking","description":"Characters with Tracking can follow a trail by observing tracks, marks, broken twigs and so forth, and also know how to hide tracks.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505027,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"gpzcF5naO9H3vNzi"}
|
||||
{"name":"Charm","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Charm","description":"Charm is the ability to gain others’ trust (and perhaps even friendship) by offering companionship or favors. This Skill is normally only for use on NPCs; a player should have more control over his character’s actions. The GM may rule that Charm can be used on a PC when it fits his Complications or personality.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Interaction","characteristic":"PRE","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505026,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"hZxL8I4mNlTsA9xQ"}
|
||||
{"name":"Systems Operation","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Systems Operation","description":"Characters with Systems Operation know how to operate sensing and communication devices properly. It does not cover navigational equipment (that’s Navigation) or encoding transmissions (that’s Cryptography).","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505025,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"j7rkLue81LaHIzz7"}
|
||||
{"name":"Ventriloquism","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Ventriloquism","description":"A character with Ventriloquism can make his voice sound as if it’s coming from somewhere other than himself, and can speak without apparently moving his lips. Ventriloquism is detected with a PER Roll in a Skill Versus Skill Contest. A Ventriloquism roll takes a -1 for every 2m of distance between the ventriloquist and the point where the voice “speaks.”","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505026,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"jFd7i04Eu1FLCEpJ"}
|
||||
{"name":"High Society","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"High Society","description":"Characters with High Society know about upper-class culture and how to interact with it: what clothes to wear, which fork to use for shrimp, who’s who, the gossip and “court politics” applicable to the situation, and so forth.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Interaction","characteristic":"PRE","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505025,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"m40buQ4y7AzWbrA9"}
|
47
changelog.md
Normal file
47
changelog.md
Normal file
@ -0,0 +1,47 @@
|
||||
v11.0.23
|
||||
|
||||
- Proper display of BODY/STUN bars on tokens
|
||||
|
||||
v11.0.22
|
||||
|
||||
- Fix actor sheet (powers, characteristics)
|
||||
- Fix weapons roll
|
||||
|
||||
v11.0.21
|
||||
|
||||
- Fix grid default distance in system.json
|
||||
- Fix powers roll again (#29)
|
||||
|
||||
v11.0.20
|
||||
|
||||
- Enhance chat message output (cf #25)
|
||||
- Enhance roll window
|
||||
- Code simplification
|
||||
|
||||
v11.0.19
|
||||
|
||||
- Fix killing damage computation (again)
|
||||
|
||||
v11.0.18
|
||||
|
||||
- Fix killing damage computation
|
||||
|
||||
v11.0.17
|
||||
|
||||
- Fix tickets 1, 2, 3, 7, 8, 9, 10
|
||||
- Implements effects tagging (#11)
|
||||
|
||||
v11.0.16
|
||||
|
||||
- Fix mental maneuvers rolls
|
||||
- Renamed title
|
||||
|
||||
v11.0.15
|
||||
|
||||
- Fix target rolls for power
|
||||
- Add maneuvers roll in the maneuver tab
|
||||
- Renamed title
|
||||
|
||||
v11.0.14
|
||||
|
||||
- Initial public release
|
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": {
|
||||
"TypeCharacter": "Character"
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"character": "Character",
|
||||
"minion": "Minion"
|
||||
},
|
||||
"Item": {
|
||||
"skill": "Skill",
|
||||
"perk": "Perk",
|
||||
"power": "Power",
|
||||
"talent": "Talent",
|
||||
"advantage": "Advantage",
|
||||
"martialart": "Martial art",
|
||||
"limitation": "Limitation",
|
||||
"complication": "Complication",
|
||||
"equipment": "Equipment",
|
||||
"currency": "Currency",
|
||||
"maneuver": "Maneuver"
|
||||
}
|
||||
},
|
||||
"ITEM": {
|
||||
"TypeSkill": "Skill",
|
||||
"TypePerk": "Perk",
|
||||
"TypePower": "Power",
|
||||
"TypeTalent": "Talent",
|
||||
"TypeAdvantage": "Advantage",
|
||||
"TypeMartialart": "Martial art",
|
||||
"TypeLimitation": "Limitation",
|
||||
"TypeComplication": "Complication",
|
||||
"TypeEquipment": "Equipment",
|
||||
"TypeCurrency": "Currency",
|
||||
"TypeManeuver": "Maneuver"
|
||||
"COMBAT": {
|
||||
"TurnPrev": "Previous initiative",
|
||||
"RoundPrev": "Previous segment",
|
||||
"TurnNext": "Next initiative",
|
||||
"RoundNext": "Next segment"
|
||||
}
|
||||
}
|
@ -46,13 +46,17 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
complications: this.actor.getComplications( ),
|
||||
maneuvers: this.actor.getManeuvers( ),
|
||||
nonstockmaneuvers: this.actor.getNonStockManeuvers(),
|
||||
allmaneuvers: this.actor.getAllManeuvers(),
|
||||
weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
|
||||
armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
|
||||
shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
|
||||
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()),
|
||||
race: duplicate(this.actor.getRace()),
|
||||
encCapacity: this.actor.getEncumbranceCapacity(),
|
||||
isHold: this.actor.getHoldAction(),
|
||||
isAbort: this.actor.getAbortAction(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
motivation: await TextEditor.enrichHTML(this.object.system.biodata.motivation, {async: true}),
|
||||
quote: await TextEditor.enrichHTML(this.object.system.biodata.quote, {async: true}),
|
||||
@ -66,12 +70,15 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
notes5: await TextEditor.enrichHTML(this.object.system.biodata.notes5, {async: true}),
|
||||
containersTree: this.actor.containersTree,
|
||||
encCurrent: this.actor.encCurrent,
|
||||
totalValue: this.actor.totalValue,
|
||||
options: this.options,
|
||||
owner: this.document.isOwner,
|
||||
editScore: this.options.editScore,
|
||||
isGM: game.user.isGM
|
||||
}
|
||||
|
||||
this.formData = formData;
|
||||
this.stockManeuverDisplayed = false
|
||||
|
||||
console.log("PC : ", formData, this.object);
|
||||
return formData;
|
||||
@ -86,9 +93,9 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
html.bind("keydown", function(e) { // Ignore Enter in actores sheet
|
||||
/*html.bind("keydown", function(e) { // Ignore Enter in actores sheet
|
||||
if (e.keyCode === 13) return false;
|
||||
});
|
||||
});*/
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
@ -152,12 +159,22 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
const characKey = $(event.currentTarget).data("charac-key");
|
||||
this.actor.rollCharac(characKey);
|
||||
});
|
||||
html.find('.roll-perception').click((event) => {
|
||||
this.actor.rollPerception("int");
|
||||
});
|
||||
html.find('.roll-weapon').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
this.actor.rollWeapon(li.data("item-id"));
|
||||
});
|
||||
html.find('.roll-power-attack').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
this.actor.rollPowerAttack(li.data("item-id"));
|
||||
});
|
||||
html.find('.roll-direct').click((event) => {
|
||||
const rollFormula = $(event.currentTarget).data("roll-formula")
|
||||
const rollSource = $(event.currentTarget).data("roll-source")
|
||||
Hero6Utility.processDirectRoll( { actorId: this.actor.id, rollFormula: rollFormula, rollSource: rollSource, mode:"directroll"} )
|
||||
});
|
||||
|
||||
});
|
||||
html.find('.roll-item').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id")
|
||||
@ -172,14 +189,25 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.rollLiftDice(itemId);
|
||||
});
|
||||
|
||||
html.find('.hold-action').click((event) => {
|
||||
this.actor.holdAction()
|
||||
});
|
||||
html.find('.abort-action').click((event) => {
|
||||
this.actor.abortAction()
|
||||
});
|
||||
|
||||
html.find('.roll-weapon').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const skillId = li.data("item-id")
|
||||
this.actor.rollWeapon(skillId)
|
||||
html.find(".show-stock-maneuver").click((event) => {
|
||||
if ( !this.stockManeuverDisplayed) {
|
||||
$('div .maneuver-list').removeClass('maneuver-is-stock');
|
||||
this.stockManeuverDisplayed = true
|
||||
} else {
|
||||
$('div .maneuver-list').addClass('maneuver-is-stock');
|
||||
this.stockManeuverDisplayed = false
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
this.options.editScore = !this.options.editScore;
|
||||
this.render(true);
|
||||
|
@ -4,7 +4,7 @@ import { Hero6RollDialog } from "./hero6-roll-dialog.js";
|
||||
import { Hero6LiftDice } from "./hero6-lift-dice.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const __speed2Segments = [[0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12]
|
||||
const __speed2Segments = [[0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12],
|
||||
[2, 4, 6, 7, 9, 11, 12], [2, 3, 5, 6, 8, 9, 11, 12], [2, 3, 4, 6, 7, 8, 10, 11, 12], [2, 3, 4, 5, 6, 8, 9, 10, 11, 12],
|
||||
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
|
||||
|
||||
@ -40,11 +40,10 @@ export class Hero6Actor extends Actor {
|
||||
return actor;
|
||||
}
|
||||
|
||||
if (data.type == 'character') {
|
||||
//const skills = await Hero6Utility.loadCompendium("fvtt-hero-system-6.skills");
|
||||
//data.items = skills.map(i => i.toObject())
|
||||
}
|
||||
if (data.type == 'npc') {
|
||||
if (data.type == 'character' || data.type == 'minion') {
|
||||
const maneuvers = await Hero6Utility.loadCompendium("fvtt-hero-system-6.maneuvers")
|
||||
let maneuversObj = maneuvers.map(i => i.toObject())
|
||||
data.items = maneuversObj.filter(m => m.system.isstock)
|
||||
}
|
||||
|
||||
return super.create(data, options);
|
||||
@ -60,10 +59,20 @@ export class Hero6Actor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeHitPoints() {
|
||||
if (this.type == "character") {
|
||||
computeDerivatedData() {
|
||||
let newSTREND = this.computeSTREND()
|
||||
if (newSTREND != this.system.characteristics.str.strend) {
|
||||
this.update({ 'system.characteristics.str.strend': newSTREND })
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
performMigration() {
|
||||
// Fix OCV/OMCV rollable
|
||||
if (!this.system.characteristics.ocv.hasroll) {
|
||||
this.update({ 'system.characteristics.ocv.hasroll': true, 'system.characteristics.omcv.hasroll': true })
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
computeDicesValue() {
|
||||
this.system.biodata.presenceattack = Hero6Utility.getDerivatedDiceFormulas(this.system.characteristics.pre.value)
|
||||
this.system.characteristics.str.strdice = Hero6LiftDice.getLiftDice(this.system.characteristics.str.value)
|
||||
@ -75,7 +84,7 @@ export class Hero6Actor extends Actor {
|
||||
if (this.type == 'character' || game.user.isGM) {
|
||||
this.system.encCapacity = this.getEncumbranceCapacity()
|
||||
this.buildContainerTree()
|
||||
this.computeHitPoints()
|
||||
this.computeDerivatedData()
|
||||
this.computeDicesValue()
|
||||
}
|
||||
|
||||
@ -90,7 +99,10 @@ export class Hero6Actor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getEncumbranceCapacity() {
|
||||
return 1;
|
||||
let numLift = this.system.characteristics.str.lift.match(/\d*\s/g)
|
||||
if (numLift && numLift[0] && Number(numLift[0])) {
|
||||
return numLift[0] / 2
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -147,18 +159,6 @@ export class Hero6Actor extends Actor {
|
||||
return listItem
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getConditions() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'condition') || []);
|
||||
Hero6Utility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getWeapons() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []);
|
||||
Hero6Utility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getItemById(id) {
|
||||
let item = this.items.find(item => item.id == id);
|
||||
@ -167,6 +167,19 @@ export class Hero6Actor extends Actor {
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _preCreate(data, options, user) {
|
||||
await super._preCreate(data, options, user);
|
||||
|
||||
// Configure prototype token settings
|
||||
const prototypeToken = {};
|
||||
if (this.type === "character") Object.assign(prototypeToken, {
|
||||
sight: { enabled: true }, actorLink: true, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
|
||||
});
|
||||
this.updateSource({ prototypeToken });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareSkill(skill) {
|
||||
skill.roll = 0
|
||||
@ -203,12 +216,34 @@ export class Hero6Actor extends Actor {
|
||||
skill.roll = charac.roll
|
||||
}
|
||||
}
|
||||
console.log("SILL", skill)
|
||||
if (skill.system.levels > 0) {
|
||||
skill.roll += skill.system.levels
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareManeuver(maneuver) {
|
||||
let subMode = "normal"
|
||||
if (maneuver.system.maneuvertype == "mental") {
|
||||
maneuver.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0)
|
||||
subMode = "omcv"
|
||||
if (Number(maneuver.system.omcv)) {
|
||||
maneuver.roll += (Number(maneuver.system.omcv) || 0)
|
||||
} else {
|
||||
maneuver.noOMCV = true
|
||||
}
|
||||
} else {
|
||||
maneuver.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0)
|
||||
subMode = "ocv"
|
||||
if (Number(maneuver.system.ocv)) {
|
||||
maneuver.roll += (Number(maneuver.system.ocv) || 0)
|
||||
} else {
|
||||
maneuver.noOCV = true
|
||||
}
|
||||
}
|
||||
return subMode
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getSkills() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'skill') || [])
|
||||
@ -280,11 +315,18 @@ export class Hero6Actor extends Actor {
|
||||
let maneuvers = {
|
||||
general: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "general"),
|
||||
offensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "offensive"),
|
||||
defensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "defensive")
|
||||
defensive: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "defensive"),
|
||||
mental: this.items.filter(item => item.type == "maneuver" && item.system.maneuvertype == "mental")
|
||||
}
|
||||
Hero6Utility.sortArrayObjectsByName(maneuvers.general)
|
||||
Hero6Utility.sortArrayObjectsByName(maneuvers.offensive)
|
||||
Hero6Utility.sortArrayObjectsByName(maneuvers.defensive)
|
||||
Hero6Utility.sortArrayObjectsByName(maneuvers.mental)
|
||||
return maneuvers
|
||||
}
|
||||
getAllManeuvers() {
|
||||
let maneuvers = this.items.filter(item => item.type == "maneuver")
|
||||
Hero6Utility.sortArrayObjectsByName(maneuvers)
|
||||
return maneuvers
|
||||
}
|
||||
getNonStockManeuvers() {
|
||||
@ -297,6 +339,11 @@ export class Hero6Actor extends Actor {
|
||||
Hero6Utility.sortArrayObjectsByName(list)
|
||||
return list
|
||||
}
|
||||
getMoneys() {
|
||||
let list = this.items.filter(item => item.type == "equipment" && item.system.subtype == "money");
|
||||
Hero6Utility.sortArrayObjectsByName(list)
|
||||
return list
|
||||
}
|
||||
getWeapons() {
|
||||
let list = this.items.filter(item => item.type == "equipment" && item.system.subtype == "weapon");
|
||||
Hero6Utility.sortArrayObjectsByName(list)
|
||||
@ -324,46 +371,21 @@ export class Hero6Actor extends Actor {
|
||||
}
|
||||
|
||||
/* ------------------------------------------- */
|
||||
async buildContainerTree() {
|
||||
let equipments = duplicate(this.items.filter(item => item.type == "equipment") || [])
|
||||
for (let equip1 of equipments) {
|
||||
if (equip1.system.iscontainer) {
|
||||
equip1.system.contents = []
|
||||
equip1.system.contentsEnc = 0
|
||||
for (let equip2 of equipments) {
|
||||
if (equip1._id != equip2.id && equip2.system.containerid == equip1.id) {
|
||||
equip1.system.contents.push(equip2)
|
||||
let q = equip2.system.quantity ?? 1
|
||||
equip1.system.contentsEnc += q * equip2.system.weight
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Compute whole enc
|
||||
buildContainerTree() {
|
||||
let equipments = duplicate(this.items.filter(item => item.type == "equipment") || []);
|
||||
let enc = 0
|
||||
for (let item of equipments) {
|
||||
//item.data.idrDice = Hero6Utility.getDiceFromLevel(Number(item.data.idr))
|
||||
if (item.system.equipped) {
|
||||
if (item.system.iscontainer) {
|
||||
enc += item.system.contentsEnc
|
||||
} else if (item.system.containerid == "") {
|
||||
let q = item.system.quantity ?? 1
|
||||
enc += q * item.system.weight
|
||||
}
|
||||
let value = 0
|
||||
for (let equip1 of equipments) {
|
||||
if (Number(equip1.system.weight) && Number(equip1.system.quantity)) {
|
||||
enc += equip1.system.weight * equip1.system.quantity
|
||||
}
|
||||
if (Number(equip1.system.value) && Number(equip1.system.quantity)) {
|
||||
value += equip1.system.value * equip1.system.quantity
|
||||
}
|
||||
}
|
||||
for (let item of this.items) { // Process items/shields/armors
|
||||
if ((item.type == "weapon" || item.type == "shield" || item.type == "armor") && item.system.equipped) {
|
||||
let q = item.system.quantity ?? 1
|
||||
enc += q * item.system.weight
|
||||
}
|
||||
}
|
||||
|
||||
// Store local values
|
||||
this.encCurrent = enc
|
||||
this.containersTree = equipments.filter(item => item.system.containerid == "") // Returns the root of equipements without container
|
||||
|
||||
this.totalValue = value
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -392,7 +414,7 @@ export class Hero6Actor extends Actor {
|
||||
} else {
|
||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': containerId }])
|
||||
}
|
||||
} else if (object && object.system.containerid) { // remove from container
|
||||
} else if (object?.system?.containerid) { // remove from container
|
||||
console.log("Removeing: ", object)
|
||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': "" }]);
|
||||
}
|
||||
@ -409,28 +431,93 @@ export class Hero6Actor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async equipGear(equipmentId) {
|
||||
let item = this.items.find(item => item.id == equipmentId);
|
||||
if (item && item.system) {
|
||||
if (item?.system) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async cleanCombat() {
|
||||
await this.setFlag("world", "hold-action", false)
|
||||
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
||||
}
|
||||
async holdAction() {
|
||||
await this.disableAbortAction()
|
||||
if (this.getFlag("world", "hold-action")) {
|
||||
await this.setFlag("world", "hold-action", false)
|
||||
//game.combat.holdAction(this.id, false)
|
||||
game.combat.forceHold(this, false)
|
||||
return false
|
||||
} else {
|
||||
await this.setFlag("world", "hold-action", true)
|
||||
//game.combat.holdAction(this.id, false)
|
||||
game.combat.forceHold(this, true)
|
||||
return true
|
||||
}
|
||||
}
|
||||
async disableHoldAction() {
|
||||
await this.setFlag("world", "hold-action", false)
|
||||
}
|
||||
async disableAbortAction() {
|
||||
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
||||
}
|
||||
async abortAction() {
|
||||
await this.disableHoldAction()
|
||||
let abort = this.getFlag("world", "abort-action")
|
||||
if (abort.state) {
|
||||
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
||||
game.combat.forceAbort(this, false)
|
||||
//game.combat.abortAction(this.id, false)
|
||||
} else {
|
||||
await this.setFlag("world", "abort-action", { state: true, count: 0 })
|
||||
game.combat.forceAbort(this, true)
|
||||
//game.combat.abortAction(this.id, true)
|
||||
}
|
||||
}
|
||||
async incAbortActionCount() {
|
||||
let abort = this.getFlag("world", "abort-action")
|
||||
if (abort.state) {
|
||||
abort.count++
|
||||
await this.setFlag("world", "abort-action", abort)
|
||||
if (abort.count == 2) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
getHoldAction() {
|
||||
return this.getFlag("world", "hold-action")
|
||||
}
|
||||
getAbortAction() {
|
||||
let abort = this.getFlag("world", "abort-action")
|
||||
return abort?.state || false
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
hasPhase(segmentNumber) {
|
||||
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
||||
let phases = __speed2Segments[index]
|
||||
console.log("index", segmentNumber, index, phases, phases.includes(segmentNumber), __speed2Segments)
|
||||
return phases.includes(segmentNumber)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getSegments() {
|
||||
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
||||
//console.log("INDEX", index, __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() {
|
||||
let r = new Roll("1d6").roll({ async: false })
|
||||
let base = this.system.characteristics.dex.value + (r.total / 10)
|
||||
return base
|
||||
getBaseInit(turn) {
|
||||
if (turn != this.turn) {
|
||||
let r = new Roll("1d6").roll({ async: false })
|
||||
this.currentInit = Number(this.system.characteristics.dex.initiative) + Number(((r.total / 10).toFixed(2)))
|
||||
this.turn = turn
|
||||
}
|
||||
return this.currentInit
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -460,8 +547,13 @@ export class Hero6Actor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
prepareCharacValues(charac) {
|
||||
charac.total = charac.value
|
||||
charac.roll = 9 + Math.floor((charac.value) / 5)
|
||||
if (charac.label == "OCV" || charac.label == "OMCV" ) {
|
||||
charac.total = charac.value
|
||||
charac.roll = 11 + charac.value
|
||||
} else {
|
||||
charac.total = charac.value
|
||||
charac.roll = 9 + Math.round((charac.value) / 5)
|
||||
}
|
||||
}
|
||||
prepareCharac() {
|
||||
let characs = duplicate(this.system.characteristics)
|
||||
@ -472,6 +564,12 @@ export class Hero6Actor extends Actor {
|
||||
ch.lift = Hero6LiftDice.getLift(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
|
||||
}
|
||||
@ -485,6 +583,22 @@ export class Hero6Actor extends Actor {
|
||||
return skill;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeSTREND() {
|
||||
let newSTREND = 0
|
||||
switch (this.system.characteristics.str.strendmode) {
|
||||
case "str20":
|
||||
newSTREND = Math.floor(this.system.characteristics.str.value / 20)
|
||||
break;
|
||||
case "str10":
|
||||
newSTREND = Math.floor(this.system.characteristics.str.value / 10)
|
||||
break;
|
||||
case "str5":
|
||||
newSTREND = Math.floor(this.system.characteristics.str.value / 5)
|
||||
break;
|
||||
}
|
||||
return newSTREND
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async deleteAllItemsByType(itemType) {
|
||||
let items = this.items.filter(item => item.type == itemType);
|
||||
@ -527,6 +641,9 @@ export class Hero6Actor extends Actor {
|
||||
rollData.actorImg = this.img
|
||||
rollData.actorId = this.id
|
||||
rollData.img = this.img
|
||||
rollData.title = this.name
|
||||
rollData.subMode = "normal"
|
||||
rollData.characteristics = duplicate(this.system.characteristics)
|
||||
if (chKey) {
|
||||
rollData.charac = duplicate(this.system.characteristics[chKey])
|
||||
this.prepareCharacValues(rollData.charac)
|
||||
@ -545,23 +662,35 @@ export class Hero6Actor extends Actor {
|
||||
const ray = new Ray(token.object?.center || token.center, defenderToken.center)
|
||||
rollData.tokensDistance = canvas.grid.measureDistances([{ ray }], { gridSpaces: false })[0] / canvas.grid.grid.options.dimensions.distance
|
||||
} else {
|
||||
ui.notifications.info("No token connected to this actor, unable to compute distance.")
|
||||
return
|
||||
//ui.notifications.info("No token connected to this actor, unable to compute distance.")
|
||||
//return
|
||||
}
|
||||
if (defender) {
|
||||
rollData.forceAdvantage = defender.isAttackerAdvantage()
|
||||
rollData.advantageFromTarget = true
|
||||
}
|
||||
}
|
||||
console.log("ROLLDATA", rollData)
|
||||
|
||||
return rollData
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
rollPerception() {
|
||||
let rollData = this.getCommonRollData("int")
|
||||
rollData.isPerception = true
|
||||
rollData.title = "Perception roll"
|
||||
rollData.charac.roll = Number(rollData.charac.perceptionroll)
|
||||
rollData.mode = "perception"
|
||||
if (rollData.target) {
|
||||
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
|
||||
return
|
||||
}
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollCharac(chKey) {
|
||||
let rollData = this.getCommonRollData(chKey)
|
||||
rollData.mode = "charac"
|
||||
rollData.title = "Characteristic roll"
|
||||
if (rollData.target) {
|
||||
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
|
||||
return
|
||||
@ -573,10 +702,14 @@ export class Hero6Actor extends Actor {
|
||||
let item = this.items.get(itemId)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "item"
|
||||
rollData.title = Hero6Utility.upperFirst(item.type) + " - " + item.name
|
||||
rollData.item = duplicate(item)
|
||||
if (item.type == "skill") {
|
||||
this.prepareSkill(rollData.item)
|
||||
}
|
||||
if (item.type == "maneuver") {
|
||||
rollData.subMode = this.prepareManeuver(rollData.item)
|
||||
}
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
@ -585,17 +718,36 @@ export class Hero6Actor extends Actor {
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "damage"
|
||||
rollData.item = duplicate(item)
|
||||
rollData.title = item.name
|
||||
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(item.system.damage)
|
||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
|
||||
//await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
|
||||
rollData.roll = myRoll
|
||||
rollData.result = myRoll.total
|
||||
rollData.bodyValue = Hero6Utility.computeBodyValue(myRoll)
|
||||
|
||||
let mult
|
||||
if (item.system.damageeffect == "killing") { // As per issue #11
|
||||
mult = new Roll("1d3").roll({ async: false })
|
||||
rollData.killingMultiplier = mult.total
|
||||
rollData.stunValue = Number(myRoll.total) * (Number(mult.total) + (Number(item.system.stunx) || 0))
|
||||
} else {
|
||||
rollData.stunValue = myRoll.total
|
||||
}
|
||||
|
||||
let msg = await Hero6Utility.createChatWithRollMode(rollData.alias, {
|
||||
content: 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({
|
||||
user: game.user.id,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
flavor: msgFlavor
|
||||
})
|
||||
|
||||
if (mult) {
|
||||
await Hero6Utility.showDiceSoNice(mult, game.settings.get("core", "rollMode"))
|
||||
}
|
||||
|
||||
rollData.roll = duplicate(rollData.roll) // Convert to object
|
||||
msg.setFlag("world", "rolldata", rollData)
|
||||
console.log("Rolldata result", rollData)
|
||||
}
|
||||
@ -604,20 +756,23 @@ export class Hero6Actor extends Actor {
|
||||
async rollLiftDice() {
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "lift-dice"
|
||||
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax( Hero6LiftDice.getLiftDice(this.system.characteristics.str.value))
|
||||
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(Hero6LiftDice.getLiftDice(this.system.characteristics.str.value))
|
||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
|
||||
rollData.roll = myRoll
|
||||
rollData.result = myRoll.total
|
||||
|
||||
let msg = await Hero6Utility.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-lift-dice-result.hbs`, rollData)
|
||||
rollData.bodyValue = Hero6Utility.computeBodyValue(myRoll)
|
||||
rollData.result = myRoll.total
|
||||
rollData.roll = duplicate(myRoll)
|
||||
|
||||
let msgFlavor = await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-lift-dice-result.hbs`, rollData)
|
||||
let msg = await myRoll.toMessage({
|
||||
user: game.user.id,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
flavor: msgFlavor
|
||||
})
|
||||
msg.setFlag("world", "rolldata", rollData)
|
||||
console.log("Rolldata result", rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollSkill(skillId) {
|
||||
let skill = this.items.get(skillId)
|
||||
@ -642,34 +797,58 @@ export class Hero6Actor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollWeapon(weaponId) {
|
||||
async rollWeapon(weaponId) {
|
||||
let weapon = this.items.get(weaponId)
|
||||
if (weapon) {
|
||||
weapon = duplicate(weapon)
|
||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
||||
if (skill) {
|
||||
skill = duplicate(skill)
|
||||
Hero6Utility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
rollData.mode = "weapon"
|
||||
rollData.skill = skill
|
||||
rollData.weapon = weapon
|
||||
rollData.img = weapon.img
|
||||
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
|
||||
rollData.forceDisadvantage = this.isAttackDisadvantage()
|
||||
}
|
||||
/*if (rollData.weapon.system.isranged && rollData.tokensDistance > Hero6Utility.getWeaponMaxRange(rollData.weapon) ) {
|
||||
ui.notifications.warn(`Your target is out of range of your weapon (max: ${Hero6Utility.getWeaponMaxRange(rollData.weapon)} - current : ${rollData.tokensDistance})` )
|
||||
return
|
||||
}*/
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
||||
}
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.subMode = "ocv"
|
||||
rollData.mode = "weapon"
|
||||
rollData.item = weapon
|
||||
rollData.item.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0) + (Number(weapon.system.ocv) || 0)
|
||||
rollData.img = weapon.img
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the weapon " + weapon.name)
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
rollMentalManeuver(maneuverId) {
|
||||
let maneuver = this.items.get(maneuverId)
|
||||
if (maneuver) {
|
||||
maneuver = duplicate(maneuver)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(maneuver.system.omcv) || 0)
|
||||
rollData.mode = "mentalmaneuver"
|
||||
rollData.item = maneuver
|
||||
rollData.img = maneuver.img
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the maneuver " + maneuver.name)
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
rollPowerAttack(powerId ) {
|
||||
let power = this.items.get(powerId)
|
||||
if (power) {
|
||||
power = duplicate(power)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "powerattack"
|
||||
rollData.item = power
|
||||
rollData.img = power.img
|
||||
|
||||
if (power.system.attackvalue == "ocv") {
|
||||
rollData.item.roll = 11 + (Number(this.system.characteristics.ocv.value) || 0) + (Number(power.system.ocv) || 0)
|
||||
rollData.subMode = "ocv"
|
||||
} else {
|
||||
rollData.item.roll = 11 + (Number(this.system.characteristics.omcv.value) || 0) + (Number(power.system.omcv) || 0)
|
||||
rollData.subMode = "omcv"
|
||||
}
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find power " + power.name)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async startRoll(rollData) {
|
||||
let rollDialog = await Hero6RollDialog.create(this, rollData)
|
||||
|
@ -5,7 +5,7 @@ export class Hero6CombatTracker extends CombatTracker {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static get defaultOptions() {
|
||||
var path = "systems/fvtt-hero-system-6/templates/apps/combat-tracker.hbs";
|
||||
let path = "systems/fvtt-hero-system-6/templates/apps/combat-tracker.hbs";
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
template: path,
|
||||
});
|
||||
@ -16,129 +16,283 @@ export class Hero6CombatTracker extends CombatTracker {
|
||||
export class Hero6Combat extends Combat {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static init() {
|
||||
static ready() {
|
||||
Hooks.on("getCombatTrackerEntryContext", (html, options) => { Hero6Combat.pushMenuOptions(html, options); });
|
||||
game.combat.settings.resource = "characteristics.spd.value";
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static pushMenuOptions(html, options) {
|
||||
let newOpt
|
||||
for (let i = 0; i < options.length; i++) {
|
||||
let option = options[i];
|
||||
if (option.name == 'COMBAT.CombatantReroll') { // Replace !
|
||||
option.name = "Hold action";
|
||||
option.name = "Hold/Unhold action";
|
||||
option.condition = true;
|
||||
option.icon = '<i class="far fa-question-circle"></i>';
|
||||
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)
|
||||
}
|
||||
}
|
||||
newOpt.name = "Abort action"
|
||||
newOpt.callback = target => {
|
||||
Hero6Combat.abortAction(target.data('combatant-id'));
|
||||
}
|
||||
options.push( newOpt)
|
||||
//options.push(newOpt)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static holdAction(combatantId) {
|
||||
console.log("Combatant HOLD : ", combatantId)
|
||||
const combatant = game.combat.combatants.get(combatantId)
|
||||
combatant.setFlag("world", "hero6-hold-action", true)
|
||||
combatant.update({name: combatant.name + " (H)"})
|
||||
console.log("HOLD", combatant)
|
||||
holdAction(combatantId) {
|
||||
this.rebuildInitiative()
|
||||
//console.log("Rebuilding.....")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static abortAction(html, combatantId) {
|
||||
console.log("Combatant ABORT : ", combatantId);
|
||||
const combatant = game.combat.combatants.get(combatantId);
|
||||
combatant.setFlag("world", "hero6-abort-action", true)
|
||||
combatant.update({name: combatant.name + " (A)"})
|
||||
console.log("ABORT", combatant)
|
||||
abortAction(actorId, abortState) {
|
||||
this.rebuildInitiative()
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
constructor(data, context) {
|
||||
|
||||
data.flags = { world: { turnData: { turnNumber: 0, segmentNumber: 12} } }
|
||||
|
||||
super(data, context);
|
||||
|
||||
this.turnNumber = 1;
|
||||
this.turnNumber = 0;
|
||||
this.segmentNumber = 12;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async computeInitiative(c) {
|
||||
let id = c._id || c.id
|
||||
if (c.actor.hasPhase(this.segmentNumber)) {
|
||||
let baseInit = c.actor ? c.actor.getBaseInit() : - 1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: baseInit }]);
|
||||
} else {
|
||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: -1, visible: false, active: false }]);
|
||||
async startCombat() {
|
||||
game.combat.settings.resource = "characteristics.spd.value";
|
||||
|
||||
let updList = []
|
||||
for (let c of this.combatants) {
|
||||
this.computeInitiative(c, updList)
|
||||
await c.actor.cleanCombat()
|
||||
}
|
||||
console.log("Combatant", c)
|
||||
if (updList.length > 0) {
|
||||
await this.updateEmbeddedDocuments("Combatant", updList);
|
||||
}
|
||||
|
||||
super.startCombat();
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
forceHold(actor, isHold) {
|
||||
if (game.user.isGM) {
|
||||
let updList = []
|
||||
let c = this.combatants.find(c => c.actor._id == actor.id)
|
||||
let name = actor.name + ((isHold) ? " (H)" : "")
|
||||
console.log("ForceHold!!", c, actor)
|
||||
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
|
||||
this.updateEmbeddedDocuments("Combatant", updList)
|
||||
} else {
|
||||
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_hold", data: { actorId: actor.id, isHold: isHold } });
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
forceAbort(actor, isAbort) {
|
||||
if (game.user.isGM) {
|
||||
let updList = []
|
||||
let c = this.combatants.find(c => c.actor._id == actor.id)
|
||||
let name = actor.name + ((isAbort) ? " (A)" : "")
|
||||
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
|
||||
this.updateEmbeddedDocuments("Combatant", updList)
|
||||
} else {
|
||||
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_abort", data: { actorId: actor.id, isAbort: isAbort } });
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeInitiative(c, updList) {
|
||||
let id = c._id || c.id
|
||||
let hasSegment = c.actor.hasPhase(this.segmentNumber)
|
||||
let isOnHold = c.actor.getHoldAction()
|
||||
let isOnAbort = c.actor.getAbortAction()
|
||||
let name = c.actor.name
|
||||
if (hasSegment || isOnHold || isOnAbort) {
|
||||
let baseInit = c.actor ? c.actor.getBaseInit(this.segmentNumber) : 0;
|
||||
if (isOnHold) {
|
||||
if (hasSegment) { // On hold + current segment -> auto-disable on hold
|
||||
c.actor.disableHoldAction()
|
||||
} else {
|
||||
name = c.actor.name + " (H)"
|
||||
}
|
||||
}
|
||||
if (isOnAbort) {
|
||||
name = c.actor.name + " (A)"
|
||||
if (c.actor.incAbortActionCount()) {
|
||||
c.actor.disableAbortAction()
|
||||
}
|
||||
}
|
||||
updList.push({ _id: id, name: name, initiative: baseInit, holdAction: c.holdAction })
|
||||
} else {
|
||||
updList.push({ _id: id, name: name, initiative: 0, holdAction: c.holdAction })
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
|
||||
let updList = []
|
||||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
const c = this.combatants.get(ids[cId])
|
||||
await this.computeInitiative(c)
|
||||
this.computeInitiative(c, updList)
|
||||
}
|
||||
|
||||
if (updList.length > 0) {
|
||||
await this.updateEmbeddedDocuments("Combatant", updList);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
nextRound() {
|
||||
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
|
||||
if (this.settings.skipDefeated && (turn !== null)) {
|
||||
turn = this.turns.findIndex(t => !t.isDefeated);
|
||||
if (turn === -1) {
|
||||
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
|
||||
turn = 0;
|
||||
async rebuildInitiative() {
|
||||
let updList = []
|
||||
for (let c of this.combatants) {
|
||||
this.computeInitiative(c, updList)
|
||||
}
|
||||
if (updList.length > 0) {
|
||||
await this.updateEmbeddedDocuments("Combatant", updList);
|
||||
//console.log("Rebuild INIT", updList)
|
||||
for (let c of updList) {
|
||||
if (c.initiative != 0) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
let advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime;
|
||||
advanceTime += CONFIG.time.roundTime;
|
||||
let nextRound = this.round + 1;
|
||||
return false
|
||||
}
|
||||
|
||||
let turnData = this.getFlag("world", "hero6-turn-data")
|
||||
if (!turnData) {
|
||||
turnData = { turnNumber: 1, segmentNumber: 12 }
|
||||
this.setFlag("world", "hero6-turn-data", turnData)
|
||||
/* -------------------------------------------- */
|
||||
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()
|
||||
}
|
||||
turnData = duplicate(turnData)
|
||||
turnData.segmentNumber -= 1
|
||||
if (turnData.segmentNumber <= 0) {
|
||||
turnData.segmentNumber = 12
|
||||
turnData.turnNumber++
|
||||
}
|
||||
this.setFlag("world", "hero6-turn-data", turnData)
|
||||
this.turnNumber = turnData.turnNumber;
|
||||
this.segmentNumber = turnData.segmentNumber;
|
||||
}
|
||||
|
||||
// Re-compute init of actors
|
||||
for (let c of this.combatants) {
|
||||
this.computeInitiative(c)
|
||||
/* -------------------------------------------- */
|
||||
async previousRound() {
|
||||
let hasCombatants = false
|
||||
let nextRound = this.round
|
||||
let advanceTime = 0
|
||||
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
|
||||
let turnData = this.getFlag("world", "turnData")
|
||||
|
||||
//console.log("Next round called....", nextRound, turnData)
|
||||
while (!hasCombatants) {
|
||||
if (this.settings.skipDefeated && (turn !== null)) {
|
||||
turn = this.turns.findIndex(t => !t.isDefeated);
|
||||
if (turn === -1) {
|
||||
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
|
||||
turn = 0;
|
||||
}
|
||||
}
|
||||
advanceTime = -1 * (Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime);
|
||||
advanceTime -= CONFIG.time.roundTime;
|
||||
nextRound = nextRound -1
|
||||
//console.log("Next round called....2", nextRound, turnData)
|
||||
turnData = this.getFlag("world", "turnData")
|
||||
if (!turnData) {
|
||||
turnData = { turnNumber: 0, segmentNumber: 12 }
|
||||
this.setFlag("world", "turnData", turnData)
|
||||
}
|
||||
turnData = duplicate(turnData)
|
||||
turnData.segmentNumber -= 1
|
||||
if (turnData.segmentNumber <= 0) {
|
||||
turnData.segmentNumber = 12
|
||||
turnData.turnNumber--
|
||||
}
|
||||
await this.setFlag("world", "turnData", turnData)
|
||||
this.turnNumber = turnData.turnNumber;
|
||||
this.segmentNumber = turnData.segmentNumber;
|
||||
//console.log("Next round called....3", nextRound, turnData)
|
||||
|
||||
// Re-compute init of actors
|
||||
hasCombatants = await this.rebuildInitiative()
|
||||
//console.log("Going round....", nextRound, hasCombatants)
|
||||
}
|
||||
|
||||
// Update the document, passing data through a hook first
|
||||
const updateData = { round: nextRound, turn, 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 };
|
||||
Hooks.callAll("combatRound", this, updateData, updateOptions);
|
||||
console.log(this)
|
||||
return this.update(updateData, updateOptions);
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _onCreateEmbeddedDocuments(type, documents, result, options, userId) {
|
||||
console.log(">>>>", documents)
|
||||
super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
|
||||
async _onCreateDescendantDocuments(type, documents, result, options, userId) {
|
||||
//console.log("Added...")
|
||||
if (game.user.isGM) {
|
||||
await super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
|
||||
await this.rebuildInitiative()
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* --------------------------------------------
|
||||
_onUpdate(changed, options, userId) {
|
||||
}
|
||||
}*/
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async checkTurnPosition() {
|
||||
|
@ -123,9 +123,17 @@ export class Hero6Commands {
|
||||
let formula = params.join(' ')
|
||||
if (formula) {
|
||||
let foundryFormula = Hero6Utility.convertRollHeroSyntax(formula)
|
||||
|
||||
let myRoll = new Roll(foundryFormula).roll({ async: false })
|
||||
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
myRoll.toMessage()
|
||||
let bodyValue = Hero6Utility.computeBodyValue(myRoll)
|
||||
|
||||
let msgFlavor = await renderTemplate('systems/fvtt-hero-system-6/templates/chat/chat-hr-roll.hbs', {myRoll, bodyValue} )
|
||||
let msg = await myRoll.toMessage({
|
||||
user: game.user.id,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
flavor: msgFlavor
|
||||
})
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -10,7 +10,8 @@ export const Hero6_CONFIG = {
|
||||
maneuverTypes: {
|
||||
"general": "General",
|
||||
"offensive": "Offensive",
|
||||
"defensive": "Defensive"
|
||||
"defensive": "Defensive",
|
||||
"mental": "Mental"
|
||||
},
|
||||
rollCharac : {
|
||||
"str": "Strength",
|
||||
@ -21,6 +22,13 @@ export const Hero6_CONFIG = {
|
||||
"pre": "Presence",
|
||||
"manual": "Manual",
|
||||
},
|
||||
damageEffect: {
|
||||
"normal": "Normal",
|
||||
"killing": "Killing",
|
||||
"stunonly": "Stun Only",
|
||||
"bodyonly": "Body Only",
|
||||
"effect": "Effect"
|
||||
},
|
||||
skillType: {
|
||||
"agility": "Agility",
|
||||
"interaction": "Interaction",
|
||||
@ -29,6 +37,10 @@ export const Hero6_CONFIG = {
|
||||
"combat": "Combat" ,
|
||||
"custom": "Custom"
|
||||
},
|
||||
attackTypes: {
|
||||
"ocv": "OCV",
|
||||
"omcv": "OMCV"
|
||||
},
|
||||
powerEquipmentType: {
|
||||
"adjustment": "Adjustment",
|
||||
"mental": "Mental",
|
||||
@ -53,6 +65,5 @@ export const Hero6_CONFIG = {
|
||||
"standard": "Standard",
|
||||
"normal": "Normal",
|
||||
"killing": "Killing",
|
||||
"countbody": "Killing (Count BODY)"
|
||||
}
|
||||
}
|
@ -147,13 +147,13 @@ export class Hero6ItemSheet extends ItemSheet {
|
||||
});
|
||||
|
||||
html.find('.item-skill-profiency').click(ev => {
|
||||
this.object.update( {'system.levels': 12, 'system.cost': 2} )
|
||||
this.object.update( {'system.skillfamiliarity': false, 'system.cost': 2} )
|
||||
} )
|
||||
html.find('.item-skill-familiarity').click(ev => {
|
||||
this.object.update( {'system.levels': 10, 'system.cost': 1} )
|
||||
this.object.update( {'system.skillprofiency': false, 'system.cost': 1} )
|
||||
} )
|
||||
html.find('.item-skill-everyman').click(ev => {
|
||||
this.object.update( {'system.levels': 8, 'system.cost': 0} )
|
||||
this.object.update( {'system.cost': 0} )
|
||||
} )
|
||||
|
||||
html.find('.view-subitem').click(ev => {
|
||||
|
@ -13,11 +13,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"3": {
|
||||
"weight": "37.5 kg",
|
||||
"dice": "0.5d6"
|
||||
"dice": "0 1/2d6"
|
||||
},
|
||||
"4": {
|
||||
"weight": "44 kg",
|
||||
"dice": "0.5d6"
|
||||
"dice": "0 1/2d6"
|
||||
},
|
||||
"5": {
|
||||
"weight": "50 kg",
|
||||
@ -33,11 +33,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"8": {
|
||||
"weight": "75 kg",
|
||||
"dice": "1.5d6"
|
||||
"dice": "1 1/2d6"
|
||||
},
|
||||
"9": {
|
||||
"weight": "88 kg",
|
||||
"dice": "1.5d6"
|
||||
"dice": "1 1/2d6"
|
||||
},
|
||||
"10": {
|
||||
"weight": "100 kg",
|
||||
@ -53,11 +53,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"13": {
|
||||
"weight": "150 kg",
|
||||
"dice": "2.5d6"
|
||||
"dice": "2 1/2d6"
|
||||
},
|
||||
"14": {
|
||||
"weight": "175 kg",
|
||||
"dice": "2.5d6"
|
||||
"dice": "2 1/2d6"
|
||||
},
|
||||
"15": {
|
||||
"weight": "200 kg",
|
||||
@ -73,11 +73,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"18": {
|
||||
"weight": "300 kg",
|
||||
"dice": "3.5d6"
|
||||
"dice": "3 1/2d6"
|
||||
},
|
||||
"19": {
|
||||
"weight": "350 kg",
|
||||
"dice": "3.5d6"
|
||||
"dice": "3 1/2d6"
|
||||
},
|
||||
"20": {
|
||||
"weight": "400 kg",
|
||||
@ -93,11 +93,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"23": {
|
||||
"weight": "600 kg",
|
||||
"dice": "4.5d6"
|
||||
"dice": "4 1/2d6"
|
||||
},
|
||||
"24": {
|
||||
"weight": "700 kg",
|
||||
"dice": "4.5d6"
|
||||
"dice": "4 1/2d6"
|
||||
},
|
||||
"25": {
|
||||
"weight": "800 kg",
|
||||
@ -113,11 +113,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"28": {
|
||||
"weight": "1,200 kg",
|
||||
"dice": "5.5d6"
|
||||
"dice": "5 1/2d6"
|
||||
},
|
||||
"29": {
|
||||
"weight": "1,400 kg",
|
||||
"dice": "5.5d6"
|
||||
"dice": "5 1/2d6"
|
||||
},
|
||||
"30": {
|
||||
"weight": "1,600 kg",
|
||||
@ -133,11 +133,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"33": {
|
||||
"weight": "2,400 kg",
|
||||
"dice": "6.5d6"
|
||||
"dice": "6 1/2d6"
|
||||
},
|
||||
"34": {
|
||||
"weight": "2,800 kg",
|
||||
"dice": "6.5d6"
|
||||
"dice": "6 1/2d6"
|
||||
},
|
||||
"35": {
|
||||
"weight": "3,200 kg",
|
||||
@ -153,11 +153,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"38": {
|
||||
"weight": "4,800 kg",
|
||||
"dice": "7.5d6"
|
||||
"dice": "7 1/2d6"
|
||||
},
|
||||
"39": {
|
||||
"weight": "5,600 kg",
|
||||
"dice": "7.5d6"
|
||||
"dice": "7 1/2d6"
|
||||
},
|
||||
"40": {
|
||||
"weight": "6,400 kg",
|
||||
@ -173,11 +173,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"43": {
|
||||
"weight": "9,600 kg",
|
||||
"dice": "8.5d6"
|
||||
"dice": "8 1/2d6"
|
||||
},
|
||||
"44": {
|
||||
"weight": "11 tons",
|
||||
"dice": "8.5d6"
|
||||
"dice": "8 1/2d6"
|
||||
},
|
||||
"45": {
|
||||
"weight": "12.5 tons",
|
||||
@ -193,11 +193,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"48": {
|
||||
"weight": "19 tons",
|
||||
"dice": "9.5d6"
|
||||
"dice": "9 1/2d6"
|
||||
},
|
||||
"49": {
|
||||
"weight": "22 tons",
|
||||
"dice": "9.5d6"
|
||||
"dice": "9 1/2d6"
|
||||
},
|
||||
"50": {
|
||||
"weight": "25 tons",
|
||||
@ -213,11 +213,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"53": {
|
||||
"weight": "37.5 tons",
|
||||
"dice": "10.5d6"
|
||||
"dice": "10 1/2d6"
|
||||
},
|
||||
"54": {
|
||||
"weight": "44 tons",
|
||||
"dice": "10.5d6"
|
||||
"dice": "10 1/2d6"
|
||||
},
|
||||
"55": {
|
||||
"weight": "50 tons",
|
||||
@ -233,11 +233,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"58": {
|
||||
"weight": "75 tons",
|
||||
"dice": "11.5d6"
|
||||
"dice": "11 1/2d6"
|
||||
},
|
||||
"59": {
|
||||
"weight": "88 tons",
|
||||
"dice": "11.5d6"
|
||||
"dice": "11 1/2d6"
|
||||
},
|
||||
"60": {
|
||||
"weight": "100 tons",
|
||||
@ -253,11 +253,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"63": {
|
||||
"weight": "150 tons",
|
||||
"dice": "12.5d6"
|
||||
"dice": "12 1/2d6"
|
||||
},
|
||||
"64": {
|
||||
"weight": "175 tons",
|
||||
"dice": "12.5d6"
|
||||
"dice": "12 1/2d6"
|
||||
},
|
||||
"65": {
|
||||
"weight": "200 tons",
|
||||
@ -273,11 +273,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"68": {
|
||||
"weight": "300 tons",
|
||||
"dice": "13.5d6"
|
||||
"dice": "13 1/2d6"
|
||||
},
|
||||
"69": {
|
||||
"weight": "350 tons",
|
||||
"dice": "13.5d6"
|
||||
"dice": "13 1/2d6"
|
||||
},
|
||||
"70": {
|
||||
"weight": "400 tons",
|
||||
@ -293,11 +293,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"73": {
|
||||
"weight": "600 tons",
|
||||
"dice": "14.5d6"
|
||||
"dice": "14 1/2d6"
|
||||
},
|
||||
"74": {
|
||||
"weight": "700 tons",
|
||||
"dice": "14.5d6"
|
||||
"dice": "14 1/2d6"
|
||||
},
|
||||
"75": {
|
||||
"weight": "800 tons",
|
||||
@ -313,11 +313,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"78": {
|
||||
"weight": "1.2 ktons",
|
||||
"dice": "15.5d6"
|
||||
"dice": "15 1/2d6"
|
||||
},
|
||||
"79": {
|
||||
"weight": "1.4 ktons",
|
||||
"dice": "15.5d6"
|
||||
"dice": "15 1/2d6"
|
||||
},
|
||||
"80": {
|
||||
"weight": "1.6 ktons",
|
||||
@ -333,11 +333,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"83": {
|
||||
"weight": "2.4 ktons",
|
||||
"dice": "16.5d6"
|
||||
"dice": "16 1/2d6"
|
||||
},
|
||||
"84": {
|
||||
"weight": "2.8 ktons",
|
||||
"dice": "16.5d6"
|
||||
"dice": "16 1/2d6"
|
||||
},
|
||||
"85": {
|
||||
"weight": "3.2 ktons",
|
||||
@ -353,11 +353,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"88": {
|
||||
"weight": "4.8 ktons",
|
||||
"dice": "17.5d6"
|
||||
"dice": "17 1/2d6"
|
||||
},
|
||||
"89": {
|
||||
"weight": "5.6 ktons",
|
||||
"dice": "17.5d6"
|
||||
"dice": "17 1/2d6"
|
||||
},
|
||||
"90": {
|
||||
"weight": "6.4 ktons",
|
||||
@ -373,11 +373,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"93": {
|
||||
"weight": "9.6 ktons",
|
||||
"dice": "18.5d6"
|
||||
"dice": "18 1/2d6"
|
||||
},
|
||||
"94": {
|
||||
"weight": "11 ktons",
|
||||
"dice": "18.5d6"
|
||||
"dice": "18 1/2d6"
|
||||
},
|
||||
"95": {
|
||||
"weight": "12.5 ktons",
|
||||
@ -393,11 +393,11 @@ const __LiftDiceValues = {
|
||||
},
|
||||
"98": {
|
||||
"weight": "19 ktons",
|
||||
"dice": "19.5d6"
|
||||
"dice": "19 1/2d6"
|
||||
},
|
||||
"99": {
|
||||
"weight": "22 ktons",
|
||||
"dice": "19.5d6"
|
||||
"dice": "19 1/2d6"
|
||||
},
|
||||
"100": {
|
||||
"weight": "25 ktons",
|
||||
|
@ -41,10 +41,10 @@ Hooks.once("init", async function () {
|
||||
// Set an initiative formula for the system
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "1d6",
|
||||
decimals: 3
|
||||
decimals: 2
|
||||
};
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/* ------------------------------- ------------- */
|
||||
game.socket.on("system.fvtt-hero-system-6", data => {
|
||||
Hero6Utility.onSocketMesssage(data)
|
||||
});
|
||||
@ -61,7 +61,7 @@ Hooks.once("init", async function () {
|
||||
// Register sheet application classes
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("fvtt-hero-system-6", Hero6ActorSheet, { types: ["character"], makeDefault: true });
|
||||
Actors.registerSheet("fvtt-hero-system-6", Hero6NPCSheet, { types: ["npc"], makeDefault: false });
|
||||
Actors.registerSheet("fvtt-hero-system-6", Hero6ActorSheet, { types: ["minion"], makeDefault: false });
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("fvtt-hero-system-6", Hero6ItemSheet, { makeDefault: true });
|
||||
@ -75,7 +75,7 @@ function welcomeMessage() {
|
||||
user: game.user.id,
|
||||
whisper: [game.user.id],
|
||||
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>
|
||||
` });
|
||||
}
|
||||
|
||||
@ -96,6 +96,8 @@ Hooks.once("ready", function () {
|
||||
welcomeMessage();
|
||||
Hero6Utility.ready()
|
||||
Hero6Commands.ready()
|
||||
Hero6Combat.ready()
|
||||
|
||||
})
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -5,7 +5,7 @@ export class Hero6RollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData) {
|
||||
|
||||
let options = { classes: ["Hero6Dialog"], width: 460, height: 'fit-content', 'z-index': 99999 };
|
||||
let options = { classes: ["Hero6Dialog"], width: 320, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-hero-system-6/templates/apps/roll-dialog-generic.hbs', rollData);
|
||||
|
||||
return new Hero6RollDialog(actor, rollData, html, options);
|
||||
@ -14,7 +14,7 @@ export class Hero6RollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
constructor(actor, rollData, html, options, close = undefined) {
|
||||
let conf = {
|
||||
title: (rollData.mode == "skill") ? "Skill" : "Attribute",
|
||||
title: "Roll window",
|
||||
content: html,
|
||||
buttons: {
|
||||
roll: {
|
||||
@ -53,7 +53,7 @@ export class Hero6RollDialog extends Dialog {
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
var dialog = this;
|
||||
let dialog = this;
|
||||
function onLoad() {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
|
@ -41,7 +41,10 @@ export class Hero6Utility {
|
||||
return list.length > 0;
|
||||
})
|
||||
Handlebars.registerHelper('mul', function (a, b) {
|
||||
return parseInt(a) * parseInt(b);
|
||||
return Number(a) * Number(b);
|
||||
})
|
||||
Handlebars.registerHelper('add', function (a, b) {
|
||||
return (Number(a) || 0) + (Number(b) || 0);
|
||||
})
|
||||
Handlebars.registerHelper('locationLabel', function (key) {
|
||||
return __locationNames[key]
|
||||
@ -52,6 +55,14 @@ export class Hero6Utility {
|
||||
}
|
||||
return false
|
||||
})
|
||||
Handlebars.registerHelper('fixNum', function (value) {
|
||||
return Number(value) || 0
|
||||
})
|
||||
Handlebars.registerHelper('checkInit', function (value) {
|
||||
let myValue = Number(value) || 0
|
||||
return myValue > 0
|
||||
})
|
||||
|
||||
|
||||
this.gameSettings()
|
||||
|
||||
@ -119,6 +130,10 @@ export class Hero6Utility {
|
||||
const rollTables = await Hero6Utility.loadCompendium("fvtt-hero-system-6.rolltables")
|
||||
this.rollTables = rollTables.map(i => i.toObject())
|
||||
|
||||
for (let actor of game.actors) {
|
||||
actor.performMigration()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -154,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-item-nav.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-item-description.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-item-notes.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-item-cost.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-power-equipment-cost.hbs',
|
||||
@ -225,12 +241,21 @@ export class Hero6Utility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async onSocketMesssage(msg) {
|
||||
console.log("SOCKET MESSAGE", msg.name)
|
||||
console.log("SOCKET MESSAGE", msg.name, msg)
|
||||
if (msg.name == "msg_update_roll") {
|
||||
this.updateRollData(msg.data)
|
||||
}
|
||||
if (msg.name == "msg_gm_process_attack_defense") {
|
||||
this.processSuccessResult(msg.data)
|
||||
if (msg.name == "msg_force_hold") {
|
||||
if (game.user.isGM) {
|
||||
let actor = game.actors.get(msg.data.actorId)
|
||||
game.combat.forceHold(actor, msg.data.isHold)
|
||||
}
|
||||
}
|
||||
if (msg.name == "msg_force_abort") {
|
||||
if (game.user.isGM) {
|
||||
let actor = game.actors.get(msg.data.actorId)
|
||||
game.combat.forceAbort(actor, msg.data.isAbort)
|
||||
}
|
||||
}
|
||||
if (msg.name == "msg_gm_item_drop" && game.user.isGM) {
|
||||
let actor = game.actors.get(msg.data.actorId)
|
||||
@ -324,6 +349,7 @@ export class Hero6Utility {
|
||||
// ability/save/size => 0
|
||||
let diceFormula = "3d6"
|
||||
let target = 10
|
||||
|
||||
if (rollData.charac) {
|
||||
target = rollData.charac.roll
|
||||
}
|
||||
@ -333,11 +359,11 @@ export class Hero6Utility {
|
||||
target += rollData.bonusMalus
|
||||
|
||||
// Performs roll
|
||||
console.log("Roll formula", diceFormula)
|
||||
//console.log("Roll formula", diceFormula)
|
||||
let myRoll = rollData.roll
|
||||
if (!myRoll) { // New rolls only of no rerolls
|
||||
myRoll = new Roll(diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
//await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
}
|
||||
|
||||
rollData.roll = myRoll
|
||||
@ -348,6 +374,7 @@ export class Hero6Utility {
|
||||
if (rollData.result <= target) {
|
||||
rollData.isSuccess = true
|
||||
}
|
||||
//console.log("Roll result", rollData)
|
||||
if (myRoll.terms[0].total == 3) { // Always a success
|
||||
rollData.isSuccess = true
|
||||
}
|
||||
@ -367,32 +394,43 @@ export class Hero6Utility {
|
||||
rollData.result = roll.total
|
||||
rollData.bodyValue = this.computeBodyValue(rollData.roll)
|
||||
|
||||
this.outputRollMessage(rollData)
|
||||
this.outputRollMessage(rollData).catch(function() { ui.notifications.warn("Error during message output.") })
|
||||
}
|
||||
|
||||
/* -------------- ----------------------------- */
|
||||
static async outputRollMessage(rollData) {
|
||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
let msgFlavor = await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
let msg = await rollData.roll.toMessage({
|
||||
user: game.user.id,
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
flavor: msgFlavor
|
||||
})
|
||||
rollData.roll = duplicate(rollData.roll) // Convert to object
|
||||
msg.setFlag("world", "rolldata", rollData)
|
||||
console.log("Rolldata result", rollData)
|
||||
}
|
||||
|
||||
/* -------------- ----------------------------- */
|
||||
static convertRollHeroSyntax( hero6Formula) {
|
||||
static convertRollHeroSyntax(hero6Formula) {
|
||||
// Ensure we have no space at all
|
||||
//hero6Formula = hero6Formula.replace(/\s/g, '')
|
||||
let hasHalfDice = ""
|
||||
if (hero6Formula.match("1/2d6")) {
|
||||
hero6Formula = hero6Formula.replace("1/2d6", "d6")
|
||||
hasHalfDice = "+round(1d6)"
|
||||
let newFormula = hero6Formula
|
||||
|
||||
let form1 = hero6Formula.match(/\s*(\d*)\s*1\/2d6/)
|
||||
if ( form1 ) {
|
||||
let nbDice = form1[1] || 0
|
||||
newFormula = nbDice+"d6+round(1d6/2)"
|
||||
}
|
||||
|
||||
let foundryFormula = hero6Formula + hasHalfDice
|
||||
foundryFormula = foundryFormula.replace(' ', '')
|
||||
console.log("Parsed formula : ", hero6Formula, foundryFormula)
|
||||
return foundryFormula
|
||||
|
||||
let form3 = hero6Formula.match(/\s*(\d*)\.5d6/)
|
||||
if ( form3 ) {
|
||||
let nbDice = form3[1] || 0
|
||||
newFormula = nbDice+"d6+round(1d6/2)"
|
||||
}
|
||||
|
||||
console.log("Parsed formula : ", hero6Formula, newFormula)
|
||||
return newFormula
|
||||
}
|
||||
|
||||
/* -------------- ----------------------------- */
|
||||
@ -433,7 +471,7 @@ export class Hero6Utility {
|
||||
static blindMessageToGM(chatOptions) {
|
||||
let chatGM = duplicate(chatOptions);
|
||||
chatGM.whisper = this.getUsers(user => user.isGM);
|
||||
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
|
||||
chatGM.content = "Blind message of " + game.user.name + "<br>" + chatOptions.content;
|
||||
console.log("blindMessageToGM", chatGM);
|
||||
game.socket.emit("system.fvtt-hero-system-6", { msg: "msg_gm_chat_message", data: chatGM });
|
||||
}
|
||||
|
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-000188
|
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/10/04-21:41:44.140558 7f16d7fff6c0 Recovering log #186
|
||||
2023/10/04-21:41:44.150660 7f16d7fff6c0 Delete type=3 #184
|
||||
2023/10/04-21:41:44.150712 7f16d7fff6c0 Delete type=0 #186
|
||||
2023/10/04-21:47:02.531984 7f14567ef6c0 Level-0 table #191: started
|
||||
2023/10/04-21:47:02.532010 7f14567ef6c0 Level-0 table #191: 0 bytes OK
|
||||
2023/10/04-21:47:02.538823 7f14567ef6c0 Delete type=0 #189
|
||||
2023/10/04-21:47:02.545067 7f14567ef6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:47:02.545092 7f14567ef6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
8
packs/complications/LOG.old
Normal file
8
packs/complications/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/04-21:35:01.811691 7f16d6ffd6c0 Recovering log #182
|
||||
2023/10/04-21:35:01.822017 7f16d6ffd6c0 Delete type=3 #180
|
||||
2023/10/04-21:35:01.822072 7f16d6ffd6c0 Delete type=0 #182
|
||||
2023/10/04-21:41:38.795066 7f14567ef6c0 Level-0 table #187: started
|
||||
2023/10/04-21:41:38.795089 7f14567ef6c0 Level-0 table #187: 0 bytes OK
|
||||
2023/10/04-21:41:38.801689 7f14567ef6c0 Delete type=0 #185
|
||||
2023/10/04-21:41:38.808479 7f14567ef6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:41:38.808530 7f14567ef6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
BIN
packs/complications/MANIFEST-000188
Normal file
BIN
packs/complications/MANIFEST-000188
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/000192.log
Normal file
0
packs/equipment/000192.log
Normal file
1
packs/equipment/CURRENT
Normal file
1
packs/equipment/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000190
|
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/10/04-21:41:44.100507 7f16d6ffd6c0 Recovering log #188
|
||||
2023/10/04-21:41:44.111147 7f16d6ffd6c0 Delete type=3 #186
|
||||
2023/10/04-21:41:44.111281 7f16d6ffd6c0 Delete type=0 #188
|
||||
2023/10/04-21:47:02.509785 7f14567ef6c0 Level-0 table #193: started
|
||||
2023/10/04-21:47:02.509815 7f14567ef6c0 Level-0 table #193: 0 bytes OK
|
||||
2023/10/04-21:47:02.518200 7f14567ef6c0 Delete type=0 #191
|
||||
2023/10/04-21:47:02.518694 7f14567ef6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:47:02.518773 7f14567ef6c0 Manual compaction at level-1 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
|
8
packs/equipment/LOG.old
Normal file
8
packs/equipment/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/04-21:35:01.768747 7f16d7fff6c0 Recovering log #184
|
||||
2023/10/04-21:35:01.779863 7f16d7fff6c0 Delete type=3 #182
|
||||
2023/10/04-21:35:01.779921 7f16d7fff6c0 Delete type=0 #184
|
||||
2023/10/04-21:41:38.760705 7f14567ef6c0 Level-0 table #189: started
|
||||
2023/10/04-21:41:38.760752 7f14567ef6c0 Level-0 table #189: 0 bytes OK
|
||||
2023/10/04-21:41:38.767288 7f14567ef6c0 Delete type=0 #187
|
||||
2023/10/04-21:41:38.774856 7f14567ef6c0 Manual compaction at level-0 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:41:38.781126 7f14567ef6c0 Manual compaction at level-1 from '!folders!48DCB6UNXCsERTXK' @ 72057594037927935 : 1 .. '!items!zFQRJSrYV4E12NgW' @ 0 : 0; will stop at (end)
|
BIN
packs/equipment/MANIFEST-000190
Normal file
BIN
packs/equipment/MANIFEST-000190
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/000184.log
Normal file
0
packs/maneuvers/000184.log
Normal file
1
packs/maneuvers/CURRENT
Normal file
1
packs/maneuvers/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000182
|
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/10/04-21:41:44.152237 7f16d6ffd6c0 Recovering log #180
|
||||
2023/10/04-21:41:44.162524 7f16d6ffd6c0 Delete type=3 #178
|
||||
2023/10/04-21:41:44.162593 7f16d6ffd6c0 Delete type=0 #180
|
||||
2023/10/04-21:47:02.538933 7f14567ef6c0 Level-0 table #185: started
|
||||
2023/10/04-21:47:02.538963 7f14567ef6c0 Level-0 table #185: 0 bytes OK
|
||||
2023/10/04-21:47:02.544945 7f14567ef6c0 Delete type=0 #183
|
||||
2023/10/04-21:47:02.545085 7f14567ef6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:47:02.545108 7f14567ef6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
8
packs/maneuvers/LOG.old
Normal file
8
packs/maneuvers/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/04-21:35:01.823989 7f16d7fff6c0 Recovering log #176
|
||||
2023/10/04-21:35:01.834386 7f16d7fff6c0 Delete type=3 #174
|
||||
2023/10/04-21:35:01.834682 7f16d7fff6c0 Delete type=0 #176
|
||||
2023/10/04-21:41:38.788643 7f14567ef6c0 Level-0 table #181: started
|
||||
2023/10/04-21:41:38.788676 7f14567ef6c0 Level-0 table #181: 0 bytes OK
|
||||
2023/10/04-21:41:38.794955 7f14567ef6c0 Delete type=0 #179
|
||||
2023/10/04-21:41:38.808465 7f14567ef6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:41:38.808513 7f14567ef6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
BIN
packs/maneuvers/MANIFEST-000182
Normal file
BIN
packs/maneuvers/MANIFEST-000182
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/000190.log
Normal file
0
packs/perks/000190.log
Normal file
1
packs/perks/CURRENT
Normal file
1
packs/perks/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000188
|
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/10/04-21:41:44.164948 7f16ecffa6c0 Recovering log #186
|
||||
2023/10/04-21:41:44.175548 7f16ecffa6c0 Delete type=3 #184
|
||||
2023/10/04-21:41:44.175604 7f16ecffa6c0 Delete type=0 #186
|
||||
2023/10/04-21:47:02.552360 7f14567ef6c0 Level-0 table #191: started
|
||||
2023/10/04-21:47:02.552386 7f14567ef6c0 Level-0 table #191: 0 bytes OK
|
||||
2023/10/04-21:47:02.560501 7f14567ef6c0 Delete type=0 #189
|
||||
2023/10/04-21:47:02.560629 7f14567ef6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:47:02.560655 7f14567ef6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
8
packs/perks/LOG.old
Normal file
8
packs/perks/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/04-21:35:01.836873 7f16ecffa6c0 Recovering log #182
|
||||
2023/10/04-21:35:01.847899 7f16ecffa6c0 Delete type=3 #180
|
||||
2023/10/04-21:35:01.847965 7f16ecffa6c0 Delete type=0 #182
|
||||
2023/10/04-21:41:38.781263 7f14567ef6c0 Level-0 table #187: started
|
||||
2023/10/04-21:41:38.781303 7f14567ef6c0 Level-0 table #187: 0 bytes OK
|
||||
2023/10/04-21:41:38.788512 7f14567ef6c0 Delete type=0 #185
|
||||
2023/10/04-21:41:38.808450 7f14567ef6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:41:38.808503 7f14567ef6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
BIN
packs/perks/MANIFEST-000188
Normal file
BIN
packs/perks/MANIFEST-000188
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/000192.log
Normal file
0
packs/powers/000192.log
Normal file
1
packs/powers/CURRENT
Normal file
1
packs/powers/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000190
|
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/10/04-21:41:44.127784 7f16d77fe6c0 Recovering log #188
|
||||
2023/10/04-21:41:44.137990 7f16d77fe6c0 Delete type=3 #186
|
||||
2023/10/04-21:41:44.138069 7f16d77fe6c0 Delete type=0 #188
|
||||
2023/10/04-21:47:02.518821 7f14567ef6c0 Level-0 table #193: started
|
||||
2023/10/04-21:47:02.518901 7f14567ef6c0 Level-0 table #193: 0 bytes OK
|
||||
2023/10/04-21:47:02.525324 7f14567ef6c0 Delete type=0 #191
|
||||
2023/10/04-21:47:02.545045 7f14567ef6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:47:02.545077 7f14567ef6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
8
packs/powers/LOG.old
Normal file
8
packs/powers/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/04-21:35:01.795955 7f16d77fe6c0 Recovering log #184
|
||||
2023/10/04-21:35:01.806044 7f16d77fe6c0 Delete type=3 #182
|
||||
2023/10/04-21:35:01.806101 7f16d77fe6c0 Delete type=0 #184
|
||||
2023/10/04-21:41:38.774865 7f14567ef6c0 Level-0 table #189: started
|
||||
2023/10/04-21:41:38.774887 7f14567ef6c0 Level-0 table #189: 0 bytes OK
|
||||
2023/10/04-21:41:38.780982 7f14567ef6c0 Delete type=0 #187
|
||||
2023/10/04-21:41:38.781151 7f14567ef6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:41:38.781172 7f14567ef6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
BIN
packs/powers/MANIFEST-000190
Normal file
BIN
packs/powers/MANIFEST-000190
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/000192.log
Normal file
0
packs/skills/000192.log
Normal file
1
packs/skills/CURRENT
Normal file
1
packs/skills/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000190
|
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/10/04-21:41:44.114622 7f16ecffa6c0 Recovering log #188
|
||||
2023/10/04-21:41:44.125734 7f16ecffa6c0 Delete type=3 #186
|
||||
2023/10/04-21:41:44.125812 7f16ecffa6c0 Delete type=0 #188
|
||||
2023/10/04-21:47:02.525443 7f14567ef6c0 Level-0 table #193: started
|
||||
2023/10/04-21:47:02.525470 7f14567ef6c0 Level-0 table #193: 0 bytes OK
|
||||
2023/10/04-21:47:02.531866 7f14567ef6c0 Delete type=0 #191
|
||||
2023/10/04-21:47:02.545057 7f14567ef6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:47:02.545100 7f14567ef6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
8
packs/skills/LOG.old
Normal file
8
packs/skills/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/04-21:35:01.783254 7f16ecffa6c0 Recovering log #184
|
||||
2023/10/04-21:35:01.792970 7f16ecffa6c0 Delete type=3 #182
|
||||
2023/10/04-21:35:01.793080 7f16ecffa6c0 Delete type=0 #184
|
||||
2023/10/04-21:41:38.767422 7f14567ef6c0 Level-0 table #189: started
|
||||
2023/10/04-21:41:38.767446 7f14567ef6c0 Level-0 table #189: 0 bytes OK
|
||||
2023/10/04-21:41:38.774734 7f14567ef6c0 Delete type=0 #187
|
||||
2023/10/04-21:41:38.781109 7f14567ef6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:41:38.781182 7f14567ef6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
BIN
packs/skills/MANIFEST-000190
Normal file
BIN
packs/skills/MANIFEST-000190
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/000190.log
Normal file
0
packs/talents/000190.log
Normal file
1
packs/talents/CURRENT
Normal file
1
packs/talents/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000188
|
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/10/04-21:41:44.177511 7f16d77fe6c0 Recovering log #186
|
||||
2023/10/04-21:41:44.187706 7f16d77fe6c0 Delete type=3 #184
|
||||
2023/10/04-21:41:44.187791 7f16d77fe6c0 Delete type=0 #186
|
||||
2023/10/04-21:47:02.545189 7f14567ef6c0 Level-0 table #191: started
|
||||
2023/10/04-21:47:02.545213 7f14567ef6c0 Level-0 table #191: 0 bytes OK
|
||||
2023/10/04-21:47:02.552254 7f14567ef6c0 Delete type=0 #189
|
||||
2023/10/04-21:47:02.560616 7f14567ef6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:47:02.560646 7f14567ef6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
8
packs/talents/LOG.old
Normal file
8
packs/talents/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/04-21:35:01.850710 7f16d77fe6c0 Recovering log #182
|
||||
2023/10/04-21:35:01.861789 7f16d77fe6c0 Delete type=3 #180
|
||||
2023/10/04-21:35:01.861973 7f16d77fe6c0 Delete type=0 #182
|
||||
2023/10/04-21:41:38.801785 7f14567ef6c0 Level-0 table #187: started
|
||||
2023/10/04-21:41:38.801808 7f14567ef6c0 Level-0 table #187: 0 bytes OK
|
||||
2023/10/04-21:41:38.808336 7f14567ef6c0 Delete type=0 #185
|
||||
2023/10/04-21:41:38.808493 7f14567ef6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
||||
2023/10/04-21:41:38.808522 7f14567ef6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
BIN
packs/talents/MANIFEST-000188
Normal file
BIN
packs/talents/MANIFEST-000188
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{
|
||||
background: rgba(0,0,0,0.75);
|
||||
}
|
||||
@ -70,13 +74,13 @@
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
}
|
||||
.dialog-content, .dialog-buttons, .form-fields {
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
color: rgba(4, 44, 44, 0.98);
|
||||
}
|
||||
.dialog-buttons {
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
}
|
||||
.dialog .dialog-buttons button.default {
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
color: rgba(4, 44, 44, 0.98);
|
||||
}
|
||||
.window-app.sheet .window-content {
|
||||
margin: 0;
|
||||
@ -645,6 +649,11 @@ ul, li {
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.content-center {
|
||||
align-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.attribut-value,
|
||||
.carac-value {
|
||||
flex-grow: 0;
|
||||
@ -812,10 +821,13 @@ ul, li {
|
||||
.roll-dialog-header {
|
||||
height: 52px;
|
||||
}
|
||||
|
||||
.dialog-roll-title {
|
||||
margin-left: 8px;
|
||||
}
|
||||
.actor-icon {
|
||||
float: left;
|
||||
width: 48px;
|
||||
max-width: 48px;
|
||||
height: 48px;
|
||||
padding: 2px 6px 2px 2px;
|
||||
}
|
||||
@ -1035,6 +1047,31 @@ ul, li {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.chat-card-small-button {
|
||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||
background-color: #7d5d3b00;
|
||||
border-radius: 3px;
|
||||
border: 1px ridge #846109;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
color: #ffffff;
|
||||
font-size: 0.8rem;
|
||||
text-decoration: none;
|
||||
text-shadow: 0px 1px 0px #4d3534;
|
||||
position: relative;
|
||||
margin:1px;
|
||||
}
|
||||
|
||||
.chat-card-small-button:hover {
|
||||
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
|
||||
background-color: red;
|
||||
}
|
||||
.chat-card-small-button:active {
|
||||
position:relative;
|
||||
top:1px;
|
||||
}
|
||||
|
||||
.chat-card-button {
|
||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||
@ -1118,8 +1155,8 @@ ul, li {
|
||||
}
|
||||
|
||||
#logo {
|
||||
content : url(../images/ui/crucible_game_logo.png);
|
||||
width: 100px;
|
||||
content : url(../images/ui/logo_hex_yellow_01.webp);
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
@ -1258,6 +1295,9 @@ Focus FOC: #ff0084
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
.item-packed {
|
||||
flex-grow:0;
|
||||
}
|
||||
.items-title-text {
|
||||
margin-left: 4px;
|
||||
}
|
||||
@ -1309,6 +1349,11 @@ Focus FOC: #ff0084
|
||||
max-width: 9rem;
|
||||
min-width: 9rem;
|
||||
}
|
||||
.item-field-label-very-short {
|
||||
flex-grow:1;
|
||||
max-width: 2.5rem;
|
||||
min-width: 2.5rem;
|
||||
}
|
||||
.item-field-label-short {
|
||||
flex-grow:1;
|
||||
max-width: 4rem;
|
||||
@ -1323,6 +1368,12 @@ Focus FOC: #ff0084
|
||||
flex-grow:1;
|
||||
max-width: 8rem;
|
||||
min-width: 8rem;
|
||||
text-align: start;
|
||||
}
|
||||
.item-field-text-long {
|
||||
flex-grow:1;
|
||||
max-width: 14rem;
|
||||
min-width: 14rem;
|
||||
}
|
||||
.item-field-label-long-img {
|
||||
flex-grow:1;
|
||||
@ -1347,6 +1398,9 @@ Focus FOC: #ff0084
|
||||
.item-control-end {
|
||||
align-self: flex-end;
|
||||
}
|
||||
.margin-space-4 {
|
||||
margin-left: 4px;
|
||||
}
|
||||
.margin-item-list {
|
||||
margin-top: 4px;
|
||||
}
|
||||
@ -1368,7 +1422,12 @@ Focus FOC: #ff0084
|
||||
}
|
||||
.item-controls-fixed {
|
||||
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 {
|
||||
min-height: 512px;
|
||||
@ -1377,4 +1436,17 @@ Focus FOC: #ff0084
|
||||
.textarea-full-height {
|
||||
min-height: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.margin-left-4 {
|
||||
margin-left: 4px;
|
||||
}
|
||||
.margin-left-8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
.maneuver-is-stock {
|
||||
display: none;
|
||||
visibility: hidden;
|
||||
}
|
||||
.compendium .directory-list .directory-item .folder-header h3 {
|
||||
color:#000
|
||||
}
|
||||
|
@ -1,60 +0,0 @@
|
||||
{{!-- Carac Tab --}}
|
||||
<div class="tab items" data-group="primary" data-tab="statistics">
|
||||
|
||||
<div class="grid grid-2col">
|
||||
<div class="">
|
||||
<div class="flexrow">
|
||||
<span class="generic-label packed-left"><a class="generic-pool-roll"><button class="chat-card-button">Dice Pool</button></a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="">
|
||||
|
||||
<ul>
|
||||
<li class="item flexrow list-item" data-key="momentum">
|
||||
<span class="stat-label flexrow" name="momentum"> <h4>{{data.momentum.label}}</h4> </span>
|
||||
<input type="text" class="padd-right" name="data.momentum.value" value="{{data.momentum.value}}" data-dtype="Number"/>
|
||||
<input type="text" class="padd-right" name="data.momentum.max" value="{{data.momentum.max}}" data-dtype="Number"/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<ul>
|
||||
<li class="item flexrow list-item" data-key="mr">
|
||||
<span class="stat-label flexrow" name="mr">
|
||||
<a class="roll-mr" data-stat-key="{{mr}}"><h4>{{data.mr.label}}</h4></a>
|
||||
</span>
|
||||
<select class="carac-base flexrow" type="text" name="data.mr.value" value="{{data.mr.value}}"
|
||||
data-dtype="Number" >
|
||||
{{#select data.mr.value}}
|
||||
{{{@root.optionsDiceList}}}
|
||||
{{/select}}
|
||||
</select>
|
||||
<input type="text" class="padd-right input-numeric-short" name="data.mr.mod" value="{{data.mr.mod}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<li class="item flexrow list-item" data-attr-key="{{key}}">
|
||||
{{#each data.secondary as |stat2 key|}}
|
||||
{{#if stat2.iscombat}}
|
||||
<span class="stat-label" name="{{key}}">
|
||||
<h4>{{stat2.label}} : </h4>
|
||||
</span>
|
||||
<span class="small-label padd-right packed-left">Cur</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.secondary.{{key}}.value" value="{{stat2.value}}" data-dtype="Number"/>
|
||||
<span class="small-label padd-right packed-left"> Max</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.secondary.{{key}}.max" value="{{stat2.max}}" data-dtype="Number"/>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</li>
|
||||
<li class="item flexrow list-item" data-key="momentum">
|
||||
<span class="stat-label flexrow" name="momentum"><h4>{{data.momentum.label}}:</h4></span>
|
||||
<span class="small-label padd-right packed-left">Cur</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.momentum.value" value="{{data.momentum.value}}" data-dtype="Number"/>
|
||||
<span class="small-label padd-right packed-left"> Max</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.momentum.max" value="{{data.momentum.max}}" data-dtype="Number"/>
|
||||
</li>
|
43
system.json
43
system.json
@ -5,11 +5,11 @@
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"description": "Hero System v6 for FoundryVTT (Official)",
|
||||
"description": "Hero System 6E for FoundryVTT (Official)",
|
||||
"esmodules": [
|
||||
"modules/hero6-main.js"
|
||||
],
|
||||
"gridDistance": 5,
|
||||
"gridDistance": 2,
|
||||
"gridUnits": "m",
|
||||
"languages": [
|
||||
{
|
||||
@ -30,15 +30,6 @@
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Weapons",
|
||||
"name": "weapons",
|
||||
"path": "packs/weapons.db",
|
||||
"system": "fvtt-hero-system-6",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Skills",
|
||||
@ -66,6 +57,15 @@
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Maneuvers",
|
||||
"name": "maneuvers",
|
||||
"path": "packs/maneuvers.db",
|
||||
"system": "fvtt-hero-system-6",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Perks",
|
||||
@ -85,22 +85,21 @@
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"primaryTokenAttribute": "secondary.hp",
|
||||
"secondaryTokenAttribute": "secondary.effort",
|
||||
"primaryTokenAttribute": "characteristics.body",
|
||||
"secondaryTokenAttribute": "characteristics.end",
|
||||
"socket": true,
|
||||
"styles": [
|
||||
"styles/simple.css"
|
||||
],
|
||||
"version": "10.0.36",
|
||||
"version": "11.0.23",
|
||||
"compatibility": {
|
||||
"minimum": "10",
|
||||
"verified": "10",
|
||||
"maximum": "10"
|
||||
"minimum": "11",
|
||||
"verified": "11"
|
||||
},
|
||||
"title": "Hero System v6 for FoundrtVTT (Official)",
|
||||
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/main/system.json",
|
||||
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/archive/fvtt-hero-system-6-v10.0.36.zip",
|
||||
"url": "https://www.uberwald.me/gitea/uberwald/",
|
||||
"background": "images/ui/hro6_welcome_page.webp",
|
||||
"title": "Hero System 6E Basic (Official)",
|
||||
"manifest": "https://www.uberwald.me/gitea/public/fvtt-hero-system-6/raw/branch/master/system.json",
|
||||
"download": "https://www.uberwald.me/gitea/public/fvtt-hero-system-6/archive/fvtt-hero-system-6-v11.0.23.zip",
|
||||
"url": "https://www.uberwald.me/public/uberwald/",
|
||||
"background": "systems/fvtt-hero-system-6/images/ui/hero_foundry_cover.webp",
|
||||
"id": "fvtt-hero-system-6"
|
||||
}
|
@ -1,7 +1,8 @@
|
||||
{
|
||||
"Actor": {
|
||||
"types": [
|
||||
"character"
|
||||
"character",
|
||||
"minion"
|
||||
],
|
||||
"templates": {
|
||||
"biodata": {
|
||||
@ -43,9 +44,10 @@
|
||||
"value": 10,
|
||||
"base": 10,
|
||||
"category": "main",
|
||||
"strdice": "",
|
||||
"strdice": "1d6",
|
||||
"lift": "",
|
||||
"strend": 0,
|
||||
"strendmode": "str10",
|
||||
"hasroll": true,
|
||||
"realcost": 0,
|
||||
"activecost": 0
|
||||
@ -55,6 +57,7 @@
|
||||
"value": 10,
|
||||
"base": 10,
|
||||
"hasroll": true,
|
||||
"initiative": 10,
|
||||
"category": "main"
|
||||
},
|
||||
"con": {
|
||||
@ -70,7 +73,7 @@
|
||||
"category": "main",
|
||||
"value": 10,
|
||||
"base": 10,
|
||||
"perceptionroll": 10
|
||||
"perceptionroll": 11
|
||||
},
|
||||
"ego": {
|
||||
"label": "EGO",
|
||||
@ -88,7 +91,7 @@
|
||||
},
|
||||
"ocv": {
|
||||
"label": "OCV",
|
||||
"hasroll": false,
|
||||
"hasroll": true,
|
||||
"base": 3,
|
||||
"autoMod": "0",
|
||||
"userMod": "0",
|
||||
@ -106,7 +109,7 @@
|
||||
},
|
||||
"omcv": {
|
||||
"label": "OMCV",
|
||||
"hasroll": false,
|
||||
"hasroll": true,
|
||||
"base": 3,
|
||||
"autoMod": "0",
|
||||
"userMod": "0",
|
||||
@ -203,6 +206,7 @@
|
||||
"ismovement": true,
|
||||
"hasroll": false,
|
||||
"value": 12,
|
||||
"ncvalue": 24,
|
||||
"base": 12
|
||||
},
|
||||
"swimming": {
|
||||
@ -210,6 +214,7 @@
|
||||
"ismovement": true,
|
||||
"hasroll": false,
|
||||
"value": 4,
|
||||
"ncvalue": 8,
|
||||
"base": 4
|
||||
},
|
||||
"leaping": {
|
||||
@ -217,6 +222,7 @@
|
||||
"ismovement": true,
|
||||
"hasroll": false,
|
||||
"value": 4,
|
||||
"ncvalue": 8,
|
||||
"base": 4,
|
||||
"leaping_horizontal_base": 0,
|
||||
"leaping_horizontal_total": 0,
|
||||
@ -229,25 +235,31 @@
|
||||
"movements": {
|
||||
"fly": {
|
||||
"label": "Fly",
|
||||
"value": 0
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
|
||||
},
|
||||
"teleport": {
|
||||
"label": "Teleport",
|
||||
"value": 0
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
},
|
||||
"tunnel": {
|
||||
"label": "Tunnel",
|
||||
"value": 0
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
},
|
||||
"move1": {
|
||||
"label": "N/A",
|
||||
"iseditable": true,
|
||||
"value": 0
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
},
|
||||
"move2": {
|
||||
"label": "N/A",
|
||||
"iseditable": true,
|
||||
"value": 0
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -298,6 +310,15 @@
|
||||
"movements"
|
||||
],
|
||||
"subactors": []
|
||||
},
|
||||
"minion": {
|
||||
"templates": [
|
||||
"biodata",
|
||||
"characteristics",
|
||||
"defenses",
|
||||
"movements"
|
||||
],
|
||||
"subactors": []
|
||||
}
|
||||
},
|
||||
"Item": {
|
||||
@ -331,16 +352,21 @@
|
||||
"senseaffecting": false,
|
||||
"modifiers": [],
|
||||
"levels": 0,
|
||||
"quantity": 0,
|
||||
"quantity": 1,
|
||||
"range": "",
|
||||
"damageeffect": "normal",
|
||||
"damage": "",
|
||||
"stunx": 0,
|
||||
"endurance": 0,
|
||||
"hasroll": false,
|
||||
"attackvalue": "ocv",
|
||||
"roll": 0,
|
||||
"computebody": false,
|
||||
"haseffectroll": false,
|
||||
"effectroll": "standard",
|
||||
"effectrollformula": "",
|
||||
"hascharges": false,
|
||||
"nbcharges": 0,
|
||||
"items": {}
|
||||
}
|
||||
},
|
||||
@ -350,8 +376,10 @@
|
||||
],
|
||||
"maneuvertype": "general",
|
||||
"pha": "",
|
||||
"ocv": 0,
|
||||
"dcv" : 0,
|
||||
"ocv": "",
|
||||
"dcv" : "",
|
||||
"omcv": "",
|
||||
"dmcv" : "",
|
||||
"isstock": false,
|
||||
"active": false
|
||||
},
|
||||
@ -393,7 +421,19 @@
|
||||
"subtype": "equipment",
|
||||
"value": 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": {
|
||||
"templates": [
|
||||
|
@ -4,68 +4,74 @@
|
||||
<header class="sheet-header">
|
||||
<div class="header-fields">
|
||||
<div class="flexrow">
|
||||
|
||||
|
||||
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
|
||||
|
||||
<div class="fixed-separator">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="flexcol">
|
||||
<h1 class="charname "><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||
|
||||
|
||||
<div class="flexrow">
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Alternate IDs</label>
|
||||
<input type="text" class="item-field-label-long4" name="system.biodata.alternateids" value="{{system.biodata.origin}}"
|
||||
data-dtype="String" />
|
||||
<input type="text" class="item-field-label-long4" name="system.biodata.alternateids"
|
||||
value="{{system.biodata.origin}}" data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid grid-2col">
|
||||
<div>
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-medium">Campaign</label>
|
||||
<input type="text" class="item-field-label-long3" name="system.biodata.campaign" value="{{system.biodata.campaign}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-medium">Player</label>
|
||||
<input type="text" class="item-field-label-long3" name="system.biodata.player" value="{{system.biodata.player}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-medium">GM</label>
|
||||
<input type="text" class="item-field-label-long3" name="system.biodata.gm" value="{{system.biodata.gm}}"
|
||||
data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Hair</label>
|
||||
<input type="text" class="item-field-label-long3" name="system.biodata.hair" value="{{system.biodata.hair}}" data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-medium">Campaign</label>
|
||||
<input type="text" class="item-field-label-long3" name="system.biodata.campaign"
|
||||
value="{{system.biodata.campaign}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-medium">Player</label>
|
||||
<input type="text" class="item-field-label-long3" name="system.biodata.player"
|
||||
value="{{system.biodata.player}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-medium">GM</label>
|
||||
<input type="text" class="item-field-label-long3" name="system.biodata.gm"
|
||||
value="{{system.biodata.gm}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Hair</label>
|
||||
<input type="text" class="item-field-label-long3" name="system.biodata.hair"
|
||||
value="{{system.biodata.hair}}" data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-medium">Gender</label>
|
||||
<input type="text" class="item-field-label-medium" name="system.biodata.gender" value="{{system.biodata.gender}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Height</label>
|
||||
<input type="text" class="item-field-label-medium" name="system.biodata.height" value="{{system.biodata.height}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Mass</label>
|
||||
<input type="text" class="item-field-label-medium" name="system.biodata.mass" value="{{system.biodata.mass}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Eyes</label>
|
||||
<input type="text" class="item-field-label-medium" name="system.biodata.eyes" value="{{system.biodata.eyes}}" data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-medium">Gender</label>
|
||||
<input type="text" class="item-field-label-medium" name="system.biodata.gender"
|
||||
value="{{system.biodata.gender}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Height</label>
|
||||
<input type="text" class="item-field-label-medium" name="system.biodata.height"
|
||||
value="{{system.biodata.height}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Mass</label>
|
||||
<input type="text" class="item-field-label-medium" name="system.biodata.mass"
|
||||
value="{{system.biodata.mass}}" data-dtype="String" />
|
||||
</li>
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Eyes</label>
|
||||
<input type="text" class="item-field-label-medium" name="system.biodata.eyes"
|
||||
value="{{system.biodata.eyes}}" data-dtype="String" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -73,19 +79,23 @@
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow">
|
||||
<label class="item-field-label-medium">Points</label>
|
||||
<input type="text" class="item-field-label-short" name="system.biodata.points" value="{{system.biodata.origin}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short" name="system.biodata.points"
|
||||
value="{{system.biodata.origin}}" data-dtype="Number" />
|
||||
<label class=""> </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="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="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>
|
||||
</li>
|
||||
</ul>
|
||||
@ -117,71 +127,117 @@
|
||||
|
||||
{{!-- Combat Tab --}}
|
||||
<div class="tab combat" data-group="primary" data-tab="combat">
|
||||
|
||||
|
||||
<div class="grid grid2col">
|
||||
<div>
|
||||
<div>
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item">
|
||||
<label class="item-field-label-medium">STR Dice</label>
|
||||
<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-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-medium">STR END</label>
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.str.strend" value="{{characteristics.str.strend}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-long">Presence attack</label>
|
||||
<a class="roll-direct" data-roll-source="Presence attack" data-roll-formula="{{system.biodata.presenceattack.rollFormula}}"><i class="fas fa-dice"></i>{{system.biodata.presenceattack.displayFormula}}</a>
|
||||
<input type="text" class="item-field-label-short update-field"
|
||||
data-field-name="system.characteristics.str.strend" disabled value="{{characteristics.str.strend}}"
|
||||
data-dtype="Number" />
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
{{#each maneuvers as |mlist key|}}
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-field-label-long-img">
|
||||
<label class="">{{upperFirst key}} Standard Maneuver</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">OCV</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">DCV</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<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}}">
|
||||
{{#each maneuvers as |mlist mtype|}}
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-field-label-long-img">
|
||||
<label class="">{{upperFirst mtype}} Maneuver</label>
|
||||
</span>
|
||||
<span class="item-field-label-very-short">
|
||||
<label class="short-label">PHA</label>
|
||||
</span>
|
||||
|
||||
{{#if (eq mtype "mental")}}
|
||||
<span class="item-field-label-very-short">
|
||||
<label class="short-label">OMCV</label>
|
||||
</span>
|
||||
<span class="item-field-label-very-short">
|
||||
<label class="short-label">DMCV</label>
|
||||
</span>
|
||||
{{else}}
|
||||
<span class="item-field-label-very-short">
|
||||
<label class="short-label">OCV</label>
|
||||
</span>
|
||||
<span class="item-field-label-very-short">
|
||||
<label class="short-label">DCV</label>
|
||||
</span>
|
||||
{{/if}}
|
||||
|
||||
<span class="item-field-text-long">
|
||||
<label class="short-label">Effects</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each mlist as |maneuver key|}}
|
||||
<li class="item flexrow list-item list-item-shadow " data-item-id="{{maneuver._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{maneuver.img}}" /></a>
|
||||
<span class="item-field-label-long">{{maneuver.name}}</span>
|
||||
src="{{maneuver.img}}" />
|
||||
</a>
|
||||
<span class="item-field-label-long">
|
||||
<a class="roll-item"><i class="fas fa-dice"></i></a>
|
||||
{{maneuver.name}}
|
||||
</span>
|
||||
|
||||
<span class="item-field-label-short">{{maneuver.system.pha}}</span>
|
||||
<span class="item-field-label-short">{{maneuver.system.ocv}}</span>
|
||||
<span class="item-field-label-short">{{maneuver.system.dcv}}</span>
|
||||
<span class="item-field-label-very-short content-center">{{maneuver.system.pha}}</span>
|
||||
{{#if (eq ../mtype "mental")}}
|
||||
<span class="item-field-label-very-short content-center">{{maneuver.system.omcv}}</span>
|
||||
<span class="item-field-label-very-short content-center">{{maneuver.system.dmcv}}</span>
|
||||
{{else}}
|
||||
<span class="item-field-label-very-short content-center">{{maneuver.system.ocv}}</span>
|
||||
<span class="item-field-label-very-short content-center">{{maneuver.system.dcv}}</span>
|
||||
{{/if}}
|
||||
|
||||
<span class="item-field-text-long">{{maneuver.system.effects}}
|
||||
{{#if maneuver.system.haseffectroll}}
|
||||
<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-medium">{{maneuver.system.effects}}</span>
|
||||
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/each}}
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="flexrow item">
|
||||
<label class="item-field-label-medium">SPD</label>
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.spd.value" value="{{characteristics.spd.value}}" data-dtype="Number" />
|
||||
|
||||
<label class="item-packed">Initiative</label>
|
||||
<input type="text" class="margin-left-4item-packed item-field-label-very-short update-field"
|
||||
data-field-name="system.characteristics.dex.initiative" value="{{characteristics.dex.initiative}}"
|
||||
data-dtype="Number" />
|
||||
|
||||
<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>
|
||||
</ul>
|
||||
|
||||
@ -189,24 +245,26 @@
|
||||
<div>
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-field-label-long">
|
||||
<label class="">Vitals</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Val</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Dmg</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="">Vitals</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Val</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Dmg</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each characteristics as |char key|}}
|
||||
{{#if char.isvital}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
<span class="item-field-label-long">{{char.label}}</span>
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.damage" value="{{char.damage}}" data-dtype="Number" />
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#each characteristics as |char key|}}
|
||||
{{#if char.isvital}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
<span class="item-field-label-long">{{char.label}}</span>
|
||||
<input type="text" class="item-field-label-short update-field"
|
||||
data-field-name="system.characteristics.{{key}}.max" value="{{char.max}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value"
|
||||
value="{{char.value}}" data-dtype="Number" />
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
@ -216,57 +274,73 @@
|
||||
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-field-label-long">
|
||||
<label class="">Defenses</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Val</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Res</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="">Defenses</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Normal</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Resistant</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each characteristics as |char key|}}
|
||||
{{#if char.isdefense}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
<span class="item-field-label-long">{{char.label}}</span>
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.resistant" value="{{char.resistant}}" data-dtype="Number" />
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#each characteristics as |char key|}}
|
||||
{{#if char.isdefense}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
<span class="item-field-label-long">{{char.label}}</span>
|
||||
<input type="text" class="item-field-label-short update-field"
|
||||
data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short" name="system.characteristics.{{key}}.resistant"
|
||||
value="{{char.resistant}}" data-dtype="Number" />
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
{{#each defenses as |def key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-defense-key="{{key}}">
|
||||
{{#if def.iseditable}}
|
||||
<input type="text" class="item-field-label-long update-field" data-field-name="system.defenses.{{key}}.label" value="{{def.label}}" data-dtype="String" />
|
||||
{{else}}
|
||||
<span class="item-field-label-long">{{def.label}}</span>
|
||||
{{/if}}
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.defenses.{{key}}.value" value="{{def.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short" name="system.defenses.{{key}}.resistant" value="{{def.resistant}}" data-dtype="Number" />
|
||||
</li>
|
||||
{{#each defenses as |def key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-defense-key="{{key}}">
|
||||
{{#if def.iseditable}}
|
||||
<input type="text" class="item-field-label-long update-field"
|
||||
data-field-name="system.defenses.{{key}}.label" value="{{def.label}}" data-dtype="String" />
|
||||
{{else}}
|
||||
<span class="item-field-label-long">{{def.label}}</span>
|
||||
{{/if}}
|
||||
<input type="text" class="item-field-label-short update-field"
|
||||
data-field-name="system.defenses.{{key}}.value" value="{{def.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short" name="system.defenses.{{key}}.resistant"
|
||||
value="{{def.resistant}}" data-dtype="Number" />
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="item">
|
||||
<label class="item-field-label-short">OCV</label>
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.ocv.value" value="{{characteristics.ocv.value}}" data-dtype="Number" />
|
||||
<label class="item-field-label-short">
|
||||
<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">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">OMCV</label>
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.omcv.value" value="{{characteristics.omcv.value}}" data-dtype="Number" />
|
||||
<label class="item-field-label-short">
|
||||
<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">DMCV</label>
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.dmcv.value" value="{{characteristics.dmcv.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short update-field"
|
||||
data-field-name="system.characteristics.dmcv.value" value="{{characteristics.dmcv.value}}"
|
||||
data-dtype="Number" />
|
||||
</div>
|
||||
|
||||
<div class="flexrow">
|
||||
@ -274,64 +348,75 @@
|
||||
<textarea rows="4" type="text" class="padd-right" name="system.biodata.combatskills"
|
||||
data-dtype="String">{{system.biodata.combatskills}}</textarea>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid grid2col">
|
||||
<div>
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-field-label-long">
|
||||
<label class="">Senses</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="">Senses</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
</span>
|
||||
</li>
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
<span class="item-field-label-long">
|
||||
<a class="roll-perception"><i class="fas fa-dice"></i>Perception Roll</a>
|
||||
</span>
|
||||
<input type="text" class="item-field-label-short update-field"
|
||||
data-field-name="system.characteristics.int.perceptionroll"
|
||||
value="{{characteristics.int.perceptionroll}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
<span class="item-field-label-long">Perception Roll</span>
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.int.perceptionroll" value="{{characteristics.int.perceptionroll}}" data-dtype="Number" />
|
||||
</li>
|
||||
</ul>
|
||||
<textarea 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>
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-field-label-long">
|
||||
<label class="">Movement</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">C</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">NC</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="">Movement</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Combat</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">NC</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each characteristics as |char key|}}
|
||||
{{#if char.ismovement}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
<span class="item-field-label-long">{{char.label}}</span>
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short" value="{{mul char.value 2}}" disabled data-dtype="Number" />
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#each characteristics as |char key|}}
|
||||
{{#if char.ismovement}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
<span class="item-field-label-long">{{char.label}}</span>
|
||||
<input type="text" class="item-field-label-short update-field"
|
||||
data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short update-field"
|
||||
data-field-name="system.characteristics.{{key}}.ncvalue" value="{{char.ncvalue}}"
|
||||
data-dtype="Number" />
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
{{#each movements as |move key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
{{#if move.iseditable}}
|
||||
<input type="text" class="item-field-label-long update-field" data-field-name="system.movements.{{key}}.label" value="{{move.label}}" data-dtype="String" />
|
||||
{{else}}
|
||||
<span class="item-field-label-long">{{move.label}}</span>
|
||||
{{/if}}
|
||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.movements.{{key}}.value" value="{{move.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short" value="{{mul move.value 2}}" disabled data-dtype="Number" />
|
||||
</li>
|
||||
{{#each movements as |move key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||
{{#if move.iseditable}}
|
||||
<input type="text" class="item-field-label-long update-field"
|
||||
data-field-name="system.movements.{{key}}.label" value="{{move.label}}" data-dtype="String" />
|
||||
{{else}}
|
||||
<span class="item-field-label-long">{{move.label}}</span>
|
||||
{{/if}}
|
||||
<input type="text" class="item-field-label-short update-field"
|
||||
data-field-name="system.movements.{{key}}.value" value="{{move.value}}" data-dtype="Number" />
|
||||
<input type="text" class="item-field-label-short" value="{{mul move.value 2}}" disabled
|
||||
data-dtype="Number" />
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -341,28 +426,28 @@
|
||||
<div class="charac-item">
|
||||
<ul>
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-field-label-medium">
|
||||
<label class="">Value</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="item-field-label-medium">CHAR</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Base</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Roll</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Notes</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
</li>
|
||||
<span class="item-field-label-short">
|
||||
<label class="">Value</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="item-field-label-medium">CHAR</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Base</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Roll</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Notes</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
</li>
|
||||
|
||||
{{#each characteristics as |charac key|}}
|
||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-full-charac.hbs charac=charac key=key}}
|
||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-full-charac.hbs charac=charac key=key}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -389,7 +474,8 @@
|
||||
src="{{skill.img}}" /></a>
|
||||
<span class="item-field-label-long">{{skill.name}}</span>
|
||||
<span class="item-field-label-medium">{{upper skill.charac}}</span>
|
||||
<span class="item-field-label-short"><a class="roll-item" data-type="skill"><i class="fas fa-dice"></i>{{skill.roll}}-</a></span>
|
||||
<span class="item-field-label-short"><a class="roll-item" data-type="skill"><i
|
||||
class="fas fa-dice"></i>{{skill.roll}}-</a></span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
@ -416,8 +502,9 @@
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{perk.img}}" /></a>
|
||||
<span class="item-name-label">{{perk.name}}</span>
|
||||
{{#if perk.system.hasroll}}
|
||||
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i class="fas fa-dice"></i>{{perk.system.roll}}-</a></span>
|
||||
{{#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>
|
||||
{{else}}
|
||||
<span class="item-field-label-short"> </span>
|
||||
{{/if}}
|
||||
@ -447,8 +534,9 @@
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{talent.img}}" /></a>
|
||||
<span class="item-name-label">{{talent.name}}</span>
|
||||
{{#if talent.system.hasroll}}
|
||||
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i class="fas fa-dice"></i>{{talent.system.roll}}-</a></span>
|
||||
{{#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>
|
||||
{{else}}
|
||||
<span class="item-field-label-short"> </span>
|
||||
{{/if}}
|
||||
@ -464,6 +552,10 @@
|
||||
{{!-- Maneuvers Tab --}}
|
||||
<div class="tab maneuver" data-group="primary" data-tab="maneuver">
|
||||
|
||||
<div>
|
||||
<button class="show-stock-maneuver">Show/Hide stock maneuvers</button>
|
||||
</div>
|
||||
|
||||
<ul class="stat-list alternate-list item-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-field-label-long-img">
|
||||
@ -478,29 +570,80 @@
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">DCV</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<span class="item-field-label-long3">
|
||||
<label class="short-label">Effects</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each nonstockmaneuvers as |maneuver key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{maneuver._id}}">
|
||||
{{#each allmaneuvers as |maneuver key|}}
|
||||
{{#if (ne maneuver.system.maneuvertype "mental")}}
|
||||
<div class="{{#if maneuver.system.isstock}}maneuver-list maneuver-is-stock{{/if}}">
|
||||
<li class="item stat flexrow list-item list-item-shadow " data-item-id="{{maneuver._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{maneuver.img}}" /></a>
|
||||
<span class="item-field-label-long">{{maneuver.name}}</span>
|
||||
<span class="item-field-label-long"><a class="roll-item"><i class="fas fa-dice"></i>{{maneuver.name}}</a></span>
|
||||
|
||||
<span class="item-field-label-short">{{maneuver.system.pha}}</span>
|
||||
<span class="item-field-label-short">{{maneuver.system.ocv}}</span>
|
||||
<span class="item-field-label-short">{{maneuver.system.dcv}}</span>
|
||||
|
||||
<span class="item-field-label-long">{{maneuver.system.effects}}</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>
|
||||
|
||||
<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>
|
||||
|
||||
{{!-- Powers Tab --}}
|
||||
@ -514,11 +657,11 @@
|
||||
<span class="item-field-label-short">
|
||||
<label class="item-field-label-short">Cost</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="item-field-label-medium">Name</label>
|
||||
<span class="item-field-label-long3">
|
||||
<label class="item-field-label-long3">Name</label>
|
||||
</span>
|
||||
<span class="item-field-label-long4">
|
||||
<label class="item-field-label-long4">Display</label>
|
||||
<span class="item-field-label-long2">
|
||||
<label class="item-field-label-long2">Display</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="item-field-label-medium">Effect</label>
|
||||
@ -526,24 +669,35 @@
|
||||
<span class="item-field-label-short">
|
||||
<label class="item-field-label-short">Roll</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="item-field-label-medium">END</label>
|
||||
<span class="item-field-label-short">
|
||||
<label class="item-field-label-short">END</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each powers as |power key|}}
|
||||
<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"
|
||||
src="{{power.img}}" /></a>
|
||||
src="{{power.img}}" /></a>
|
||||
<span class="item-field-label-short">{{power.system.cost}}</span>
|
||||
<span class="item-field-label-medium">{{power.name}}</span>
|
||||
<span class="item-field-label-long4">{{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>
|
||||
{{#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>
|
||||
{{#if (eq system.typemodifier "attack")}}
|
||||
<span class="item-field-label-long3">
|
||||
<a class="roll-power-attack">
|
||||
<i class="fas fa-dice"></i>
|
||||
{{power.name}}
|
||||
</a>
|
||||
</span>
|
||||
{{else}}
|
||||
<span class="item-field-label-long3">{{power.name}}</span>
|
||||
{{/if}}
|
||||
<span class="item-field-label-long2">{{power.system.displayname}}</span>
|
||||
<span class="item-field-label-medium"><a class="roll-damage" data-type="power"><i
|
||||
class="fas fa-dice"></i>{{power.system.damage}}</a></span>
|
||||
{{#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}}
|
||||
<span class="item-field-label-short"> </span>
|
||||
{{/if}}
|
||||
<span class="item-field-label-medium">{{power.system.endurance}}</span>
|
||||
<span class="item-field-label-short">{{power.system.endurance}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
@ -570,8 +724,9 @@
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{comp.img}}" /></a>
|
||||
<span class="item-name-label">{{comp.name}}</span>
|
||||
{{#if comp.system.hasroll}}
|
||||
<span class="item-field-label-short"><a class="roll-item" data-type="perk"><i class="fas fa-dice"></i>{{comp.system.roll}}-</a></span>
|
||||
{{#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>
|
||||
{{else}}
|
||||
<span class="item-field-label-short"> </span>
|
||||
{{/if}}
|
||||
@ -591,15 +746,22 @@
|
||||
<h3>Encumbrance</h3>
|
||||
<span class="small-label">Current : {{encCurrent}}</span>
|
||||
<span class="small-label">Capacity : {{encCapacity}}</span>
|
||||
<span class="small-label">Total value : {{totalValue}}</span>
|
||||
</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="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>
|
||||
|
||||
@ -651,38 +813,38 @@
|
||||
{{!-- Notes Tab --}}
|
||||
<div class="tab notes" data-group="primary" data-tab="notes">
|
||||
<h3>Notes 1 : </h3>
|
||||
<div class="form-group editor">
|
||||
<div class="medium-editor ">
|
||||
{{editor notes1 target="system.biodata.notes1" button=true owner=owner
|
||||
editable=editable}}
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<h3>Notes 2 : </h3>
|
||||
<div class="form-group editor">
|
||||
<div class="small-editor">
|
||||
{{editor notes2 target="system.biodata.notes2" button=true owner=owner
|
||||
editable=editable}}
|
||||
</div>
|
||||
<hr>
|
||||
<h3>Notes 3 : </h3>
|
||||
<div class="form-group editor">
|
||||
<div class="small-editor">
|
||||
{{editor notes3 target="system.biodata.notes3" button=true owner=owner
|
||||
editable=editable}}
|
||||
</div>
|
||||
<hr>
|
||||
<h3>Notes 4 : </h3>
|
||||
<div class="form-group editor">
|
||||
<div class="small-editor">
|
||||
{{editor notes4 target="system.biodata.notes4" button=true owner=owner
|
||||
editable=editable}}
|
||||
</div>
|
||||
<hr>
|
||||
<h3>Notes 5 : </h3>
|
||||
<div class="form-group editor">
|
||||
<div class="small-editor">
|
||||
{{editor notes5 target="system.biodata.notes5" button=true owner=owner
|
||||
editable=editable}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</form>
|
@ -34,7 +34,8 @@
|
||||
|
||||
{{#if combatCount}}
|
||||
{{#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}}
|
||||
<h3 class="encounter-title noborder">{{localize 'COMBAT.NotStarted'}}</h3>
|
||||
{{/if}}
|
||||
@ -60,11 +61,11 @@
|
||||
|
||||
<ol id="combat-tracker" class="directory-list">
|
||||
{{#each turns}}
|
||||
{{#if (ne this.initiative "-1")}}
|
||||
{{#if (checkInit this.initiative)}}
|
||||
<li class="combatant actor directory-item flexrow {{this.css}}" data-combatant-id="{{this.id}}">
|
||||
<img class="token-image" data-src="{{this.img}}" alt="{{this.name}}"/>
|
||||
<div class="token-name flexcol">
|
||||
<h4>{{this.name}} {{log this}} {{#if this.holdAction}}(H){{/if}}</h4>
|
||||
<h4>{{this.name}} </h4>
|
||||
<div class="combatant-controls flexrow">
|
||||
{{#if ../user.isGM}}
|
||||
<a class="combatant-control {{#if this.hidden}}active{{/if}}" data-tooltip="COMBAT.ToggleVis" data-control="toggleHidden">
|
||||
|
@ -1,18 +1,42 @@
|
||||
<form class="skill-roll-dialog">
|
||||
<header class="roll-dialog-header">
|
||||
{{#if img}}
|
||||
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
{{/if}}
|
||||
<h1 class="dialog-roll-title roll-dialog-header">{{title}}</h1>
|
||||
<div class="flexrow">
|
||||
{{#if img}}
|
||||
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
{{/if}}
|
||||
<h2 class="dialog-roll-title roll-dialog-header">{{title}}</h2>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
{{#if charac}}
|
||||
<div class="flexrow">
|
||||
<span class="item-field-label-long margin-item-list">Characteristic : </span>
|
||||
<span class="item-field-label-medium margin-item-list">{{charac.roll}}-</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="item-field-label-long margin-item-list">{{#if isPerception}}Perception{{else}}Characteristic{{/if}} : </span>
|
||||
<span class="item-field-label-medium margin-item-list">{{charac.roll}}-</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq subMode "ocv")}}
|
||||
<div class="flexrow">
|
||||
<span class="item-field-label-long margin-item-list">OCV : </span>
|
||||
<span class="item-field-label-medium margin-item-list">{{characteristics.ocv.value}}</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} OCV : </span>
|
||||
<span class="item-field-label-medium margin-item-list">{{fixNum item.system.ocv}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq subMode "omcv")}}
|
||||
<div class="flexrow">
|
||||
<span class="item-field-label-long margin-item-list">OMCV : </span>
|
||||
<span class="item-field-label-medium margin-item-list">{{characteristics.omcv.value}}</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} OMCV : </span>
|
||||
<span class="item-field-label-medium margin-item-list">{{fixNum item.system.omcv}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if item}}
|
||||
|
@ -7,12 +7,6 @@
|
||||
|
||||
<hr>
|
||||
|
||||
{{#if img}}
|
||||
<div >
|
||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexcol">
|
||||
</div>
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user