Compare commits
74 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 | |||
536739fced | |||
2d328659b2 | |||
b9b8fa7c0d | |||
0368be050b | |||
4ca23257cb | |||
e0adf04753 | |||
d399b29d84 | |||
4d3f067bf9 | |||
3489dc6254 | |||
b23d0836fe | |||
0fe4202098 | |||
dc27fa8ff2 | |||
d0f8023234 | |||
3ec4ab0476 | |||
521d14c263 |
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@ -0,0 +1 @@
|
||||
packs/* filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.history/
|
28
README.md
28
README.md
@ -1,2 +1,28 @@
|
||||
# fvtt-dark-stars
|
||||
This is the official Hero System 6th Edition game system for FoundryVTT, based on the TTRPG from Hero Games and developed by Legendsmiths, LLC. For more information about Legendsmiths and their work, visit https://legendsmiths.com/.
|
||||
|
||||
The Hero System game system is not usable standalone. To play this game you need a copy of the core rulebook.
|
||||
|
||||
It features :
|
||||
|
||||
- PC/NPC sheets
|
||||
- Roll management and associated helpers
|
||||
- Segment and Turn management in the combat tracker
|
||||
- Official compendiums
|
||||
|
||||

|
||||
|
||||
Installation
|
||||
Manifest URL: https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/master/system.json
|
||||
Project page : https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6
|
||||
|
||||
For manual installation, use the provided manifest URL in the "Install System" popup window while managing game systems.
|
||||
|
||||
Copyright (c) 2023 Legendsmiths, LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
All content for the HERO System™® is DOJ, Inc.’s trademark for its roleplaying system. HERO System Copyright ©1984, 1989, 2002, 2009 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Fantasy Hero ©2003, 2010 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Star Hero ©2003, 2011 by DOJ, Inc. d/b/a Hero Games. All rights reserved. All DOJ trademarks and copyrights used with permission and under license with Legendsmiths , LLC. For further information about Hero Games and the HERO System, visit www.herogames.com. All HERO System™® content is not be included to copy, modify, merge, publish, distribute, sublicense, and/or sell with copies of the Software with the exception of the current licensee Legendsmiths, LLC.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
4
_deprecated/perks.db
Normal file
4
_deprecated/perks.db
Normal file
@ -0,0 +1,4 @@
|
||||
{"name":"Follower","type":"perk","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Perks.webp","system":{"displayname":"Follower","description":"This Perk means the character has a Follower of some kind — a person loyal to him and willing to do what he asks. Examples of Followers include human agents, familiars, golems, robots, and kid sidekicks.\nYou build Followers with the same Base Points as any other character in the campaign, with an amount of Total Points and an amount of Matching Complications. However, the Follower must be built on fewer Total Points than the character who buys him.\nThe cost to buy a Follower is his Total Points divided by 5. (Don’t reduce the Total Points by his Matching Complications amount.) For example, suppose Beetleman wants a kid sidekick, Buggy. Beetleman is built on 400 Total Points. Buggy is built on 300 Total Points (including 50 Matching Complications points). Buggy costs Beetleman (300/5 =) 60 Character Points.","notes":"","effects":"","cost":"","activecost":"","basecost":"1","value":"","modifiers":"","hasroll":"","roll":"","levelscost":"1","characteristic":"","levels":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674949916155,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"folder":null,"sort":0,"_id":"L3vwlIh3oloE6A8W"}
|
||||
{"name":"Money","type":"perk","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Perks.webp","system":{"displayname":"Money","description":"<p>Money may not make the world go round, but it can help motivate PCs. This Perk is most applicable in Heroic games, where characters spend money in the game to buy things.</p>\n<p>In Superheroic campaigns, where characters buy equipment with Character Points, Money isn’t as important.</p>\n<p>The accompanying table gives the point cost for various levels of annual income. It lists dollar figures; substitute other types and amounts of money (gold pieces, Space Confederation credits, or the like) as appropriate for the campaign.</p>\n<table style=\"width: 42.0242%; height: 185px;\" border=\"1\"><colgroup><col style=\"width: 15.6388%;\"><col style=\"width: 84.3612%;\"></colgroup>\n<tbody>\n<tr style=\"height: 17px;\">\n<td style=\"height: 17px;\"><strong>Value</strong></td>\n<td style=\"height: 17px;\"><strong>Annual Income</strong></td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"height: 17px;\">(10)</td>\n<td style=\"height: 17px;\">Complication: Destitute ($3,000)</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"height: 17px;\">(5)</td>\n<td style=\"height: 17px;\">Complication: Poor ($10,000)</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"height: 17px;\">0</td>\n<td style=\"height: 17px;\">Middle Class: $75,000</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"height: 17px;\">5</td>\n<td style=\"height: 17px;\">Well Off: $500,000</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"height: 17px;\">10</td>\n<td style=\"height: 17px;\">Wealthy: $5,000,000</td>\n</tr>\n<tr style=\"height: 17px;\">\n<td style=\"height: 17px;\">15</td>\n<td style=\"height: 17px;\">Filthy Rich: unlimited income</td>\n</tr>\n</tbody>\n</table>\n<p> </p>","notes":"","effects":"","cost":null,"activecost":null,"basecost":0,"value":"","modifiers":"","hasroll":false,"roll":"","levelscost":"5","characteristic":"","levels":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674950084138,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"folder":null,"sort":0,"_id":"iJpTf46Zei339kOu"}
|
||||
{"name":"Fringe Benefit","type":"perk","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Perks.webp","system":{"displayname":"Fringe Benefit","description":"<p>A Fringe Benefit is a Perquisite the character acquires from his job or background — a “perk” in the classic sense. The Fringe Benefits Table lists the cost for some common Fringe Benefits in various campaigns.</p>\n<p><strong>Universal Perks (any genre or time period)</strong><br>1 point License to practice a profession<br>1-10 points Membership (see text)<br>5 points Diplomatic Immunity<br>10 points Head of State (with GM’s permission; may cost more)</p>\n<p><strong>Modern-Day Perks</strong><br>1 point Passport<br>1 point Press Pass<br>1 point Weapon Permit (where appropriate)<br>2 points Concealed Weapon Permit (where appropriate)<br>2 points Local Police Powers<br>2 points Private Investigator License<br>3 points Federal/National Police Powers<br>5 points International Police Powers<br>10 points License to Kill</p>\n<p><strong>Fantasy Perks</strong><br>2 points Knight<br>2 points Member of the Lower Nobility<br>3 points Low Justice: Character has the right to mete out justice<br>5 points Member of the Aristocracy/Higher Nobility</p>\n<p><strong>Science Fiction Perks</strong><br>1 point Starship License<br>3 points Galactic Computernet Access Card<br>5 points Planetary Police Powers<br>8 points Interstellar Police Powers</p>","notes":"","effects":"","cost":null,"activecost":null,"basecost":1,"value":"","modifiers":"","hasroll":false,"roll":"","levelscost":"1","characteristic":"","levels":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674950242210,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"folder":null,"sort":0,"_id":"nsIbgyutCg1NQqyr"}
|
||||
{"name":"Contact","type":"perk","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Perks.webp","system":{"displayname":"Contact","description":"A character with this Perk knows someone who can occasionally help him out, usually because that person has a job, position, or other resources useful to the character. A character can buy this Perk many times; in each case, it represents a different person he knows.\nA Contact costs 2 Character Points for an 11- roll. Each +1 to the roll costs +1 Character Point.\nWhen a character wants to use his Contact, he must make his roll. If the roll fails, the Contact is of no use to him — either the character can’t get in touch with his Contact, or the Contact can’t help. If the roll succeeds, the Contact helps the character as best he can, though he probably won’t risk his life, job, or anything else really important.","notes":"","effects":"","cost":null,"activecost":null,"basecost":2,"value":"","modifiers":"","hasroll":true,"roll":11,"levelscost":"1","characteristic":"","levels":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674950102276,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"folder":null,"sort":0,"_id":"yWTR7MCOtGWm1KCz"}
|
60
_deprecated/skills.db
Normal file
60
_deprecated/skills.db
Normal file
@ -0,0 +1,60 @@
|
||||
{"name":"Gambling","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Gambling","description":"Gambling represents a character’s ability to win gambling games require some skill (blackjack, poker, and so forth). Additionally, Gambling lets a character cheat (some forms of cheating also require Sleight Of Hand). A successful roll means the character won (or cheated successfully) — the more he makes it by, the more he wins. Failing the roll means he lost or his cheating failed.","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":"0663RVbZRl0oZ0Dr"}
|
||||
{"name":"Mimicry","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Mimicry","description":"Mimicry allows a character to imitate someone else’s voice, or certain other sounds, perfectly. Others can detect Mimicry with a Skill Versus Skill Contest pitting the listener’s Hearing PER Roll against the Mimicry roll.","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":1674948505028,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"1fWyIvm7y2Skkgf2"}
|
||||
{"name":"Computer Programming","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Computer Programming","description":"A character with Computer Programming can program and operate computers. This includes knowledge of, and the ability to use, hardware, software, operating systems, and the like, both for routine uses and unusual ones (such as hacking, searching for information, or defeating computer- assisted security devices).","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":1674948505021,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"2ADd7QW9ppTDme2W"}
|
||||
{"name":"Bribery","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Bribery","description":"A character with Bribery knows when to bribe someone, how to approach him, and how much to offer. If a Bribery attempt fails badly, or if the character attempts to bribe an incorruptible target, the potential bribee may call his superior or the police, arrest the character, or threaten him wita weapon. Also, just because a character has bribed someone doesn’t mean he’ll stay bribed.","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":"2vZ9IPyad2RaqrCZ"}
|
||||
{"name":"Science Skill","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Science Skill","description":"This general and very flexible Background Skill gives a character a solid grasp of and working knowledge of a particular field of science (whether a physical science, like Chemistry, or a social science, like Anthropology). For 2 Character Points, the character has an 11- roll to perform a given Science Skill (SS). Alternatel, characters can base the Skill upon a Characteristic (usually INT) for 3 Character Points, giving a base (9 + (CHAR/5)) roll. In either case, each +1 to the Skill Roll costs 1 Character Point.\nThe character must define the science when he purchases the SS, and it can be virtually any scientific subject he can think of. Examples include: Accounting; Anthropology; Archaeology; Biology; Chemistry; Genetics; Mathematics; Medicine; Physics; Sociology; and Zoology.","notes":"","effects":"","cost":"","activecost":"","basecost":"2","value":"","modifiers":"","skilltype":"Background","characteristic":"","base":"11","levelscost":"1","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":1674948505021,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"5Pik4otZCyWboJ9N"}
|
||||
{"name":"Conversation","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Conversation","description":"Conversation allows a character to extract information from people with careful conversation, and/or to be an entertaining conversationalist. If Conversation is performed correctly, the victim won’t even realize he’s divulged anything.","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":1674948505022,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"7StqFNmSny7Y4IOv"}
|
||||
{"name":"Inventor","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Inventor","description":"Inventor allows a character to design and construct new devices. It does not grant a character any scientific or technical knowledge; to use it, he needs related Skills (for instance, Weaponsmith to invent new weapons, or Electronics and SS: Physics to design a satellite).","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":"7fGOeQRBD0pblsHf"}
|
||||
{"name":"Weapon Familiarity","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Weapon Familiarity","description":"Weapon Familiarity represents the knowledge of how to use specific weapons. It is used primarily in Heroic campaigns; characters in Superheroic campaigns, who pay Character Points for their weapons, automatically know how to use them. A character fights at -3 OCV when using a weapon for which he does not know the WF.\nEach Weapon Familiarity (WF) costs 2 Character Points. The character must select one of the following groups of weapons:\nCommon Melee Weapons (axes, hammers, knives, maces, swords, spears, polearms, clubs)\nCommon Missile Weapons (bows, crossbows, thrown weapons)\nSmall Arms (pistols, rifles, shotguns, submachine guns, assault rifles, grenades)\nUncommon Modern Weapons (flamethrowers, machine guns, shoulder-fired weapons)\nEmplaced Weapons (siege engines, howitzers, recoilless rifles, mortars, anti-aircraft guns)\nCharacters can purchase a WF with a single specific type of weapon for 1 Character Point. This includes not only individual weapons (greatswords, longbows, submachine guns), but “unusual” weapons not covered by the categories listed above (staffs, slings, whips, garrotes, nets, flails, and so on).","notes":"","effects":"","cost":"","activecost":"","basecost":"","value":"","modifiers":"","skilltype":"Combat","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":1674948505026,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"7o9if8ttcolxaivr"}
|
||||
{"name":"Oratory","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Oratory","description":"Oratory represents the ability to speak to an audience and deliver a convincing presentation.","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":1674948505020,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"9gS3QB5ZVWfGBbGA"}
|
||||
{"name":"Persuasion","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Persuasion","description":"Characters with Persuasion can convince, persuade, or influence individuals, or tell believable lies. Persuasion is normally only used on NPCs; PCs are usually allowed more latitude with their decisions. However, a successful Persuasion roll should make a PC much more inclined to believe the speaker or do as he requests.","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":1674948505022,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"9hpvAhpyy2tWVUJm"}
|
||||
{"name":"Mechanics","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Mechanics","description":"A character with Mechanics can use the proper tools to repair, replace, modify, and build mechanical devices.","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":"Ao2PYCvbhDoeUkbu"}
|
||||
{"name":"Lockpicking","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Lockpicking","description":"Lockpicking let a character open locks using special tools instead of keys. It does not allow the character to detect or bypass security devices; that requires Security Systems.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":1674948505022,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"BPdrI7tkcjq6LR2F"}
|
||||
{"name":"Language","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Language","description":"This Background Skill represents a level of fluency in, and knowledge of, a language — the more points spent, the greater the character’s fluency.\nEach character knows his native language for free at the “Idiomatic” level.","notes":"","effects":"","cost":null,"activecost":null,"basecost":1,"value":"","modifiers":"","skilltype":"agility","characteristic":"","base":"","levelscost":1,"levels":null,"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":1674948522185,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"D26vgIaz5Tva12dY"}
|
||||
{"name":"Martial Arts","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Martial Arts","description":"Martial Arts represents enhanced HTH Combat fighting ability, whether derived from intense training, innate ability, or hard-won experience. It includes everything from the grace and power of kung fu, to the brutality of bare-knuckle street fighting skills, to fencing.\nMartial Arts consists of various Martial Maneuvers which characters purchase individually. You can choose which Martial Maneuvers your character knows, but you must spend a minimum of 10 Character Points on Martial Maneuvers — you can’t just buy one. The accompanying sidebar lists the cost of the various Martial Maneuvers; for explanations of what they can do and how they work, see Martial Maneuvers on BR 100.","notes":"","effects":"","cost":"","activecost":"","basecost":"","value":"","modifiers":"","skilltype":"Combat","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":1674948505024,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"EDjhmQ7Ue4NhOVA0"}
|
||||
{"name":"Electronics","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Electronics","description":"Electronics allows a character to identify, understand, analyze, build, repair, disable, and rewire electronic devices. The character usually needs tools to use Electronics, and often lots of time.","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":1674948505021,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"G9yg8s6PnM4ffGvF"}
|
||||
{"name":"Shadowing","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Shadowing","description":"A character with Shadowing can follow or watch someone subtly (either on foot or in a vehicle), establish static surveillance without being detected, 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":1674948505021,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"HOuho22NNY5SkrLF"}
|
||||
{"name":"Navigation","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Navigation","description":"A character with Navigation can determine his location and plot an efficient course between two points.","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":1674948505028,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"HzC1JvHFVdUAMLO2"}
|
||||
{"name":"Stealth","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Stealth","description":"Characters with Stealth can hide in shadows, move silently, and/or avoid detection in combat conditions. When a character wants to be stealthy, use his Stealth roll versus the PER Rolls of anyone attempting to find him (or who might perceive him) in a Skill Versus Skill Contest.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":"Is86jzSWyQt0YJP7"}
|
||||
{"name":"Skill Levels","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Skill Levels","description":"Once a character knows a Skill, he can improve his ability to use it by buying Skill Levels. The appli- cability and uses of a Skill Level depend on what types of Skills it works with; there are five categories of Skill Levels, each described in the accompanying Skill Levels Table. A character must define what Skills a Skill Level works with when he buys it, and cannot change them thereafter.\nAllocating Skill Levels\nA character can only apply a Skill Level to one task at a time. He must choose which Skill a Skill Level applies to, though he can change the assignment of his Skill Levels from Phase to Phase.\nChanging the assignment of Skill Levels constitutes a Zero Phase Action, but a character can only do it once per Phase. After he attacks, his Skill Levels stay as they are until his next Phase begins.\nSkill Levels On Foci\nWith the GM’s permission, characters can put Limitations on Skill Levels. The GM may restrict which types of Skill Levels a character can Limit; for example he might rule that only 3-point Skill Levels can have Limitations.","notes":"","effects":"","cost":"","activecost":"","basecost":"","value":"","modifiers":"","skilltype":"","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":1674948505026,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"J7ydpjeunnYdWCDS"}
|
||||
{"name":"Tactics","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Tactics","description":"A character with Tactics knows how to fight effectively and efficiently in discrete battles and small units — how to position (and best use) a small force, when it’s time to retreat, 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":1674948505029,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"Kb7OAfmiyTO09ewh"}
|
||||
{"name":"Bureaucratics","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Bureaucratics","description":"A character with Bureaucratics can deal with bureaucrats, cut through red tape, and extract information from bureaucracies. He also knows the right people to talk to (for just about anything) and how to reach them","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":1674948505024,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"LzGcxVcsrTwDBjNh"}
|
||||
{"name":"Power","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Power","description":"This Skill represents a character’s ability to use one (or more) of his powers or abilities in creative or unusual ways. Its name varies from campaign to campaign, setting to setting, character to character. Characters can base Power on any one of several Characteristics, depending on the nature of the Skill as the character uses it. If based on INT, it is considered an Intellect Skill; if on DEX, an Agility Skill; and so forth.\nPower serves two related functions. First, it may act as a Required Skill Roll (see BR 71) for abilities which the GM rules must have a Skill Roll to function. For example, in a Fantasy campaign, Power would be called Magic and all wizards would use it to cast spells.\nSecond, Power can simulate a character’s level of skill with a particular power, ability, or attack. Characters who make appropriate Power rolls can perform “tricks” or do unusual things with their powers. For example, a “brick” in a comic book superhero campaign might buy Power as Strength Tricks and use it to etch a message into hardened steel without breaking the steel or hurting himself.\nGMs should control all uses of Power care- fully. Characters who want to perform a particular “trick” or “power stunt” frequently should pay Character Points for it (especially if it has an effect on combat).","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Varies","characteristic":"","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":"MJRfmSE068zx6VgW"}
|
||||
{"name":"Combat Piloting","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Combat Piloting","description":"Characters with Combat Piloting can pilot and control vehicles which operate in three dimensions (everything from airplanes, to submarines,\nto spaceships) in difficult situations (primarily combat).\nTo use Combat Piloting, the character must know how to operate the vehicle (see Transport Familiarity, BR 30). A character with Combat Piloting gets one 1-point TF from the Air Vehicles category for free.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":1674948505028,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"Man0idYydTHknrzS"}
|
||||
{"name":"Forensic Medicine","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Forensic Medicine","description":"Characters with Forensic Medicine can study a corpse (or even perform an autopsy) to learn about the cause of death, how long the individual has been dead, if the corpse was moved after death, 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":1674948505026,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"Mvh1C4coAd7gBenN"}
|
||||
{"name":"Riding","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Riding","description":"Characters with Riding can ride a living creature under difficult circumstances, including fighting while mounted, leaping obstacles, and the like. To use Riding, the character must know how to handle the animal (see Transport Familiarity, BR 30). A character with Riding gets one 1-point TF from the Riding Animals category for free.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":1674948505020,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"O5vJ3zGiGRT1GrgB"}
|
||||
{"name":"Cryptography","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Cryptography","description":"Cryptography allows a character to solve ciphers and codes, encrypt or encode messages, and hide messages in ordinary text. In modern settings it may require the use of a computer.","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":1674948505029,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"Qk3So74Lxwpfsf7Z"}
|
||||
{"name":"Professional Skill","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Professional Skill","description":"This general and very flexible Background Skill gives a character the ability to perform certain professions, crafts, tasks, and the like. For 2 Character Points, the character has an 11- roll to perform a given Professional Skill (PS). Alternately, characters can base the Skill upon a Characteristic for 3 Character Points, giving a base (9 + (CHAR/5)) roll. In either case, each +1 to the Skill Roll costs 1 Character Point.\nThe character must define the job, craft, or task when he purchases the PS, and it can be virtually anything he can think of. Examples include: Accountant; Alchemist; Carpenter; Goldsmith; Gunslinger; Lawyer; Singer; Singing; or Wizard. As the names indicate, PSs often represent a character’s employment, but can also indicate hobbies, interests, and other abilities.","notes":"","effects":"","cost":"","activecost":"","basecost":"2","value":"","modifiers":"","skilltype":"Background","characteristic":"","base":"11","levelscost":"1","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":1674948505021,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"R29hL1VMQ7Y2qiC5"}
|
||||
{"name":"Animal Handler","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Animal Handler","description":"Animal Handler lets a character train animals to do his bidding. He can teach animal tricks, calm down a ferocious or enraged animal, make a trained attack animal attack a specific person in a crowd, or the like.","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":1674948505022,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"RNcJSdMGQeTO2g1J"}
|
||||
{"name":"Demolitions","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Demolitions","description":"A character with Demolitions can use explosives properly. He knows about different types of explosives, how to handle and set them off, and how to defuse explosive devices.","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":1674948505021,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"Slz7PwNs3eEqfmRa"}
|
||||
{"name":"Knowledge Skill","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Knowledge Skill","description":"This general and flexible Background Skill includes knowledge of certain groups, places, people and things — any subject the character wishes to have knowledge of. For 2 Character Points, the character has an 11- roll to perform a given Knowledge Skill (KS). Alternately, characters can base the Skill upon a Characteristic (typically INT) for 3 Character Points, giving a base (9 + (CHAR/5)) roll. In either case, each +1 to the Skill Roll costs 1 Character Point.\nThe character must define the subject when he purchases the KS, and it can be virtually any- thing he can think of. Examples include: Arcane And Occult Lore; British Literature; Demons; The Galactic Confederation; Horse Racing; The Mafia; New York City; Rock Music; and Zulu Culture.\nCharacters may not take KSs for scientific subjects, like Astronomy, Biology, or Physics; those require Science Skills (BR 29).","notes":"","effects":"","cost":"","activecost":"","basecost":"2","value":"","modifiers":"","skilltype":"Background","characteristic":"","base":"11","levelscost":"1","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":"SxfZuPeYyxawm7sC"}
|
||||
{"name":"Range Skill Levels","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Range Skill Levels","description":"Range Skill Levels (RSLs) are similar to Combat Skill Levels (BR 26). However, they only increase a character’s OCV, and only for purposes of overcoming the Range Modifier (BR 96). The accompanying Range Skill Levels Table lists the cost per +1 OCV, based on how many different types of attacks the RSL applies to.\nThe smallest RSL which can be bought with Limitations is a 3-point Level.","notes":"","effects":"","cost":"","activecost":"","basecost":"","value":"","modifiers":"","skilltype":"Combat","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":"Tqc864Dsj0kRlTuF"}
|
||||
{"name":"Bugging","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Bugging","description":"Characters with Bugging can plant and operate listening, visual, or other sensing devices (“bugs”) properly, and “sweep” (search physically or with detectors) for bugs. A successful roll lets a character find an existing bug, or correctly place one. The GM should assume characters with Bugging have a small supply of average quality bugging equipment.","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":"UoBCHQdHdhoUk9IV"}
|
||||
{"name":"Forgery","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Forgery","description":"Forgery is the ability to duplicate documents, objects, and money. It usually requires time and specialized equipment (especially for highly technical forgeries), but duplicating a signature by hand only takes a few seconds.","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":"VLb49ufYJ5RTajpa"}
|
||||
{"name":"Contortionist","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Contortionist","description":"Contortionist gives a character the ability to manipulate his body so as to get out of ropes and other bonds (or to fit into tiny spaces he’s normally too big for). An attempt to escape from normal ropes would incur a -0 or -1 modifier, wires would be -2 or -3, and handcuffs would be -3 or -4.\nA character can use Contortionist to escape from Grabs (BR 98). If he succeeds with a roll exactly, he can add 1d6 to his STR; for every additional point by which the roll was made, he can add +1d6 more.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":1674948505022,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"Vkr4zouWGBLFobeB"}
|
||||
{"name":"Acrobatics","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Acrobatics","description":"Acrobatics lets a character perform flips, jumps, and rolls like a circus acrobat. Acrobatics enables the character to jump from one moving vehicle to another safely, swing from flagpoles, bounce off awnings, and execute other tricky moves. He can also maintain his balance on narrow or difficult surfaces. At the GM’s option, he may sometimes be able to obtain Surprise Move (BR 96) bonuses when using Acrobatics in combat.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":1674948505029,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"Vmnydvxnv2y4oI92"}
|
||||
{"name":"Sleight of Hand","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Sleight of Hand","description":"Sleight Of Hand is the ability to palm items, fool the eye, perform certain magic tricks, and so forth. Large objects (anything bigger than a small pistol) are, of course, more difficult to palm (-1 to\n-5). Characters can also use Sleight Of Hand to pick pockets in a Skill Versus Skill Contest against the victim’s PER Roll.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":"W9tZ6KJ7Nild2nMk"}
|
||||
{"name":"Combat Driving","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Combat Driving","description":"Characters with Combat Driving can drive and control vehicles which operate in two dimensions (like chariots, cars, and speedboats) in difficult situations.\nTo use Combat Driving, the character must know how to operate the vehicle (see Transport Familiarity, BR 30). A character with Combat Driving gets one 1-point TF from the Ground Vehicles category for free","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":1674948505022,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"XLQgTrArS7iTytHn"}
|
||||
{"name":"Paramedics","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Paramedics","description":"A character with Paramedics knows how to perform first aid, stop bleeding, repair damage, and generally keep someone alive. He can prevent someone from bleeding to death (BR 103); a successful roll (with a penalty of -1 per 2 BODY of\ndamage sustained) stops the victim from losing any more BODY due to bleeding. Advanced medical care, such as surgery, requires a hospital and Skills such as Science Skill: Medicine.","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":"Xz4zc1x90THjxm6I"}
|
||||
{"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":"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"}
|
||||
{"name":"Acting","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Acting","description":"Acting enables a character to alter his physical mannerisms and speech patterns to seem to be another person, to fool someone, or to fake moods and emotions. Characters can use it to hide their true identity or to impersonate another individual. To detect an acting character, use Acting versus an INT Roll in a Skill Versus Skill Contest.","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":1674948505024,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"nI5iEf0yiYhxq25c"}
|
||||
{"name":"Weaponsmith","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Weaponsmith","description":"Characters with Weaponsmith can make, maintain, and repair any type of weapon. They can also identify the origin, uses, and effects of any weapon they are familiar with or have time to analyze.","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":1674948505021,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"nUN9KhicXuNmp4D1"}
|
||||
{"name":"Trading","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Trading","description":"Trading gives a character the ability to strike a good bargain with a merchant or customer. Prices often aren’t fixed, especially in pre-modern genres, so a character with Trading can save (or make) considerable money if he wins a Skill Versus Skill Contest (versus the other character’s Trading or an INT Roll). Losing the Contest may mean paying too much, or not making a profit.","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":1674948505022,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"oemgQRPYovpJWnIy"}
|
||||
{"name":"Climbing","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Climbing","description":"Climbing allows a character to climb unusually difficult walls, trees, and buildings, as long as handholds exist. Climbing speed varies according to the structure being climbed, but the base speed is 2m per Phase. Climbing equipment (such as rope, grapnels, pitons, or special shoes) may provide bonuses to the roll or speed the pace of climbing.\nA climbing character’s OCV and DCV are halved, and may be 0 if the character is in a really difficult position. An unsuccessful Climbing roll usually means the character cannot climb that area, but sometimes means a fall if the roll was spectacularly bad.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":1674948505028,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"oriixvERNMbudc4F"}
|
||||
{"name":"Criminology","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Criminology","description":"A character with Criminology knows how to look for clues, dust for fingerprints, analyze evidence, examine criminal records and files, do ballistics tests, and so on.","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":"p3hcPolw32oekFFK"}
|
||||
{"name":"Lipreading","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Lipreading","description":"Lipreading allows a character to read someone’s lips to tell what that person is saying (if he knows the language that person’s speaking).","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":"p9K5CQYwgZOl343r"}
|
||||
{"name":"Disguise","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Disguise","description":"Disguise allows a character to change his (or another character’s) appearance with makeup, costumes, body language, and facial expression (though acting like another person requires Acting). He can alter his appearance, or disguise himself to look like a specific person (though this usually involves a -1 to -3 penalty). To spot someone wearing a disguise, an onlooker must make a PER Roll in a Skill Versus Skill Contest against the character’s Disguise.","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":1674948505028,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"qoYl6qI2RzQh2pNk"}
|
||||
{"name":"Breakfall","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Breakfall","description":"Breakfall allows a character to roll out from a fall and stand up without taking a Half Phase. A successful roll also means the character takes only half damage from the fall. Eac4m the character falls imposes a -1 penalty on the roll. If the character makes his Breakfall Roll by half (after applying the height modifier), he takes no damage from the fall at all. Characters can also use Breakfall to resist damage from Throws (see BR 98, 100); a successful roll (at -1 for every 2d6 in the Throw attack) halves the damage taken. A character can use Breakfall to land on his feet if he suffers Knockback or Knockdown. If his roll succeeds, he takes no damage and doesn’t have to spend a Half Phase standing up. Each 4m of Knockback imposes a -1 on the Breakfall Roll. Characters who are Knocked Back into something (like a wall or a vehicle) cannot use Breakfall to lessen the effects of Knockback.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":1674948505021,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"sJr4xWMMISI8DcGY"}
|
||||
{"name":"Combat Skill Levels","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Combat Skill Levels","description":"Once a character knows how to use an attack, he can improve his Combat Value by buying Combat Skill Levels (CSLs). The applicability and uses of a CSL depend on what types of attacks it works with. There are four categories of CSL, each described below. A character must define what attacks a Combat Skill Level works with when he buys it, and cannot change it thereafter.\n2-Point Combat Skill Levels\nA 2-point Combat Skill Level adds +1 to a character’s OCV when he uses one single type of attack. Two-point CSLs can never apply to DCV. Examples of attacks a 2-point CSL could be bought for include Punches, Broadswords, and Claws.\n3-Point Combat Skill Levels\nA 3-point Combat Skill Level can add +1 to a character’s OCV or +1 to his DCV with a Small Group of attacks. This means any group of up to three related maneuvers or attacks, or any other group of attacks the GM regards as smaller than a Large Group.\n5-Point Combat Skill Levels\nA 5-point Combat Skill Level can add +1 to a character’s OCV or +1 to his DCV with a Small Group of attacks. This means more attacks than a Small Group, but fewer than “all HTH Combat” or “all Ranged Combat,” such as any Power Framework with more than three slots, or any Martial Arts style with more than three Martial Maneuvers.\n8-Point Combat Skill Levels\nAn 8-point Combat Skill Level can add +1 to a character’s OCV or +1 to his DCV with either All HTH Combat or All Ranged Combat.\n10-Point Combat Skill Levels\nAn 8-point Combat Skill Level can add +1 to a character’s OCV or +1 to his DCV with All Combat— HTH or Ranged.\nAllocating Combat Skill Levels\nA single 2-point Combat Skill Level can only improve a character’s OCV. It adds to the attack it was bought for whenever the character uses that attack.\nA Combat Skill Level costing 3, 5, 8, or 10 points can improve either a character’s OCV or his DCV when the character uses the attacks it was bought for. The character has to choose which one it improves, though he can change the assignment of his CSLs from Phase to Phase. Changing the assignment of CSLs constitutes a Zero Phase Action, but a character can only do it once per Phase. After he attacks, his CSLs stay as they are until his next Phase begins or he Aborts to a defensive Action.\nCombat Skill Levels On Foci\nWith the GM’s permission, characters can put Limitations on CSLs (for example, to build equipment, like a laser sight for a gun). The GM may restrict which types of CSLs a character can Limit; for example he might rule that only 3-point or more expensive CSLs can have Limitations. Unless the GM rules otherwise, CSLs with Limitations can only increase the user’s OCV, not DCV.","notes":"","effects":"","cost":"","activecost":"","basecost":"","value":"","modifiers":"","skilltype":"Combat","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":1674948505026,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"tEKOW2ah9VQVYtMB"}
|
||||
{"name":"Fast Draw","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Fast Draw","description":"Fast Draw is the ability to ready and use a weapon quickly. A character with Fast Draw can draw a weapon as a Zero-Phase Action instead of the usual Half Phase Action (see BR 92), and can change Clips (BR 68) as a Half Phase Action.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Agility","characteristic":"DEX","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":"xOYzr8hjIi7vf1D8"}
|
||||
{"name":"Deduction","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Deduction","description":"Deduction is the ability to take several facts and leap to an inobvious conclusion — the classic detective’s skill. A failed Deduction roll usually indicates the character can’t think of an answer, but it may mean an incorrect deduction.","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":1674948505029,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"yMSxYvxSXt9cCRij"}
|
||||
{"name":"Interrogation","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Interrogation","description":"A character with Interrogation can extract information from people, either forcibly or through psychological manipulation. He knows how to avoid leaving marks, can judge how close a victim is to deah tor breaking, and is an expert at manipulating subjects into revealing information. Interrogation works against an EGO Roll in a Skill Versus Skill Contest; the Talent Resistance helps victims resist Interrogation.","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":1674948505029,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"zGSjfej2hkFDWAs4"}
|
||||
{"name":"Survival","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Survival","description":"Characters with Survival can live off the land, find food and water, locate or build crude shelters, identify dangerous plants and animals, and so on.","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":1674948505028,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"zLKcnLGEcMwECjni"}
|
14
_deprecated/talents.db
Normal file
14
_deprecated/talents.db
Normal file
@ -0,0 +1,14 @@
|
||||
{"name":"Ambidexterity","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Ambidexterity","description":"Ambidexterity allows a character to eliminate the Off Hand penalty (BR 96) when performing tasks or using a weapon. This does not allow a character to attack more than once per Phase.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","hasroll":"","roll":"","levelscost":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951158102,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"1oojD2KMJsxNlMez"}
|
||||
{"name":"Eidetic Memory","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Eidetic Memory","description":"The character has a photographic memory. He can remember images and other sensations which he’s studied (including written pages) with near photographic exactness.\nEidetic Memory doesn’t teach a character any Skills, even though he can recall facts from books he’s read. A character must spend Experience Points to retain any information he studies as permanent KSs or Sss.","notes":"","effects":"","cost":"","activecost":"","basecost":"5","value":"","modifiers":"","hasroll":"","roll":"","levelscost":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951165478,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"39HQSvogeSG4vZCO"}
|
||||
{"name":"Speed Reading","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Speed Reading","description":"This Talent allows a character to read books and documents up to ten times faster than normal.","notes":"","effects":"","cost":"","activecost":"","basecost":"4","value":"","modifiers":"","hasroll":"","roll":"","levelscost":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951171651,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"Bm6HAngCRhyr3RQa"}
|
||||
{"name":"Universal Translator","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Universal Translator","description":"A character with Universal Translator can understand any form of communication — from verbal speech, to obscure body language, to written text — and communicate back in a crude fashion. He must make an INT Roll; if successful he comprehends what’s being said or read. The roll has negative modifiers (-1 to -3) if the language he tries to understand is extremely different from known forms of communication. Conversely, if he tries\nto understand a language similar to others he has already encountered, he gets a bonus (+1 to +3) to his INT Roll. He can improve this roll by spending more time, just like a Skill Roll.","notes":"","effects":"","cost":"","activecost":"","basecost":"20","value":"","modifiers":"","hasroll":"Yes","roll":"","levelscost":"1"},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951174791,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"EFPbxzVn6S4a7KGE"}
|
||||
{"name":"Perfect Pitch","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Perfect Pitch","description":"A character with Perfect Pitch can tell the exact pitch of a musical tone by listening; no roll is necessary. Perfect Pitch also adds a +1 to any music-related Skill Roll.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","hasroll":"","roll":"","levelscost":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951169063,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"FV64TK1MIb2eL7nN"}
|
||||
{"name":"Double Jointed","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Double Jointed","description":"A Double Jointed character has unusually flexible joints. He receives a bonus of +1 to +3 to Contortionist rolls (and sometimes Breakfall rolls too). The GM determines the amount of the bonus based on the circumstances.","notes":"","effects":"","cost":"","activecost":"","basecost":"4","value":"","modifiers":"","hasroll":"","roll":"","levelscost":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951164213,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"GloaLbRrUjOhcj6U"}
|
||||
{"name":"Absolute Time Sense","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Absolute Time Sense","description":"A character with this Talent can gauge the passage of time accurately without using a watch, the sun, or other external means.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","hasroll":"","roll":"","levelscost":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951156663,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"IMB3coU43eCQzNp3"}
|
||||
{"name":"Lightning Calculator","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Lightning Calculator","description":"A character with Lightning Calculator has the innate ability to perform mathematical operations mentally with startling speed. Multiplying four-digit numbers takes one Phase; calculating the vector of an approach orbit with regard to relative velocities, gravities, and rotation speeds takes a full Turn; medium calculations take medium times.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","hasroll":"","roll":"","levelscost":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951167656,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"LasI0KiBmIb1ogfy"}
|
||||
{"name":"Striking Appearance","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Striking Appearance","description":"If you want a character’s appearance to have an effect in the game, buy this Talent for him. It provides a bonus to Interaction Skill rolls and Presence Attacks, but exactly which ones depend on how it’s defined. If a character’s defined as “beautiful” or “handsome,” then the bonus applies to many uses of Skills like Charm, Conversation, and Persuasion, and to Presence Attacks that might work better coming from an attractive person (such as, “Won’t you please help me?”). If a character’s defined as “ugly,” the bonus applies to many uses of Interrogation and to Presence Attacks based on fear or disgust. The GM determines whether Striking Appearance applies, and to what extent.\nCharacters can purchase Striking Appearance multiple times, thus indicating relative “levels” of attractiveness — a character wit+2/+2d6 Striking Appearance is prettier than one with only +1/+1d6.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","hasroll":"","roll":"","levelscost":"3"},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951173197,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"U3MdUipUIN5eWwAH"}
|
||||
{"name":"Resistance","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Resistance","description":"Resistance represents a character’s ability to resist the use of the Interrogation Skill. It costs 1 Character Point for each +1 to the character’s EGO Roll for the purpose of resisting Interrogation.","notes":"","effects":"","cost":"","activecost":"","basecost":"1","value":"","modifiers":"","hasroll":"","roll":"","levelscost":"1"},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951170408,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"Wbcis0YGTYbtDWPc"}
|
||||
{"name":"Environmental Movement","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Environmental Movement","description":"A character with Environmental Movement can move without restrictions in environments that hamper most characters (see Environmental Conditions, BR 97). He typically suffers no penalty to OCV, DCV, Skill Rolls, or movement based on being in those environments. The accompanying table lists the costs for different types of environments.","notes":"","effects":"","cost":"","activecost":"","basecost":"","value":"","modifiers":"","hasroll":"","roll":"","levelscost":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951166560,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"eeg0DdyRAdrCrIBM"}
|
||||
{"name":"Danger Sense","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Danger Sense","description":"Danger Sense gives a character a “sixth sense” about things and situations dangerous to him. The character makes a Danger Sense roll whenever told to by the GM, though he may request a roll if he suspects something. If the roll fails, he does not sense any danger. If the roll succeeds, the character is not Surprised by the danger (i.e., he gets his full DCV against the attack). If he makes the roll by half or less, he knows the true location and type of danger threatening him; if appropriate and he has a Phase to use, he can make an attack against the danger at his normal OCV.","notes":"","effects":"","cost":"","activecost":"","basecost":"15","value":"","modifiers":"","hasroll":"Yes","roll":"","levelscost":"1"},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951162746,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"hZ3B60iKy5KJirhp"}
|
||||
{"name":"Combat Sense","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Combat Sense","description":"Combat Sense gives a character the innate ability to fight effectively in HTH Combat even while in darkness or blinded.\nA successful Combat Sense roll allows a character to make, or defend himself against, HTCombat attacks without suffering a penalty to his OCV or DCV because he cannot perceive his opponent wita Targeting Sense. The character must roll eacPhase to keep track of his opponents; this takes a Half Phase. If the roll fails, he suffers normal nonperception penalties (BR 90) that Phase.\nCombat Sense has no effect on Ranged combat.","notes":"","effects":"","cost":"","activecost":"","basecost":"15","value":"","modifiers":"","hasroll":"Yes","roll":"","levelscost":"1"},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951161000,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"qNW70OuOSOjQBgbQ"}
|
||||
{"name":"Bump of Direction","type":"talent","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Talents.webp","system":{"displayname":"Bump of Direction","description":"A character with this Talent has an innate sense of direction. He can always tell direction without reference to visual clues, and can also tell if he is above or below the local ground level.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","hasroll":"","roll":"","levelscost":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674951159536,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"znoFgVzNQOCTGUBl"}
|
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 |
30
lang/en.json
30
lang/en.json
@ -1,3 +1,27 @@
|
||||
{
|
||||
|
||||
}
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"COMBAT": {
|
||||
"TurnPrev": "Previous initiative",
|
||||
"RoundPrev": "Previous segment",
|
||||
"TurnNext": "Next initiative",
|
||||
"RoundNext": "Next segment"
|
||||
}
|
||||
}
|
@ -13,10 +13,10 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-hero-system-6", "sheet", "actor"],
|
||||
template: "systems/fvtt-hero-system-6/templates/actor-sheet.hbs",
|
||||
width: 960,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }],
|
||||
template: "systems/fvtt-hero-system-6/templates/actors/actor-sheet.hbs",
|
||||
width: 1124,
|
||||
height: 916,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "main" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: true
|
||||
});
|
||||
@ -24,8 +24,7 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async getData() {
|
||||
const objectData = this.object.system
|
||||
let actorData = duplicate(objectData)
|
||||
const objectData = duplicate(this.object.system)
|
||||
|
||||
let formData = {
|
||||
title: this.title,
|
||||
@ -35,34 +34,51 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
name: this.actor.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
data: actorData,
|
||||
system: objectData,
|
||||
characteristics: this.actor.prepareCharac(),
|
||||
defenses: duplicate(this.actor.system.defenses),
|
||||
movements: duplicate(this.actor.system.movements),
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.getSkills( ),
|
||||
perks: this.actor.getPerks( ),
|
||||
powers: await this.actor.getPowers( ),
|
||||
talents: this.actor.getTalents( ),
|
||||
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())),
|
||||
spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getLore())),
|
||||
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
|
||||
equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ),
|
||||
equippedArmor: this.actor.getEquippedArmor(),
|
||||
equippedShield: this.actor.getEquippedShield(),
|
||||
feats: duplicate(this.actor.getFeats()),
|
||||
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()),
|
||||
moneys: duplicate(this.actor.getMoneys()),
|
||||
encCapacity: this.actor.getEncumbranceCapacity(),
|
||||
saveRolls: this.actor.getSaveRoll(),
|
||||
conditions: this.actor.getConditions(),
|
||||
isHold: this.actor.getHoldAction(),
|
||||
isAbort: this.actor.getAbortAction(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, {async: true}),
|
||||
motivation: await TextEditor.enrichHTML(this.object.system.biodata.motivation, {async: true}),
|
||||
quote: await TextEditor.enrichHTML(this.object.system.biodata.quote, {async: true}),
|
||||
tactics: await TextEditor.enrichHTML(this.object.system.biodata.tactics, {async: true}),
|
||||
campaignuse: await TextEditor.enrichHTML(this.object.system.biodata.campaignuse, {async: true}),
|
||||
appearance: await TextEditor.enrichHTML(this.object.system.biodata.appearance, {async: true}),
|
||||
notes1: await TextEditor.enrichHTML(this.object.system.biodata.notes1, {async: true}),
|
||||
notes2: await TextEditor.enrichHTML(this.object.system.biodata.notes2, {async: true}),
|
||||
notes3: await TextEditor.enrichHTML(this.object.system.biodata.notes3, {async: true}),
|
||||
notes4: await TextEditor.enrichHTML(this.object.system.biodata.notes4, {async: true}),
|
||||
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;
|
||||
@ -77,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 => {
|
||||
@ -139,37 +155,59 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
this.actor.incDecAmmo( li.data("item-id"), +1 )
|
||||
} );
|
||||
|
||||
html.find('.roll-ability').click((event) => {
|
||||
const abilityKey = $(event.currentTarget).data("ability-key");
|
||||
this.actor.rollAbility(abilityKey);
|
||||
html.find('.roll-charac').click((event) => {
|
||||
const characKey = $(event.currentTarget).data("charac-key");
|
||||
this.actor.rollCharac(characKey);
|
||||
});
|
||||
html.find('.roll-perception').click((event) => {
|
||||
this.actor.rollPerception("int");
|
||||
});
|
||||
html.find('.roll-skill').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const skillId = li.data("item-id")
|
||||
this.actor.rollSkill(skillId)
|
||||
});
|
||||
|
||||
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");
|
||||
const skillId = li.data("item-id")
|
||||
this.actor.rollWeapon(skillId)
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.rollItem(itemId);
|
||||
});
|
||||
html.find('.roll-armor-die').click((event) => {
|
||||
this.actor.rollArmorDie()
|
||||
html.find('.roll-damage').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.rollDamage(itemId);
|
||||
});
|
||||
html.find('.roll-shield-die').click((event) => {
|
||||
this.actor.rollShieldDie()
|
||||
html.find('.roll-lift-dice').click((event) => {
|
||||
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('.roll-target-die').click((event) => {
|
||||
this.actor.rollDefenseRanged()
|
||||
html.find('.abort-action').click((event) => {
|
||||
this.actor.abortAction()
|
||||
});
|
||||
|
||||
html.find('.roll-save').click((event) => {
|
||||
const saveKey = $(event.currentTarget).data("save-key")
|
||||
this.actor.rollSave(saveKey)
|
||||
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);
|
||||
@ -187,7 +225,11 @@ export class Hero6ActorSheet extends ActorSheet {
|
||||
|
||||
html.find('.update-field').change(ev => {
|
||||
const fieldName = $(ev.currentTarget).data("field-name");
|
||||
let value = Number(ev.currentTarget.value);
|
||||
const fieldType = $(ev.currentTarget).data("dtype");
|
||||
let value = ev.currentTarget.value
|
||||
if (fieldType.toLowerCase() == "Number") {
|
||||
value = Number(value)
|
||||
}
|
||||
this.actor.update( { [`${fieldName}`]: value } );
|
||||
});
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,25 +1,299 @@
|
||||
import { Hero6Utility } from "./hero6-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class Hero6Combat extends Combat {
|
||||
|
||||
export class Hero6CombatTracker extends CombatTracker {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
|
||||
static get defaultOptions() {
|
||||
let path = "systems/fvtt-hero-system-6/templates/apps/combat-tracker.hbs";
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
template: path,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class Hero6Combat extends Combat {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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/Unhold action";
|
||||
option.condition = true;
|
||||
option.icon = '<i class="far fa-question-circle"></i>';
|
||||
option.callback = target => {
|
||||
let id = target.data('combatant-id')
|
||||
let c = game.combat.combatants.get(id)
|
||||
c.actor.holdAction()
|
||||
}
|
||||
//newOpt = duplicate(option)
|
||||
}
|
||||
}
|
||||
//options.push(newOpt)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
holdAction(combatantId) {
|
||||
this.rebuildInitiative()
|
||||
//console.log("Rebuilding.....")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
abortAction(actorId, abortState) {
|
||||
this.rebuildInitiative()
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
constructor(data, context) {
|
||||
|
||||
data.flags = { world: { turnData: { turnNumber: 0, segmentNumber: 12} } }
|
||||
|
||||
super(data, context);
|
||||
|
||||
this.turnNumber = 0;
|
||||
this.segmentNumber = 12;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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()
|
||||
}
|
||||
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]);
|
||||
let id = c._id || c.id;
|
||||
let initBonus = c.actor ? c.actor.getInitiativeScore( this.id, id ) : -1;
|
||||
await this.updateEmbeddedDocuments("Combatant", [ { _id: id, initiative: initBonus } ]);
|
||||
const c = this.combatants.get(ids[cId])
|
||||
this.computeInitiative(c, updList)
|
||||
}
|
||||
|
||||
if (updList.length > 0) {
|
||||
await this.updateEmbeddedDocuments("Combatant", updList);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
_onUpdate(changed, options, userId) {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
nextTurn() {
|
||||
let nbC = this.combatants.filter(c => c.initiative > 0).length
|
||||
//console.log("Next turn called....", this.turn, nbC)
|
||||
if (this.turn < nbC - 1) {
|
||||
super.nextTurn()
|
||||
} else {
|
||||
this.nextRound()
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
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 };
|
||||
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 _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() {
|
||||
while (game.combat.turn > 0) {
|
||||
|
@ -4,18 +4,28 @@ import { Hero6Utility } from "./hero6-utility.js";
|
||||
import { Hero6RollDialog } from "./hero6-roll-dialog.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const __saveFirstToKey = { r: "reflex", f: "fortitude", w: "willpower"}
|
||||
const __saveFirstToKey = { r: "reflex", f: "fortitude", w: "willpower" }
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class Hero6Commands {
|
||||
|
||||
static init() {
|
||||
static ready() {
|
||||
if (!game.system.hero6.commands) {
|
||||
const hero6Commands = new Hero6Commands();
|
||||
hero6Commands.registerCommand({ path: ["/rtarget"], func: (content, msg, params) => Hero6Commands.rollTarget(msg, params), descr: "Launch the target roll window" });
|
||||
hero6Commands.registerCommand({ path: ["/rsave"], func: (content, msg, params) => Hero6Commands.rollSave(msg, params), descr: "Performs a save roll" });
|
||||
hero6Commands.registerCommand({ path: ["/rh"], func: (content, msg, params) => Hero6Commands.rollSpecialHero(msg, params), descr: "Special roll hero roll (1/2d6 like)" });
|
||||
game.system.hero6.commands = hero6Commands;
|
||||
}
|
||||
|
||||
Hooks.on("chatMessage", (html, content, msg) => {
|
||||
if (content[0] == '/') {
|
||||
let regExp = /(\S+)/g;
|
||||
let commands = content.match(regExp);
|
||||
if (game.hero6.commands.processChatCommand(commands, content, msg)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
constructor() {
|
||||
@ -108,37 +118,25 @@ export class Hero6Commands {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static rollTarget(msg, params) {
|
||||
const speaker = ChatMessage.getSpeaker()
|
||||
let actor
|
||||
if (speaker.token) actor = game.actors.tokens[speaker.token]
|
||||
if (!actor) actor = game.actors.get(speaker.actor)
|
||||
if (!actor) {
|
||||
return ui.notifications.warn(`Select your actor to run the macro`)
|
||||
}
|
||||
actor.rollDefenseRanged()
|
||||
}
|
||||
static async rollSpecialHero(msg, params) {
|
||||
console.log("ROLL HERE", msg, params)
|
||||
let formula = params.join(' ')
|
||||
if (formula) {
|
||||
let foundryFormula = Hero6Utility.convertRollHeroSyntax(formula)
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static rollSave(msg, params) {
|
||||
console.log(msg, params)
|
||||
if ( params.length == 0) {
|
||||
ui.notifications.warn("/rsave command error : syntax is /rsave reflex, /rsave fortitude or /rsave willpower")
|
||||
return
|
||||
}
|
||||
let saveKey = params[0].toLowerCase()
|
||||
if ( saveKey.length > 0 && (saveKey[0] == "r" || saveKey[0] == "f" || saveKey[0] == "w")) {
|
||||
const speaker = ChatMessage.getSpeaker()
|
||||
let actor
|
||||
if (speaker.token) actor = game.actors.tokens[speaker.token]
|
||||
if (!actor) actor = game.actors.get(speaker.actor)
|
||||
if (!actor) {
|
||||
return ui.notifications.warn(`Select your actor to run the macro`)
|
||||
}
|
||||
actor.rollSave( __saveFirstToKey[saveKey[0]] )
|
||||
} else {
|
||||
ui.notifications.warn("/rsave syntax error : syntax is /rsave reflex, /rsave fortitude or /rsave willpower")
|
||||
let myRoll = new Roll(foundryFormula).roll({ async: false })
|
||||
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
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
|
||||
}
|
||||
|
||||
}
|
@ -1,6 +1,18 @@
|
||||
|
||||
export const Hero6_CONFIG = {
|
||||
|
||||
equipmentSubType: {
|
||||
equipment: "Equipment",
|
||||
weapon: "Weapon",
|
||||
armor: "Armor",
|
||||
shield: "Shield",
|
||||
money: "Money"
|
||||
},
|
||||
maneuverTypes: {
|
||||
"general": "General",
|
||||
"offensive": "Offensive",
|
||||
"defensive": "Defensive",
|
||||
"mental": "Mental"
|
||||
},
|
||||
rollCharac : {
|
||||
"str": "Strength",
|
||||
"dex": "Dexterity",
|
||||
@ -10,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",
|
||||
@ -18,6 +37,10 @@ export const Hero6_CONFIG = {
|
||||
"combat": "Combat" ,
|
||||
"custom": "Custom"
|
||||
},
|
||||
attackTypes: {
|
||||
"ocv": "OCV",
|
||||
"omcv": "OMCV"
|
||||
},
|
||||
powerEquipmentType: {
|
||||
"adjustment": "Adjustment",
|
||||
"mental": "Mental",
|
||||
@ -30,12 +53,17 @@ export const Hero6_CONFIG = {
|
||||
"none": "None",
|
||||
"attack": "Attack",
|
||||
"automaton": "Automaton",
|
||||
"bodyaffecting": "Bodyaffecting",
|
||||
"bodyaffecting": "Body-Affecting",
|
||||
"defense": "Defense",
|
||||
"sensory": "Sensory"
|
||||
},
|
||||
powerSenseAffecting: {
|
||||
"none": "None",
|
||||
"senseaffecting": "Senseaffecting",
|
||||
"senseaffecting": "Sense-Affecting",
|
||||
},
|
||||
powerEffectRoll: {
|
||||
"standard": "Standard",
|
||||
"normal": "Normal",
|
||||
"killing": "Killing",
|
||||
}
|
||||
}
|
@ -60,6 +60,7 @@ export class Hero6ItemSheet extends ItemSheet {
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.notes, {async: true}),
|
||||
config: game.system.hero6.config,
|
||||
system: objectData,
|
||||
limited: this.object.limited,
|
||||
@ -145,6 +146,16 @@ export class Hero6ItemSheet extends ItemSheet {
|
||||
let itemType = li.data("item-type");
|
||||
});
|
||||
|
||||
html.find('.item-skill-profiency').click(ev => {
|
||||
this.object.update( {'system.skillfamiliarity': false, 'system.cost': 2} )
|
||||
} )
|
||||
html.find('.item-skill-familiarity').click(ev => {
|
||||
this.object.update( {'system.skillprofiency': false, 'system.cost': 1} )
|
||||
} )
|
||||
html.find('.item-skill-everyman').click(ev => {
|
||||
this.object.update( {'system.cost': 0} )
|
||||
} )
|
||||
|
||||
html.find('.view-subitem').click(ev => {
|
||||
this.viewSubitem(ev);
|
||||
});
|
||||
|
641
modules/hero6-lift-dice.js
Normal file
641
modules/hero6-lift-dice.js
Normal file
@ -0,0 +1,641 @@
|
||||
const __LiftDiceValues = {
|
||||
"0": {
|
||||
"weight": "25 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"1": {
|
||||
"weight": "29 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"2": {
|
||||
"weight": "33 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"3": {
|
||||
"weight": "37.5 kg",
|
||||
"dice": "0 1/2d6"
|
||||
},
|
||||
"4": {
|
||||
"weight": "44 kg",
|
||||
"dice": "0 1/2d6"
|
||||
},
|
||||
"5": {
|
||||
"weight": "50 kg",
|
||||
"dice": "1d6"
|
||||
},
|
||||
"6": {
|
||||
"weight": "58 kg",
|
||||
"dice": "1d6"
|
||||
},
|
||||
"7": {
|
||||
"weight": "67 kg",
|
||||
"dice": "1d6"
|
||||
},
|
||||
"8": {
|
||||
"weight": "75 kg",
|
||||
"dice": "1 1/2d6"
|
||||
},
|
||||
"9": {
|
||||
"weight": "88 kg",
|
||||
"dice": "1 1/2d6"
|
||||
},
|
||||
"10": {
|
||||
"weight": "100 kg",
|
||||
"dice": "2d6"
|
||||
},
|
||||
"11": {
|
||||
"weight": "117 kg",
|
||||
"dice": "2d6"
|
||||
},
|
||||
"12": {
|
||||
"weight": "133 kg",
|
||||
"dice": "2d6"
|
||||
},
|
||||
"13": {
|
||||
"weight": "150 kg",
|
||||
"dice": "2 1/2d6"
|
||||
},
|
||||
"14": {
|
||||
"weight": "175 kg",
|
||||
"dice": "2 1/2d6"
|
||||
},
|
||||
"15": {
|
||||
"weight": "200 kg",
|
||||
"dice": "3d6"
|
||||
},
|
||||
"16": {
|
||||
"weight": "233 kg",
|
||||
"dice": "3d6"
|
||||
},
|
||||
"17": {
|
||||
"weight": "267 kg",
|
||||
"dice": "3d6"
|
||||
},
|
||||
"18": {
|
||||
"weight": "300 kg",
|
||||
"dice": "3 1/2d6"
|
||||
},
|
||||
"19": {
|
||||
"weight": "350 kg",
|
||||
"dice": "3 1/2d6"
|
||||
},
|
||||
"20": {
|
||||
"weight": "400 kg",
|
||||
"dice": "4d6"
|
||||
},
|
||||
"21": {
|
||||
"weight": "467 kg",
|
||||
"dice": "4d6"
|
||||
},
|
||||
"22": {
|
||||
"weight": "533 kg",
|
||||
"dice": "4d6"
|
||||
},
|
||||
"23": {
|
||||
"weight": "600 kg",
|
||||
"dice": "4 1/2d6"
|
||||
},
|
||||
"24": {
|
||||
"weight": "700 kg",
|
||||
"dice": "4 1/2d6"
|
||||
},
|
||||
"25": {
|
||||
"weight": "800 kg",
|
||||
"dice": "5d6"
|
||||
},
|
||||
"26": {
|
||||
"weight": "933 kg",
|
||||
"dice": "5d6"
|
||||
},
|
||||
"27": {
|
||||
"weight": "1,067 kg",
|
||||
"dice": "5d6"
|
||||
},
|
||||
"28": {
|
||||
"weight": "1,200 kg",
|
||||
"dice": "5 1/2d6"
|
||||
},
|
||||
"29": {
|
||||
"weight": "1,400 kg",
|
||||
"dice": "5 1/2d6"
|
||||
},
|
||||
"30": {
|
||||
"weight": "1,600 kg",
|
||||
"dice": "6d6"
|
||||
},
|
||||
"31": {
|
||||
"weight": "1,867 kg",
|
||||
"dice": "6d6"
|
||||
},
|
||||
"32": {
|
||||
"weight": "2,133 kg",
|
||||
"dice": "6d6"
|
||||
},
|
||||
"33": {
|
||||
"weight": "2,400 kg",
|
||||
"dice": "6 1/2d6"
|
||||
},
|
||||
"34": {
|
||||
"weight": "2,800 kg",
|
||||
"dice": "6 1/2d6"
|
||||
},
|
||||
"35": {
|
||||
"weight": "3,200 kg",
|
||||
"dice": "7d6"
|
||||
},
|
||||
"36": {
|
||||
"weight": "3,733 kg",
|
||||
"dice": "7d6"
|
||||
},
|
||||
"37": {
|
||||
"weight": "4,267 kg",
|
||||
"dice": "7d6"
|
||||
},
|
||||
"38": {
|
||||
"weight": "4,800 kg",
|
||||
"dice": "7 1/2d6"
|
||||
},
|
||||
"39": {
|
||||
"weight": "5,600 kg",
|
||||
"dice": "7 1/2d6"
|
||||
},
|
||||
"40": {
|
||||
"weight": "6,400 kg",
|
||||
"dice": "8d6"
|
||||
},
|
||||
"41": {
|
||||
"weight": "7,467 kg",
|
||||
"dice": "8d6"
|
||||
},
|
||||
"42": {
|
||||
"weight": "8,533 kg",
|
||||
"dice": "8d6"
|
||||
},
|
||||
"43": {
|
||||
"weight": "9,600 kg",
|
||||
"dice": "8 1/2d6"
|
||||
},
|
||||
"44": {
|
||||
"weight": "11 tons",
|
||||
"dice": "8 1/2d6"
|
||||
},
|
||||
"45": {
|
||||
"weight": "12.5 tons",
|
||||
"dice": "9d6"
|
||||
},
|
||||
"46": {
|
||||
"weight": "15 tons",
|
||||
"dice": "9d6"
|
||||
},
|
||||
"47": {
|
||||
"weight": "17 tons",
|
||||
"dice": "9d6"
|
||||
},
|
||||
"48": {
|
||||
"weight": "19 tons",
|
||||
"dice": "9 1/2d6"
|
||||
},
|
||||
"49": {
|
||||
"weight": "22 tons",
|
||||
"dice": "9 1/2d6"
|
||||
},
|
||||
"50": {
|
||||
"weight": "25 tons",
|
||||
"dice": "10d6"
|
||||
},
|
||||
"51": {
|
||||
"weight": "29 tons",
|
||||
"dice": "10d6"
|
||||
},
|
||||
"52": {
|
||||
"weight": "33 tons",
|
||||
"dice": "10d6"
|
||||
},
|
||||
"53": {
|
||||
"weight": "37.5 tons",
|
||||
"dice": "10 1/2d6"
|
||||
},
|
||||
"54": {
|
||||
"weight": "44 tons",
|
||||
"dice": "10 1/2d6"
|
||||
},
|
||||
"55": {
|
||||
"weight": "50 tons",
|
||||
"dice": "11d6"
|
||||
},
|
||||
"56": {
|
||||
"weight": "58 tons",
|
||||
"dice": "11d6"
|
||||
},
|
||||
"57": {
|
||||
"weight": "67 tons",
|
||||
"dice": "11d6"
|
||||
},
|
||||
"58": {
|
||||
"weight": "75 tons",
|
||||
"dice": "11 1/2d6"
|
||||
},
|
||||
"59": {
|
||||
"weight": "88 tons",
|
||||
"dice": "11 1/2d6"
|
||||
},
|
||||
"60": {
|
||||
"weight": "100 tons",
|
||||
"dice": "12d6"
|
||||
},
|
||||
"61": {
|
||||
"weight": "117 tons",
|
||||
"dice": "12d6"
|
||||
},
|
||||
"62": {
|
||||
"weight": "133 tons",
|
||||
"dice": "12d6"
|
||||
},
|
||||
"63": {
|
||||
"weight": "150 tons",
|
||||
"dice": "12 1/2d6"
|
||||
},
|
||||
"64": {
|
||||
"weight": "175 tons",
|
||||
"dice": "12 1/2d6"
|
||||
},
|
||||
"65": {
|
||||
"weight": "200 tons",
|
||||
"dice": "13d6"
|
||||
},
|
||||
"66": {
|
||||
"weight": "233 tons",
|
||||
"dice": "13d6"
|
||||
},
|
||||
"67": {
|
||||
"weight": "267 tons",
|
||||
"dice": "13d6"
|
||||
},
|
||||
"68": {
|
||||
"weight": "300 tons",
|
||||
"dice": "13 1/2d6"
|
||||
},
|
||||
"69": {
|
||||
"weight": "350 tons",
|
||||
"dice": "13 1/2d6"
|
||||
},
|
||||
"70": {
|
||||
"weight": "400 tons",
|
||||
"dice": "14d6"
|
||||
},
|
||||
"71": {
|
||||
"weight": "467 tons",
|
||||
"dice": "14d6"
|
||||
},
|
||||
"72": {
|
||||
"weight": "533 tons",
|
||||
"dice": "14d6"
|
||||
},
|
||||
"73": {
|
||||
"weight": "600 tons",
|
||||
"dice": "14 1/2d6"
|
||||
},
|
||||
"74": {
|
||||
"weight": "700 tons",
|
||||
"dice": "14 1/2d6"
|
||||
},
|
||||
"75": {
|
||||
"weight": "800 tons",
|
||||
"dice": "15d6"
|
||||
},
|
||||
"76": {
|
||||
"weight": "933 tons",
|
||||
"dice": "15d6"
|
||||
},
|
||||
"77": {
|
||||
"weight": "1 kton 15d6",
|
||||
"dice": ""
|
||||
},
|
||||
"78": {
|
||||
"weight": "1.2 ktons",
|
||||
"dice": "15 1/2d6"
|
||||
},
|
||||
"79": {
|
||||
"weight": "1.4 ktons",
|
||||
"dice": "15 1/2d6"
|
||||
},
|
||||
"80": {
|
||||
"weight": "1.6 ktons",
|
||||
"dice": "16d6"
|
||||
},
|
||||
"81": {
|
||||
"weight": "1.9 ktons",
|
||||
"dice": "16d6"
|
||||
},
|
||||
"82": {
|
||||
"weight": "2 ktons",
|
||||
"dice": "16d6"
|
||||
},
|
||||
"83": {
|
||||
"weight": "2.4 ktons",
|
||||
"dice": "16 1/2d6"
|
||||
},
|
||||
"84": {
|
||||
"weight": "2.8 ktons",
|
||||
"dice": "16 1/2d6"
|
||||
},
|
||||
"85": {
|
||||
"weight": "3.2 ktons",
|
||||
"dice": "17d6"
|
||||
},
|
||||
"86": {
|
||||
"weight": "3.7 ktons",
|
||||
"dice": "17d6"
|
||||
},
|
||||
"87": {
|
||||
"weight": "4.3 ktons",
|
||||
"dice": "17d6"
|
||||
},
|
||||
"88": {
|
||||
"weight": "4.8 ktons",
|
||||
"dice": "17 1/2d6"
|
||||
},
|
||||
"89": {
|
||||
"weight": "5.6 ktons",
|
||||
"dice": "17 1/2d6"
|
||||
},
|
||||
"90": {
|
||||
"weight": "6.4 ktons",
|
||||
"dice": "18d6"
|
||||
},
|
||||
"91": {
|
||||
"weight": "7.5 ktons",
|
||||
"dice": "18d6"
|
||||
},
|
||||
"92": {
|
||||
"weight": "8.5 ktons",
|
||||
"dice": "18d6"
|
||||
},
|
||||
"93": {
|
||||
"weight": "9.6 ktons",
|
||||
"dice": "18 1/2d6"
|
||||
},
|
||||
"94": {
|
||||
"weight": "11 ktons",
|
||||
"dice": "18 1/2d6"
|
||||
},
|
||||
"95": {
|
||||
"weight": "12.5 ktons",
|
||||
"dice": "19d6"
|
||||
},
|
||||
"96": {
|
||||
"weight": "15 ktons",
|
||||
"dice": "19d6"
|
||||
},
|
||||
"97": {
|
||||
"weight": "17 ktons",
|
||||
"dice": "19d6"
|
||||
},
|
||||
"98": {
|
||||
"weight": "19 ktons",
|
||||
"dice": "19 1/2d6"
|
||||
},
|
||||
"99": {
|
||||
"weight": "22 ktons",
|
||||
"dice": "19 1/2d6"
|
||||
},
|
||||
"100": {
|
||||
"weight": "25 ktons",
|
||||
"dice": "20d6"
|
||||
},
|
||||
"105": {
|
||||
"weight": "50 ktons",
|
||||
"dice": "21d6"
|
||||
},
|
||||
"110": {
|
||||
"weight": "100 ktons",
|
||||
"dice": "22d6"
|
||||
},
|
||||
"115": {
|
||||
"weight": "200 ktons",
|
||||
"dice": "23d6"
|
||||
},
|
||||
"120": {
|
||||
"weight": "400 ktons",
|
||||
"dice": "24d6"
|
||||
},
|
||||
"125": {
|
||||
"weight": "800 ktons",
|
||||
"dice": "25d6"
|
||||
},
|
||||
"130": {
|
||||
"weight": "1.6 mtons",
|
||||
"dice": "26d6"
|
||||
},
|
||||
"135": {
|
||||
"weight": "3.2 mtons",
|
||||
"dice": "27d6"
|
||||
},
|
||||
"140": {
|
||||
"weight": "6.4 mtons",
|
||||
"dice": "28d6"
|
||||
},
|
||||
"145": {
|
||||
"weight": "12.5 mtons",
|
||||
"dice": "29d6"
|
||||
},
|
||||
"150": {
|
||||
"weight": "25 mtons",
|
||||
"dice": "30d6"
|
||||
},
|
||||
"155": {
|
||||
"weight": "50 mtons",
|
||||
"dice": "31d6"
|
||||
},
|
||||
"160": {
|
||||
"weight": "100 mtons",
|
||||
"dice": "32d6"
|
||||
},
|
||||
"165": {
|
||||
"weight": "200 mtons",
|
||||
"dice": "33d6"
|
||||
},
|
||||
"170": {
|
||||
"weight": "400 mtons",
|
||||
"dice": "34d6"
|
||||
},
|
||||
"175": {
|
||||
"weight": "800 mtons",
|
||||
"dice": "35d6"
|
||||
},
|
||||
"180": {
|
||||
"weight": "1.6 gtons",
|
||||
"dice": "36d6"
|
||||
},
|
||||
"185": {
|
||||
"weight": "3.2 gtons",
|
||||
"dice": "37d6"
|
||||
},
|
||||
"190": {
|
||||
"weight": "6.4 gtons",
|
||||
"dice": "38d6"
|
||||
},
|
||||
"195": {
|
||||
"weight": "12.5 gtons",
|
||||
"dice": "39d6"
|
||||
},
|
||||
"200": {
|
||||
"weight": "25 gtons",
|
||||
"dice": "40d6"
|
||||
},
|
||||
"-50": {
|
||||
"weight": "0.025 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-45": {
|
||||
"weight": "0.05 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-40": {
|
||||
"weight": "0.1 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-35": {
|
||||
"weight": "0.2 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-30": {
|
||||
"weight": "0.4 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-29": {
|
||||
"weight": "0.5 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-28": {
|
||||
"weight": "0.5 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-27": {
|
||||
"weight": "0.6 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-26": {
|
||||
"weight": "0.7 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-25": {
|
||||
"weight": "0.8 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-24": {
|
||||
"weight": "0.9 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-23": {
|
||||
"weight": "1.0 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-22": {
|
||||
"weight": "1.2 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-21": {
|
||||
"weight": "1.4 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-20": {
|
||||
"weight": "1.6 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-19": {
|
||||
"weight": "1.8 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-18": {
|
||||
"weight": "2.0 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-17": {
|
||||
"weight": "2.4 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-16": {
|
||||
"weight": "2.8 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-15": {
|
||||
"weight": "3.2 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-14": {
|
||||
"weight": "3.6 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-13": {
|
||||
"weight": "4.0 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-12": {
|
||||
"weight": "4.8 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-11": {
|
||||
"weight": "5.6 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-10": {
|
||||
"weight": "6.4 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-9": {
|
||||
"weight": "7.2 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-8": {
|
||||
"weight": "8.0 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-7": {
|
||||
"weight": "9.5 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-6": {
|
||||
"weight": "11 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-5": {
|
||||
"weight": "12.5 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-4": {
|
||||
"weight": "14 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-3": {
|
||||
"weight": "16 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-2": {
|
||||
"weight": "19 kg",
|
||||
"dice": ""
|
||||
},
|
||||
"-1": {
|
||||
"weight": "22 kg",
|
||||
"dice": ""
|
||||
}
|
||||
}
|
||||
|
||||
export class Hero6LiftDice{
|
||||
|
||||
static getLift(value) {
|
||||
let data = __LiftDiceValues[String(value)]
|
||||
if (data) {
|
||||
return data.weight
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
static getLiftDice(value) {
|
||||
let data = __LiftDiceValues[String(value)]
|
||||
if (data) {
|
||||
return data.dice
|
||||
}
|
||||
return 0
|
||||
}
|
||||
}
|
@ -13,7 +13,7 @@ import { Hero6ItemSheet } from "./hero6-item-sheet.js";
|
||||
import { Hero6ActorSheet } from "./hero6-actor-sheet.js";
|
||||
import { Hero6NPCSheet } from "./hero6-npc-sheet.js";
|
||||
import { Hero6Utility } from "./hero6-utility.js";
|
||||
import { Hero6Combat } from "./hero6-combat.js";
|
||||
import { Hero6Combat, Hero6CombatTracker } from "./hero6-combat.js";
|
||||
import { Hero6Item } from "./hero6-item.js";
|
||||
import { Hero6Hotbar } from "./hero6-hotbar.js"
|
||||
import { Hero6Commands } from "./hero6-commands.js"
|
||||
@ -41,10 +41,10 @@ Hooks.once("init", async function () {
|
||||
// Set an initiative formula for the system
|
||||
CONFIG.Combat.initiative = {
|
||||
formula: "1d6",
|
||||
decimals: 1
|
||||
decimals: 2
|
||||
};
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/* ------------------------------- ------------- */
|
||||
game.socket.on("system.fvtt-hero-system-6", data => {
|
||||
Hero6Utility.onSocketMesssage(data)
|
||||
});
|
||||
@ -54,12 +54,14 @@ Hooks.once("init", async function () {
|
||||
CONFIG.Combat.documentClass = Hero6Combat
|
||||
CONFIG.Actor.documentClass = Hero6Actor
|
||||
CONFIG.Item.documentClass = Hero6Item
|
||||
CONFIG.ui.combat = Hero6CombatTracker;
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// 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 });
|
||||
@ -73,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>
|
||||
` });
|
||||
}
|
||||
|
||||
@ -91,15 +93,11 @@ Hooks.once("ready", function () {
|
||||
});
|
||||
}
|
||||
|
||||
// CSS patch for v9
|
||||
if (game.version) {
|
||||
let sidebar = document.getElementById("sidebar");
|
||||
sidebar.style.width = "min-content";
|
||||
}
|
||||
|
||||
welcomeMessage();
|
||||
Hero6Utility.ready()
|
||||
Hero6Commands.init()
|
||||
Hero6Commands.ready()
|
||||
Hero6Combat.ready()
|
||||
|
||||
})
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
@ -5,8 +5,8 @@ export class Hero6RollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData) {
|
||||
|
||||
let options = { classes: ["Hero6Dialog"], width: 540, height: 340, 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-hero-system-6/templates/roll-dialog-generic.hbs', rollData);
|
||||
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: {
|
||||
@ -44,7 +44,7 @@ export class Hero6RollDialog extends Dialog {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async refreshDialog() {
|
||||
const content = await renderTemplate("systems/fvtt-hero-system-6/templates/roll-dialog-generic.hbs", this.rollData)
|
||||
const content = await renderTemplate("systems/fvtt-hero-system-6/templates/apps/roll-dialog-generic.hbs", this.rollData)
|
||||
this.data.content = content
|
||||
this.render(true)
|
||||
}
|
||||
@ -53,7 +53,7 @@ export class Hero6RollDialog extends Dialog {
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
var dialog = this;
|
||||
let dialog = this;
|
||||
function onLoad() {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
@ -76,8 +76,8 @@ export class Hero6RollDialog extends Dialog {
|
||||
html.find('#situational').change((event) => {
|
||||
this.rollData.situational = event.currentTarget.value
|
||||
})
|
||||
html.find('#distanceBonusDice').change((event) => {
|
||||
this.rollData.distanceBonusDice = Number(event.currentTarget.value)
|
||||
html.find('#bonusMalus').change((event) => {
|
||||
this.rollData.bonusMalus = Number(event.currentTarget.value)
|
||||
})
|
||||
|
||||
}
|
||||
|
@ -15,16 +15,20 @@ export class Hero6Utility {
|
||||
Hero6Utility.dropItemOnToken(canvas, data)
|
||||
});*/
|
||||
|
||||
Hero6Commands.init();
|
||||
|
||||
Handlebars.registerHelper('count', function (list) {
|
||||
return list.length;
|
||||
})
|
||||
Handlebars.registerHelper('exists', function (val) {
|
||||
return val != null && val != undefined;
|
||||
});
|
||||
Handlebars.registerHelper('includes', function (array, val) {
|
||||
return array.includes(val);
|
||||
})
|
||||
Handlebars.registerHelper('upper', function (text) {
|
||||
return text.toUpperCase();
|
||||
if (text) {
|
||||
return text.toUpperCase();
|
||||
}
|
||||
return text
|
||||
})
|
||||
Handlebars.registerHelper('lower', function (text) {
|
||||
return text.toLowerCase()
|
||||
@ -37,17 +41,27 @@ 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]
|
||||
return __locationNames[key]
|
||||
})
|
||||
Handlebars.registerHelper('isSkillCustom', function (key) {
|
||||
if (key == "custom" || key == "background" || key == "combat" ) {
|
||||
if (key == "custom") {
|
||||
return true;
|
||||
}
|
||||
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()
|
||||
@ -74,6 +88,19 @@ export class Hero6Utility {
|
||||
}) */
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------- */
|
||||
static getDerivatedDiceFormulas(value) {
|
||||
let rollFormula = Math.floor(value / 5) + "d6"
|
||||
let displayFormula = Math.floor(value / 5)
|
||||
if (value % 5 > 2) {
|
||||
rollFormula += "+round(1d6/2)"
|
||||
displayFormula += " 1/2d6"
|
||||
} else {
|
||||
displayFormula += "d6"
|
||||
}
|
||||
return { rollFormula: rollFormula, displayFormula: displayFormula }
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
static upperFirst(text) {
|
||||
if (typeof text !== 'string') return text
|
||||
@ -103,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()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -124,24 +155,6 @@ export class Hero6Utility {
|
||||
html.on("click", '.view-item-from-chat', event => {
|
||||
game.system.crucible.creator.openItemView(event)
|
||||
})
|
||||
html.on("click", '.roll-defense-melee', event => {
|
||||
let rollId = $(event.currentTarget).data("roll-id")
|
||||
let rollData = Hero6Utility.getRollData(rollId)
|
||||
rollData.defenseWeaponId = $(event.currentTarget).data("defense-weapon-id")
|
||||
let actor = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
if (actor && (game.user.isGM || actor.isOwner)) {
|
||||
actor.rollDefenseMelee(rollData)
|
||||
}
|
||||
})
|
||||
html.on("click", '.roll-defense-ranged', event => {
|
||||
let rollId = $(event.currentTarget).data("roll-id")
|
||||
let rollData = Hero6Utility.getRollData(rollId)
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
if (defender && (game.user.isGM || defender.isOwner)) {
|
||||
defender.rollDefenseRanged(rollData)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -150,14 +163,20 @@ export class Hero6Utility {
|
||||
const templatePaths = [
|
||||
'systems/fvtt-hero-system-6/templates/partials/editor-notes-gm.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-roll-select.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-actor-ability-block.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-actor-characteristic-block.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-actor-full-charac.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-actor-status.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-options-abilities.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-item-nav.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-item-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',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-item-hasroll.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs',
|
||||
'systems/fvtt-hero-system-6/templates/partials/partial-power-maneuver-effect.hbs'
|
||||
]
|
||||
return loadTemplates(templatePaths);
|
||||
}
|
||||
@ -222,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)
|
||||
@ -286,179 +314,126 @@ export class Hero6Utility {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------- ----------------------------- */
|
||||
static computeBodyValue(roll) {
|
||||
let bodyValue = 0
|
||||
for (let term of roll.terms) {
|
||||
if (term.constructor.name == "Die") {
|
||||
for (let value of term.values) {
|
||||
if (value > 1) {
|
||||
bodyValue += 1
|
||||
}
|
||||
if (value == 6) {
|
||||
bodyValue += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
if (term.constructor.name == "NumericTerm") {
|
||||
if (term.total > 1) {
|
||||
bodyValue += 1
|
||||
}
|
||||
if (term.total == 6) {
|
||||
bodyValue += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
return bodyValue
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollHero6(rollData) {
|
||||
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
|
||||
// ability/save/size => 0
|
||||
let diceFormula
|
||||
let startFormula = "0d6cs>=5[blue]"
|
||||
if (rollData.ability) {
|
||||
startFormula = String(rollData.ability.value) + "d6cs>=5[blue]"
|
||||
let diceFormula = "3d6"
|
||||
let target = 10
|
||||
|
||||
if (rollData.charac) {
|
||||
target = rollData.charac.roll
|
||||
}
|
||||
if (rollData.save) {
|
||||
startFormula = String(rollData.save.value) + "d6cs>=5[blue]"
|
||||
}
|
||||
if (rollData.sizeDice) {
|
||||
let nb = rollData.sizeDice.nb + rollData.distanceBonusDice + this.getDiceFromCover(rollData.hasCover) + this.getDiceFromSituational(rollData.situational)
|
||||
startFormula = String(nb) + String(rollData.sizeDice.dice) + "cs>=5[blue]"
|
||||
}
|
||||
diceFormula = startFormula
|
||||
|
||||
// skill => 2
|
||||
// feat => 4
|
||||
// bonus => 6
|
||||
if (rollData.skill) {
|
||||
let level = rollData.skill.system.level
|
||||
if (rollData.skill.system.issl2) {
|
||||
rollData.hasSLBonus = true
|
||||
level += 2
|
||||
if (level > 7) { level = 7 }
|
||||
}
|
||||
rollData.skill.system.skilldice = __skillLevel2Dice[level]
|
||||
diceFormula += "+" + String(rollData.skill.system.skilldice) + "cs>=5[black]"
|
||||
|
||||
if (rollData.skill.system.skilltype == "complex" && rollData.skill.system.level == 0) {
|
||||
rollData.complexSkillDisadvantage = true
|
||||
rollData.rollAdvantage = "roll-disadvantage"
|
||||
}
|
||||
|
||||
if (rollData.skill.system.isfeatdie) {
|
||||
rollData.hasFeatDie = true
|
||||
diceFormula += "+ 1d10cs>=5[hero6-purple]"
|
||||
} else {
|
||||
diceFormula += `+ 0d10cs>=5[hero6-purple]`
|
||||
}
|
||||
if (rollData.skill.system.bonusdice != "none") {
|
||||
rollData.hasBonusDice = rollData.skill.system.bonusdice
|
||||
diceFormula += `+ ${rollData.hasBonusDice}cs>=5[black]`
|
||||
} else {
|
||||
diceFormula += `+ 0d6cs>=5[black]`
|
||||
}
|
||||
} else {
|
||||
diceFormula += `+ 0d8cs=>5 + 0d10cs>=5 + 0d6cs>=5`
|
||||
}
|
||||
|
||||
// advantage => 8
|
||||
let advFormula = "+ 0d8cs>=5"
|
||||
if (rollData.advantage == "advantage1" || rollData.forceAdvantage) {
|
||||
advFormula = "+ 1d8cs>=5[hero6-darkgreen]"
|
||||
}
|
||||
if (rollData.advantage == "advantage2") {
|
||||
advFormula = "+ 2d8cs>=5[hero6-darkgreen]"
|
||||
}
|
||||
diceFormula += advFormula
|
||||
|
||||
// disadvantage => 10
|
||||
let disFormula = "- 0d8cs>=5"
|
||||
if (rollData.disadvantage == "disadvantage1" || rollData.forceDisadvantage) {
|
||||
disFormula = "- 1d8cs>=5[red]"
|
||||
}
|
||||
if (rollData.disadvantage == "disadvantage2") {
|
||||
disFormula = "- 2d8cs>=5[red]"
|
||||
}
|
||||
diceFormula += disFormula
|
||||
|
||||
// armor => 12
|
||||
let skillArmorPenalty = 0
|
||||
for (let armor of rollData.armors) {
|
||||
if (armor.system.equipped) {
|
||||
skillArmorPenalty += armor.system.skillpenalty
|
||||
}
|
||||
}
|
||||
if (rollData.skill && rollData.skill.system.armorpenalty && skillArmorPenalty > 0) {
|
||||
rollData.skillArmorPenalty = skillArmorPenalty
|
||||
diceFormula += `- ${skillArmorPenalty}d8cs>=5`
|
||||
} else {
|
||||
diceFormula += `- 0d8cs>=5`
|
||||
}
|
||||
|
||||
// shield => 14
|
||||
if (rollData.useshield && rollData.shield) {
|
||||
diceFormula += "+ 1" + String(rollData.shield.system.shielddie) + "cs>=5[yellow]"
|
||||
} else {
|
||||
diceFormula += " + 0d6cs>=5"
|
||||
if (rollData.item) {
|
||||
target = rollData.item.roll || rollData.item.system.roll
|
||||
}
|
||||
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.rollOrder = 0
|
||||
|
||||
rollData.roll = myRoll
|
||||
rollData.nbSuccess = myRoll.total
|
||||
|
||||
if (rollData.rollAdvantage == "none" && rollData.forceRollAdvantage) {
|
||||
rollData.rollAdvantage = "roll-advantage"
|
||||
rollData.target = target
|
||||
rollData.diceFormula = diceFormula
|
||||
rollData.result = myRoll.total
|
||||
rollData.isSuccess = false
|
||||
if (rollData.result <= target) {
|
||||
rollData.isSuccess = true
|
||||
}
|
||||
if (rollData.rollAdvantage == "none" && rollData.forceRollDisadvantage) {
|
||||
rollData.rollAdvantage = "roll-disadvantage"
|
||||
//console.log("Roll result", rollData)
|
||||
if (myRoll.terms[0].total == 3) { // Always a success
|
||||
rollData.isSuccess = true
|
||||
}
|
||||
if (rollData.rollAdvantage != "none") {
|
||||
|
||||
rollData.rollOrder = 1
|
||||
rollData.rollType = (rollData.rollAdvantage == "roll-advantage") ? "Advantage" : "Disadvantage"
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-hero-system-6/templates/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
|
||||
rollData.rollOrder = 2
|
||||
let myRoll2 = new Roll(diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll2, game.settings.get("core", "rollMode"))
|
||||
|
||||
rollData.roll = myRoll2 // Tmp switch to display the proper results
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-hero-system-6/templates/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
rollData.roll = myRoll // Revert the tmp switch
|
||||
rollData.nbSuccess = myRoll.total
|
||||
|
||||
if (rollData.rollAdvantage == "roll-advantage") {
|
||||
if (myRoll2.total > rollData.nbSuccess) {
|
||||
hasChanged = true
|
||||
rollData.roll = myRoll2
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
}
|
||||
} else {
|
||||
if (myRoll2.total < rollData.nbSuccess) {
|
||||
rollData.roll = myRoll2
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
}
|
||||
}
|
||||
rollData.rollOrder = 3
|
||||
if (myRoll.terms[0].total == 18) { // Always a failure
|
||||
rollData.isSuccess = false
|
||||
}
|
||||
rollData.nbSuccess = Math.max(0, rollData.nbSuccess)
|
||||
rollData.margin = target - rollData.result
|
||||
|
||||
rollData.isFirstRollAdvantage = false
|
||||
// Manage exp
|
||||
if (rollData.skill && rollData.skill.system.level > 0) {
|
||||
let nbSkillSuccess = rollData.roll.terms[2].total
|
||||
if (nbSkillSuccess == 0 || nbSkillSuccess == rollData.skill.system.level) {
|
||||
actor.incrementSkillExp(rollData.skill.id, 1)
|
||||
}
|
||||
}
|
||||
|
||||
this.saveRollData(rollData)
|
||||
actor.lastRoll = rollData
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-hero-system-6/templates/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
console.log("Rolldata result", rollData)
|
||||
|
||||
// Message response
|
||||
this.displayDefenseMessage(rollData)
|
||||
|
||||
// Manage defense result
|
||||
this.processAttackDefense(rollData)
|
||||
this.outputRollMessage(rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* -------------- ----------------------------- */
|
||||
static processDirectRoll(rollData) {
|
||||
let roll = new Roll(rollData.rollFormula).roll({ async: false })
|
||||
rollData.roll = roll
|
||||
|
||||
rollData.result = roll.total
|
||||
rollData.bodyValue = this.computeBodyValue(rollData.roll)
|
||||
|
||||
this.outputRollMessage(rollData).catch(function() { ui.notifications.warn("Error during message output.") })
|
||||
}
|
||||
|
||||
/* -------------- ----------------------------- */
|
||||
static async outputRollMessage(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) {
|
||||
// Ensure we have no space at all
|
||||
//hero6Formula = hero6Formula.replace(/\s/g, '')
|
||||
let hasHalfDice = ""
|
||||
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 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
|
||||
}
|
||||
|
||||
/* -------------- ----------------------------- */
|
||||
static sortArrayObjectsByName(myArray) {
|
||||
myArray.sort((a, b) => {
|
||||
let fa = a.name.toLowerCase();
|
||||
@ -496,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 });
|
||||
}
|
||||
@ -531,7 +506,7 @@ export class Hero6Utility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createChatMessage(name, rollMode, chatOptions) {
|
||||
static async createChatMessage(name, rollMode, chatOptions) {
|
||||
switch (rollMode) {
|
||||
case "blindroll": // GM only
|
||||
if (!game.user.isGM) {
|
||||
@ -549,7 +524,7 @@ export class Hero6Utility {
|
||||
break;
|
||||
}
|
||||
chatOptions.alias = chatOptions.alias || name;
|
||||
ChatMessage.create(chatOptions);
|
||||
return await ChatMessage.create(chatOptions);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -557,7 +532,7 @@ export class Hero6Utility {
|
||||
let rollData = {
|
||||
rollId: randomID(16),
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
advantage: "none"
|
||||
bonusMalus: 0
|
||||
}
|
||||
Hero6Utility.updateWithTarget(rollData)
|
||||
return rollData
|
||||
@ -572,8 +547,8 @@ export class Hero6Utility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createChatWithRollMode(name, chatOptions) {
|
||||
this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions)
|
||||
static async createChatWithRollMode(name, chatOptions) {
|
||||
return await this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
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
|
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.
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.
@ -39,47 +39,53 @@
|
||||
text-align: justify;
|
||||
font-size: 16px;
|
||||
letter-spacing: 1px;
|
||||
color: rgba(44, 133, 133, 0.75);
|
||||
background: rgba(66, 66, 64, 0.95);
|
||||
|
||||
color: rgba(6, 56, 56, 0.75);
|
||||
background: rgba(228, 240, 240, 1);
|
||||
}
|
||||
|
||||
/* Fonts */
|
||||
.sheet header.sheet-header h1 input, .window-app .window-header, #actors .directory-list, #navigation #scene-list .scene.nav-item {
|
||||
font-size: 1.0rem;
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
background: rgba(66, 66, 64, 0.95);
|
||||
/*background: rgba(66, 66, 64, 0.95);*/
|
||||
} /* For title, sidebar character and scene */
|
||||
.sheet nav.sheet-tabs {
|
||||
font-size: 0.8rem;
|
||||
font-size: 0.7rem;
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
background: rgba(66, 66, 64, 0.95);
|
||||
/*background: rgba(66, 66, 64, 0.95);*/
|
||||
} /* For nav and title */
|
||||
.fvtt-hero-system-6 .item-form, .sheet header.sheet-header .flex-group-center.flex-compteurs, .sheet header.sheet-header .flex-group-center.flex-fatigue, select, button, .item-checkbox, #sidebar, #players, #navigation #nav-toggle {
|
||||
font-size: 0.8rem;
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
background: rgba(66, 66, 64, 0.95);
|
||||
color: rgba(4, 44, 44, 0.98);
|
||||
/*background: rgba(66, 66, 64, 0.95);*/
|
||||
}
|
||||
.window-app {
|
||||
|
||||
}
|
||||
|
||||
.app.sidebar-popout .window-content {
|
||||
color: rgba(4, 44, 44, 0.98);
|
||||
}
|
||||
|
||||
.window-header{
|
||||
background: rgba(0,0,0,0.75);
|
||||
}
|
||||
.dialog .window-content {
|
||||
color: rgba(66, 66, 64, 0.95);
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
}
|
||||
.dialog-content, .dialog-buttons, .form-fields {
|
||||
color: rgba(66, 66, 64, 0.95);
|
||||
color: rgba(4, 44, 44, 0.98);
|
||||
}
|
||||
.dialog-buttons {
|
||||
color: rgba(66, 66, 64, 0.95);
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
}
|
||||
.dialog .dialog-buttons button.default {
|
||||
color: rgba(66, 66, 64, 0.95);
|
||||
color: rgba(4, 44, 44, 0.98);
|
||||
}
|
||||
.window-app.sheet .window-content {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: rgba(224, 208, 197, 0.9);
|
||||
/*color: rgba(224, 208, 197, 0.9);*/
|
||||
}
|
||||
input {
|
||||
background: rgba(228, 240, 240, 0.75);
|
||||
@ -173,19 +179,6 @@ table { border: 1px solid #7a7971;}
|
||||
grid-template-columns: repeat(12, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.flex-group-center,
|
||||
.flex-group-left,
|
||||
.flex-group-right {
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.flex-group-left {
|
||||
-webkit-box-pack: start;
|
||||
-ms-flex-pack: start;
|
||||
@ -224,8 +217,7 @@ table { border: 1px solid #7a7971;}
|
||||
flex: 'flex-shrink' ;
|
||||
}
|
||||
|
||||
/* Styles limited to foundryvtt-vadentis sheets */
|
||||
|
||||
/* Styles limited to foundryvtt-hero6 sheets */
|
||||
.fvtt-hero-system-6 .sheet-header {
|
||||
-webkit-box-flex: 0;
|
||||
-ms-flex: 0 0 210px;
|
||||
@ -412,14 +404,9 @@ form .form-group label {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
||||
/* ======================================== */
|
||||
/* Sheet */
|
||||
.window-app.sheet .window-content .sheet-header{
|
||||
background: url("../images/ui/pc_sheet_bg.webp")
|
||||
.window-app.sheet .window-content .sheet-header {
|
||||
background: rgba(228, 240, 240, 0.75);
|
||||
}
|
||||
/* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/
|
||||
/*color: rgba(168, 139, 139, 0.5);*/
|
||||
|
||||
.window-app.sheet .window-content .sheet-header input[type="text"], .window-app.sheet .window-content .sheet-header input[type="number"], .window-app.sheet .window-content .sheet-header input[type="password"], .window-app.sheet .window-content .sheet-header input[type="date"], .window-app.sheet .window-content .sheet-header input[type="time"] {
|
||||
background: rgba(228, 240, 240, 0.75);
|
||||
@ -447,13 +434,10 @@ form .form-group label {
|
||||
|
||||
.window-app .window-content, .window-app.sheet .window-content .sheet-body{
|
||||
font-size: 0.8rem;
|
||||
background: url("../images/ui/pc_sheet_bg.webp") repeat left top;
|
||||
background: rgba(228, 240, 240, 0.75);
|
||||
color: rgba(66, 66, 64, 0.95);
|
||||
}
|
||||
|
||||
/* background: rgba(245,245,240,0.6) url("../images/ui/sheet_background.webp") left top;*/
|
||||
|
||||
section.sheet-body{padding: 0.25rem 0.5rem;}
|
||||
|
||||
.sheet header.sheet-header .profile-img {
|
||||
@ -466,7 +450,7 @@ section.sheet-body{padding: 0.25rem 0.5rem;}
|
||||
.sheet nav.sheet-tabs {
|
||||
font-size: 0.70rem;
|
||||
font-weight: bold;
|
||||
height: 3rem;
|
||||
height: 2.5rem;
|
||||
flex: 0 0 3rem;
|
||||
margin: 0;
|
||||
padding: 0 0 0 0.25rem;
|
||||
@ -479,11 +463,9 @@ section.sheet-body{padding: 0.25rem 0.5rem;}
|
||||
color:beige;
|
||||
}
|
||||
|
||||
/* background: rgb(245,245,240) url("../images/ui/fond4.webp") repeat left top;*/
|
||||
|
||||
nav.sheet-tabs .item {
|
||||
position: relative;
|
||||
padding: 0 0.25rem;
|
||||
padding: 0 0.15rem;
|
||||
}
|
||||
|
||||
nav.sheet-tabs .item:after {
|
||||
@ -493,7 +475,7 @@ nav.sheet-tabs .item:after {
|
||||
right: 0;
|
||||
height: 2rem;
|
||||
width: 1px;
|
||||
border-right: 1px dashed rgba(52, 52, 52, 0.25);
|
||||
/*border-right: 1px dashed rgba(52, 52, 52, 0.25);*/
|
||||
}
|
||||
|
||||
.sheet .tab[data-tab] {
|
||||
@ -546,7 +528,7 @@ ul, li {
|
||||
}
|
||||
|
||||
.sheet li {
|
||||
margin: 0.010rem;
|
||||
margin: 0.1rem;
|
||||
padding: 0.25rem;
|
||||
}
|
||||
.header-fields li {
|
||||
@ -574,10 +556,10 @@ ul, li {
|
||||
}
|
||||
|
||||
.list-item {
|
||||
margin: 0.125rem;
|
||||
box-shadow: inset 0px 0px 1px #00000096;
|
||||
border-radius: 0.25rem;
|
||||
padding: 0.125rem;
|
||||
margin: 0.2rem;
|
||||
/*box-shadow: inset 0px 0px 1px #00000096;*/
|
||||
/*border-radius: 0.25rem;*/
|
||||
padding: 0.2rem;
|
||||
flex: 1 1 5rem;
|
||||
display: flex !important;
|
||||
}
|
||||
@ -599,9 +581,6 @@ ul, li {
|
||||
.item-display-hide {
|
||||
display: none;
|
||||
}
|
||||
.conteneur-type {
|
||||
background: rgb(200, 10, 100, 0.25);
|
||||
}
|
||||
.item-quantite {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
@ -639,17 +618,6 @@ ul, li {
|
||||
font-weight: bold;
|
||||
flex-grow: 0;
|
||||
}
|
||||
.secondaire-label,
|
||||
.arme-label,
|
||||
.generic-label,
|
||||
.competence-label,
|
||||
.devotion-label,
|
||||
.sort-label,
|
||||
.technique-label,
|
||||
.ability-label,
|
||||
.arme-label,
|
||||
.armure-label,
|
||||
.equipement-label,
|
||||
.description-label {
|
||||
flex-grow: 2;
|
||||
margin-left: 4px;
|
||||
@ -681,6 +649,11 @@ ul, li {
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.content-center {
|
||||
align-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.attribut-value,
|
||||
.carac-value {
|
||||
flex-grow: 0;
|
||||
@ -804,8 +777,6 @@ ul, li {
|
||||
color: rgba(220,220,220,0.75);
|
||||
}
|
||||
|
||||
/* background: rgb(105,85,65) url("../images/ui/texture_feuille_perso_onglets.webp") no-repeat right bottom;*/
|
||||
|
||||
#sidebar.collapsed {
|
||||
height: 470px !important;
|
||||
}
|
||||
@ -850,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;
|
||||
}
|
||||
@ -889,18 +863,6 @@ ul, li {
|
||||
padding-bottom: .2rem;
|
||||
}
|
||||
|
||||
.div-river-full {
|
||||
height: 5rem;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.div-river {
|
||||
align-content: center;
|
||||
margin-left: 8px;
|
||||
align-content:space-around;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.div-center {
|
||||
align-self: center;
|
||||
}
|
||||
@ -963,7 +925,7 @@ ul, li {
|
||||
}
|
||||
|
||||
#sidebar #sidebar-tabs i{
|
||||
width: 25px;
|
||||
/*width: 25px;*/
|
||||
height: 25px;
|
||||
display: inline-block;
|
||||
background-position:center;
|
||||
@ -1075,38 +1037,9 @@ ul, li {
|
||||
transition: opacity 0.3s;
|
||||
}
|
||||
|
||||
.tooltip .ttt-fatigue{
|
||||
width: 360px;
|
||||
|
||||
background: rgba(30, 25, 20, 0.9);
|
||||
border-image: url(img/ui/bg_control.jpg) 21 repeat;
|
||||
border-image-slice: 6 6 6 6 fill;
|
||||
border-image-width: 6px 6px 6px 6px;
|
||||
border-image-outset: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
|
||||
font-size: 0.8rem;
|
||||
padding: 3px 0;
|
||||
}
|
||||
|
||||
.tooltip .ttt-ajustements {
|
||||
width: 150px;
|
||||
background: rgba(220,220,210,0.95);
|
||||
border-radius: 6px;
|
||||
font-size: 0.9rem;
|
||||
padding: 3px 0;
|
||||
}
|
||||
|
||||
.tooltip-nobottom {
|
||||
border-bottom: unset; /* If you want dots under the hoverable text */
|
||||
}
|
||||
.tooltip .ttt-xp {
|
||||
width: 250px;
|
||||
background: rgba(220,220,210,0.95);
|
||||
border-radius: 6px;
|
||||
font-size: 0.9rem;
|
||||
padding: 3px 0;
|
||||
}
|
||||
|
||||
/* Show the tooltip text when you mouse over the tooltip container */
|
||||
.tooltip:hover .tooltiptext {
|
||||
@ -1114,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%);
|
||||
@ -1178,34 +1136,6 @@ ul, li {
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
.drop-equipment-effect,
|
||||
.drop-power-effect,
|
||||
.drop-perk-effect,
|
||||
.drop-ability-effect,
|
||||
.drop-effect-specaffected,
|
||||
.drop-effect-spec,
|
||||
.drop-ability-weapon,
|
||||
.drop-ability-armor,
|
||||
.drop-race-perk,
|
||||
.drop-spec-perk,
|
||||
.drop-ability-power,
|
||||
.drop-ability-spec,
|
||||
.drop-spec-power,
|
||||
.drop-specialability,
|
||||
.drop-abilities,
|
||||
.drop-optionnal-abilities,
|
||||
.drop-virtue-vice-effect,
|
||||
.drop-virtue-vice,
|
||||
.drop-vice-virtue,
|
||||
.drop-specialperk1,
|
||||
.drop-perk2,
|
||||
.drop-spec1 ,
|
||||
.drop-spec2 {
|
||||
background: linear-gradient(to bottom, #6c95b9fc 5%, #105177ab 100%);
|
||||
background-color: #7d5d3b00;
|
||||
border-radius: 3px;
|
||||
border: 2px ridge #846109;
|
||||
}
|
||||
|
||||
/*************************************************************/
|
||||
#pause
|
||||
@ -1225,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;
|
||||
}
|
||||
|
||||
@ -1327,15 +1257,15 @@ Focus FOC: #ff0084
|
||||
max-width: 128px;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
.ability-item {
|
||||
.charac-item {
|
||||
flex-grow: 1;
|
||||
justify-content: flex-start;
|
||||
margin: 2px;
|
||||
}
|
||||
.ability-block {
|
||||
.charac-block {
|
||||
min-width: 160px;
|
||||
}
|
||||
.ability-margin {
|
||||
.charac-margin {
|
||||
margin-left: 4px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
@ -1343,11 +1273,11 @@ Focus FOC: #ff0084
|
||||
margin-left: 4px;
|
||||
margin-top: 3px;
|
||||
}
|
||||
.item-ability-roll {
|
||||
.item-charac-roll {
|
||||
max-height: 42px;
|
||||
min-height: 36px;
|
||||
}
|
||||
.item-ability-roll select, .item-ability-roll input {
|
||||
.item-charac-roll select, .item-ability-roll input {
|
||||
margin-top: 4px;
|
||||
margin-right: 2px;
|
||||
}
|
||||
@ -1365,6 +1295,9 @@ Focus FOC: #ff0084
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
.item-packed {
|
||||
flex-grow:0;
|
||||
}
|
||||
.items-title-text {
|
||||
margin-left: 4px;
|
||||
}
|
||||
@ -1416,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;
|
||||
@ -1430,10 +1368,50 @@ 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;
|
||||
max-width: 10rem;
|
||||
min-width: 10rem;
|
||||
}
|
||||
.item-field-label-long2 {
|
||||
flex-grow:1;
|
||||
max-width: 16rem;
|
||||
min-width: 16rem;
|
||||
}
|
||||
.item-field-label-long3 {
|
||||
flex-grow:1;
|
||||
max-width: 30rem;
|
||||
min-width: 30rem;
|
||||
}
|
||||
.item-field-label-long4 {
|
||||
flex-grow:1;
|
||||
max-width: 40rem;
|
||||
min-width: 40rem;
|
||||
}
|
||||
.item-control-end {
|
||||
align-self: flex-end;
|
||||
}
|
||||
.margin-space-4 {
|
||||
margin-left: 4px;
|
||||
}
|
||||
.margin-item-list {
|
||||
margin-top: 4px;
|
||||
}
|
||||
.margin-image-right {
|
||||
margin-right: 4px;
|
||||
}
|
||||
.fixed-separator {
|
||||
width: 12px;
|
||||
max-width: 12px;
|
||||
min-width: 12px;
|
||||
}
|
||||
.alternate-list {
|
||||
margin-top: 4px;
|
||||
flex-wrap: nowrap;
|
||||
@ -1444,5 +1422,31 @@ 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;
|
||||
min-width: 256px;
|
||||
}
|
||||
.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>
|
54
system.json
54
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": [
|
||||
{
|
||||
@ -23,22 +23,13 @@
|
||||
"packs": [
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Equipments",
|
||||
"label": "Equipment",
|
||||
"name": "equipment",
|
||||
"path": "packs/equipment.db",
|
||||
"system": "fvtt-hero-system-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",
|
||||
@ -74,24 +74,32 @@
|
||||
"system": "fvtt-hero-system-6",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Talents",
|
||||
"name": "talents",
|
||||
"path": "packs/talents.db",
|
||||
"system": "fvtt-hero-system-6",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
}
|
||||
],
|
||||
"primaryTokenAttribute": "secondary.hp",
|
||||
"secondaryTokenAttribute": "secondary.effort",
|
||||
"primaryTokenAttribute": "characteristics.body",
|
||||
"secondaryTokenAttribute": "characteristics.end",
|
||||
"socket": true,
|
||||
"styles": [
|
||||
"styles/simple.css"
|
||||
],
|
||||
"version": "10.0.3",
|
||||
"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.3.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"
|
||||
}
|
261
template.json
261
template.json
@ -1,60 +1,97 @@
|
||||
{
|
||||
"Actor": {
|
||||
"types": [
|
||||
"character"
|
||||
"character",
|
||||
"minion"
|
||||
],
|
||||
"templates": {
|
||||
"biodata": {
|
||||
"biodata": {
|
||||
"species": "",
|
||||
"age": 0,
|
||||
"campaign":"",
|
||||
"alternateids":"",
|
||||
"player": "",
|
||||
"gm": "",
|
||||
"gender": 0,
|
||||
"character": "",
|
||||
"mass":"",
|
||||
"religion": "",
|
||||
"weight": "",
|
||||
"height": "",
|
||||
"background": "",
|
||||
"motivation": "",
|
||||
"quote" : "",
|
||||
"tactics": "",
|
||||
"campaignuse": "",
|
||||
"appearance": "",
|
||||
"description": "",
|
||||
"notes": "",
|
||||
"gmnotes": ""
|
||||
"points": 0,
|
||||
"complications": 0,
|
||||
"xpearned": 0,
|
||||
"xpspent": 0,
|
||||
"combatskills": "",
|
||||
"presenceattack": {},
|
||||
"gmnotes": "",
|
||||
"combatnotes1":""
|
||||
}
|
||||
},
|
||||
"characteristics": {
|
||||
"characteristics": {
|
||||
"str": {
|
||||
"label": "Strength",
|
||||
"label": "STR",
|
||||
"value": 10,
|
||||
"base": 10,
|
||||
"category": "main",
|
||||
"strdice": "1d6",
|
||||
"lift": "",
|
||||
"strend": 0,
|
||||
"strendmode": "str10",
|
||||
"hasroll": true,
|
||||
"realcost": 0,
|
||||
"activecost": 0
|
||||
},
|
||||
"dex": {
|
||||
"label": "Dexterity",
|
||||
"label": "DEX",
|
||||
"value": 10,
|
||||
"base": 10
|
||||
"base": 10,
|
||||
"hasroll": true,
|
||||
"initiative": 10,
|
||||
"category": "main"
|
||||
},
|
||||
"con": {
|
||||
"label": "Constitution",
|
||||
"label": "CON",
|
||||
"hasroll": true,
|
||||
"category": "main",
|
||||
"value": 10,
|
||||
"base": 10
|
||||
},
|
||||
"int": {
|
||||
"label": "Intelligence",
|
||||
"label": "INT",
|
||||
"hasroll": true,
|
||||
"category": "main",
|
||||
"value": 10,
|
||||
"base": 10
|
||||
"base": 10,
|
||||
"perceptionroll": 11
|
||||
},
|
||||
"ego": {
|
||||
"label": "Ego",
|
||||
"label": "EGO",
|
||||
"hasroll": true,
|
||||
"category": "main",
|
||||
"value": 10,
|
||||
"base": 10
|
||||
},
|
||||
"pre": {
|
||||
"label": "Presence",
|
||||
"label": "PRE",
|
||||
"hasroll": true,
|
||||
"category": "main",
|
||||
"value": 10,
|
||||
"base": 10
|
||||
},
|
||||
"ocv": {
|
||||
"label": "OCV",
|
||||
"hasroll": true,
|
||||
"base": 3,
|
||||
"autoMod": "0",
|
||||
"userMod": "0",
|
||||
@ -63,6 +100,7 @@
|
||||
},
|
||||
"dcv": {
|
||||
"label": "DCV",
|
||||
"hasroll": false,
|
||||
"base": 3,
|
||||
"autoMod": "0",
|
||||
"userMod": "0",
|
||||
@ -71,6 +109,7 @@
|
||||
},
|
||||
"omcv": {
|
||||
"label": "OMCV",
|
||||
"hasroll": true,
|
||||
"base": 3,
|
||||
"autoMod": "0",
|
||||
"userMod": "0",
|
||||
@ -79,6 +118,7 @@
|
||||
},
|
||||
"dmcv": {
|
||||
"label": "DMCV",
|
||||
"hasroll": false,
|
||||
"base": 3,
|
||||
"autoMod": "0",
|
||||
"userMod": "0",
|
||||
@ -86,12 +126,15 @@
|
||||
"modifier": 1
|
||||
},
|
||||
"spd": {
|
||||
"label": "Speed",
|
||||
"label": "SPD",
|
||||
"hasroll": false,
|
||||
"value": 2,
|
||||
"base": 2
|
||||
},
|
||||
"pd": {
|
||||
"label": "PD",
|
||||
"hasroll": false,
|
||||
"isdefense": true,
|
||||
"value": 2,
|
||||
"base": 2,
|
||||
"pd_nonresistant_total": 0,
|
||||
@ -101,6 +144,8 @@
|
||||
},
|
||||
"ed": {
|
||||
"label": "ED",
|
||||
"hasroll": false,
|
||||
"isdefense": true,
|
||||
"value": 2,
|
||||
"base": 2,
|
||||
"ed_nonresistant_total": 0,
|
||||
@ -110,21 +155,31 @@
|
||||
},
|
||||
"rec": {
|
||||
"label": "REC",
|
||||
"hasroll": false,
|
||||
"value": 4,
|
||||
"base": 4
|
||||
},
|
||||
"end": {
|
||||
"label": "REC",
|
||||
"label": "END",
|
||||
"hasroll": false,
|
||||
"isvital": true,
|
||||
"damage": 0,
|
||||
"value": 20,
|
||||
"max": 20
|
||||
},
|
||||
"stun": {
|
||||
"label": "STUN",
|
||||
"hasroll": false,
|
||||
"isvital": true,
|
||||
"damage": 0,
|
||||
"value": 20,
|
||||
"max": 20
|
||||
},
|
||||
"body": {
|
||||
"label": "Body",
|
||||
"label": "BODY",
|
||||
"hasroll": false,
|
||||
"isvital": true,
|
||||
"damage": 0,
|
||||
"value": 10,
|
||||
"max": 10,
|
||||
"loc": {
|
||||
@ -148,39 +203,122 @@
|
||||
},
|
||||
"running": {
|
||||
"label": "Running",
|
||||
"ismovement": true,
|
||||
"hasroll": false,
|
||||
"value": 12,
|
||||
"ncvalue": 24,
|
||||
"base": 12
|
||||
},
|
||||
"swimming": {
|
||||
"label": "Swimming",
|
||||
"ismovement": true,
|
||||
"hasroll": false,
|
||||
"value": 4,
|
||||
"ncvalue": 8,
|
||||
"base": 4
|
||||
},
|
||||
"leaping": {
|
||||
"label": "Leaping",
|
||||
"ismovement": true,
|
||||
"hasroll": false,
|
||||
"value": 4,
|
||||
"ncvalue": 8,
|
||||
"base": 4,
|
||||
"leaping_horizontal_base": 0,
|
||||
"leaping_horizontal_total": 0,
|
||||
"leaping_vertical_base": 0,
|
||||
"leaping_vertical_total": 0
|
||||
},
|
||||
"flying": {
|
||||
"label": "Flying",
|
||||
"value": 0,
|
||||
"base": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"core": {
|
||||
"movements": {
|
||||
"movements": {
|
||||
"fly": {
|
||||
"label": "Fly",
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
|
||||
}
|
||||
},
|
||||
"teleport": {
|
||||
"label": "Teleport",
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
},
|
||||
"tunnel": {
|
||||
"label": "Tunnel",
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
},
|
||||
"move1": {
|
||||
"label": "N/A",
|
||||
"iseditable": true,
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
},
|
||||
"move2": {
|
||||
"label": "N/A",
|
||||
"iseditable": true,
|
||||
"value": 0,
|
||||
"ncvalue": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"defenses": {
|
||||
"defenses": {
|
||||
"mental": {
|
||||
"label": "Mental",
|
||||
"value": 0,
|
||||
"resistant": ""
|
||||
},
|
||||
"power": {
|
||||
"label": "Power",
|
||||
"value": 0,
|
||||
"resistant": ""
|
||||
},
|
||||
"flash": {
|
||||
"label": "Flash",
|
||||
"value": 0,
|
||||
"resistant": ""
|
||||
},
|
||||
"def1": {
|
||||
"label": "N/A",
|
||||
"value": 0,
|
||||
"iseditable": true,
|
||||
"resistant": ""
|
||||
},
|
||||
"def2": {
|
||||
"label": "N/A",
|
||||
"value": 0,
|
||||
"iseditable": true,
|
||||
"resistant": ""
|
||||
},
|
||||
"def3": {
|
||||
"label": "N/A",
|
||||
"value": 0,
|
||||
"iseditable": true,
|
||||
"resistant": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"core": {}
|
||||
},
|
||||
"character": {
|
||||
"templates": [
|
||||
"biodata",
|
||||
"core"
|
||||
]
|
||||
"biodata",
|
||||
"characteristics",
|
||||
"defenses",
|
||||
"movements"
|
||||
],
|
||||
"subactors": []
|
||||
},
|
||||
"minion": {
|
||||
"templates": [
|
||||
"biodata",
|
||||
"characteristics",
|
||||
"defenses",
|
||||
"movements"
|
||||
],
|
||||
"subactors": []
|
||||
}
|
||||
},
|
||||
"Item": {
|
||||
@ -190,6 +328,7 @@
|
||||
"talent",
|
||||
"power",
|
||||
"advantage",
|
||||
"maneuver",
|
||||
"limitation",
|
||||
"complication",
|
||||
"equipment"
|
||||
@ -213,15 +352,37 @@
|
||||
"senseaffecting": false,
|
||||
"modifiers": [],
|
||||
"levels": 0,
|
||||
"quantity": 0,
|
||||
"quantity": 1,
|
||||
"range": "",
|
||||
"damageeffect": "normal",
|
||||
"damage": "",
|
||||
"endurance": 0,
|
||||
"stunx": 0,
|
||||
"endurance": 0,
|
||||
"hasroll": false,
|
||||
"roll": 0,
|
||||
"attackvalue": "ocv",
|
||||
"roll": 0,
|
||||
"computebody": false,
|
||||
"haseffectroll": false,
|
||||
"effectroll": "standard",
|
||||
"effectrollformula": "",
|
||||
"hascharges": false,
|
||||
"nbcharges": 0,
|
||||
"items": {}
|
||||
}
|
||||
},
|
||||
"maneuver": {
|
||||
"templates": [
|
||||
"common"
|
||||
],
|
||||
"maneuvertype": "general",
|
||||
"pha": "",
|
||||
"ocv": "",
|
||||
"dcv" : "",
|
||||
"omcv": "",
|
||||
"dmcv" : "",
|
||||
"isstock": false,
|
||||
"active": false
|
||||
},
|
||||
"advantage": {
|
||||
"templates": [
|
||||
"common"
|
||||
@ -234,14 +395,17 @@
|
||||
},
|
||||
"skill": {
|
||||
"skilltype": "agility",
|
||||
"characteristic": "",
|
||||
"characteristic": "str",
|
||||
"base": "",
|
||||
"skillroll": 0,
|
||||
"levelscost": 0,
|
||||
"levels": 0,
|
||||
"skilllevelonly": false,
|
||||
"skillfamiliarity": false,
|
||||
"skilleveryman": false,
|
||||
"skillprofiency": false,
|
||||
"templates": [
|
||||
"common"
|
||||
],
|
||||
"plusonecost": 0
|
||||
]
|
||||
},
|
||||
"power": {
|
||||
"templates": [
|
||||
@ -254,9 +418,22 @@
|
||||
"common",
|
||||
"power"
|
||||
],
|
||||
"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": [
|
||||
@ -287,15 +464,6 @@
|
||||
"impenetrable": 0,
|
||||
"value": 0
|
||||
},
|
||||
"maneuver": {
|
||||
"templates": [
|
||||
"common"
|
||||
],
|
||||
"phase": 0,
|
||||
"ocv": "+0",
|
||||
"dcv": "+0",
|
||||
"active": false
|
||||
},
|
||||
"movement": {
|
||||
"templates": [
|
||||
"common"
|
||||
@ -309,12 +477,14 @@
|
||||
"velValue": 0
|
||||
},
|
||||
"perk": {
|
||||
"hasroll": false,
|
||||
"roll": 0,
|
||||
"templates": [
|
||||
"common"
|
||||
]
|
||||
},
|
||||
"talent": {
|
||||
"hasroll": false,
|
||||
"roll": 0,
|
||||
"templates": [
|
||||
"common"
|
||||
@ -326,15 +496,6 @@
|
||||
"templates": [
|
||||
"common"
|
||||
]
|
||||
},
|
||||
"martialart": {
|
||||
"maneuver_phase": 0,
|
||||
"maneuver_ocv": 0,
|
||||
"maneuver_dcv": 0,
|
||||
"maneuver_effect": "",
|
||||
"templates": [
|
||||
"common"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
128
templates/apps/combat-tracker.hbs
Normal file
128
templates/apps/combat-tracker.hbs
Normal file
@ -0,0 +1,128 @@
|
||||
<section class="{{cssClass}} directory flexcol" id="{{cssId}}" data-tab="{{tabName}}">
|
||||
<header class="combat-tracker-header">
|
||||
{{#if user.isGM}}
|
||||
<nav class="encounters flexrow" aria-label="COMBAT.NavLabel">
|
||||
<a class="combat-button combat-create" data-tooltip="COMBAT.Create">
|
||||
<i class="fas fa-plus"></i>
|
||||
</a>
|
||||
{{#if combatCount}}
|
||||
<a class="combat-button combat-cycle" data-tooltip="COMBAT.EncounterPrevious"
|
||||
{{#if previousId}}data-document-id="{{previousId}}"{{else}}disabled{{/if}}>
|
||||
<i class="fas fa-caret-left"></i>
|
||||
</a>
|
||||
<h4 class="encounter">{{localize "COMBAT.Encounter"}} {{currentIndex}} / {{combatCount}}</h4>
|
||||
<a class="combat-button combat-cycle" data-tooltip="COMBAT.EncounterNext"
|
||||
{{#if nextId}}data-document-id="{{nextId}}"{{else}}disabled{{/if}}>
|
||||
<i class="fas fa-caret-right"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
<a class="combat-button combat-control" data-tooltip="COMBAT.Delete" data-control="endCombat" {{#unless combatCount}}disabled{{/unless}}>
|
||||
<i class="fas fa-trash"></i>
|
||||
</a>
|
||||
</nav>
|
||||
{{/if}}
|
||||
|
||||
<div class="encounter-controls flexrow {{#if hasCombat}}combat{{/if}}">
|
||||
{{#if user.isGM}}
|
||||
<a class="combat-button combat-control" data-tooltip="COMBAT.RollAll" data-control="rollAll" {{#unless turns}}disabled{{/unless}}>
|
||||
<i class="fas fa-users"></i>
|
||||
</a>
|
||||
<a class="combat-button combat-control" data-tooltip="COMBAT.RollNPC" data-control="rollNPC" {{#unless turns}}disabled{{/unless}}>
|
||||
<i class="fas fa-users-cog"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
|
||||
{{#if combatCount}}
|
||||
{{#if combat.round}}
|
||||
<!--<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}}
|
||||
{{else}}
|
||||
<h3 class="encounter-title noborder">{{localize "COMBAT.None"}}</h3>
|
||||
{{/if}}
|
||||
|
||||
{{#if user.isGM}}
|
||||
<a class="combat-button combat-control" data-tooltip="COMBAT.InitiativeReset" data-control="resetAll"
|
||||
{{#unless hasCombat}}disabled{{/unless}}>
|
||||
<i class="fas fa-undo"></i>
|
||||
</a>
|
||||
<a class="combat-button combat-control" data-tooltip="{{labels.scope}}"
|
||||
data-control="toggleSceneLink" {{#unless hasCombat}}disabled{{/unless}}>
|
||||
<i class="fas fa-{{#unless linked}}un{{/unless}}link"></i>
|
||||
</a>
|
||||
<a class="combat-button combat-settings" data-tooltip="COMBAT.Settings" data-control="trackerSettings">
|
||||
<i class="fas fa-cog"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<ol id="combat-tracker" class="directory-list">
|
||||
{{#each turns}}
|
||||
{{#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}} </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">
|
||||
<i class="fas fa-eye-slash"></i>
|
||||
</a>
|
||||
<a class="combatant-control {{#if this.defeated}}active{{/if}}" data-tooltip="COMBAT.ToggleDead" data-control="toggleDefeated">
|
||||
<i class="fas fa-skull"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
{{#if this.canPing}}
|
||||
<a class="combatant-control" data-tooltip="COMBAT.PingCombatant" data-control="pingCombatant">
|
||||
<i class="fa-solid fa-bullseye-arrow"></i>
|
||||
</a>
|
||||
{{/if}}
|
||||
<div class="token-effects">
|
||||
{{#each this.effects}}
|
||||
<img class="token-effect" src="{{this}}"/>
|
||||
{{/each}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if this.hasResource}}
|
||||
<div class="token-resource">
|
||||
<span class="resource">{{this.resource}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="token-initiative">
|
||||
{{#if this.hasRolled}}
|
||||
<span class="initiative">{{this.initiative}}</span>
|
||||
{{else if this.owner}}
|
||||
<a class="combatant-control roll" data-tooltip="COMBAT.InitiativeRoll" data-control="rollInitiative"></a>
|
||||
{{/if}}
|
||||
</div>
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</ol>
|
||||
|
||||
<nav id="combat-controls" class="directory-footer flexrow" data-tooltip-direction="UP">
|
||||
{{#if hasCombat}}
|
||||
{{#if user.isGM}}
|
||||
{{#if round}}
|
||||
<a class="combat-control" data-tooltip="COMBAT.RoundPrev" data-control="previousRound"><i class="fas fa-step-backward"></i></a>
|
||||
<a class="combat-control" data-tooltip="COMBAT.TurnPrev" data-control="previousTurn"><i class="fas fa-arrow-left"></i></a>
|
||||
<a class="combat-control center" data-control="endCombat">{{localize 'COMBAT.End'}}</a>
|
||||
<a class="combat-control" data-tooltip="COMBAT.TurnNext" data-control="nextTurn"><i class="fas fa-arrow-right"></i></a>
|
||||
<a class="combat-control" data-tooltip="COMBAT.RoundNext" data-control="nextRound"><i class="fas fa-step-forward"></i></a>
|
||||
{{else}}
|
||||
<a class="combat-control center" data-control="startCombat">{{localize 'COMBAT.Begin'}}</a>
|
||||
{{/if}}
|
||||
{{else if control}}
|
||||
<a class="combat-control" data-tooltip="COMBAT.TurnPrev" data-control="previousTurn"><i class="fas fa-arrow-left"></i></a>
|
||||
<a class="combat-control center" data-control="nextTurn">{{localize 'COMBAT.TurnEnd'}}</a>
|
||||
<a class="combat-control" data-tooltip="COMBAT.TurnNext" data-control="nextTurn"><i class="fas fa-arrow-right"></i></a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</nav>
|
||||
</section>
|
@ -1,167 +1,84 @@
|
||||
<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 sizeDice}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Size basic dices : </span>
|
||||
<span class="roll-dialog-label">{{sizeDice.nb}}{{sizeDice.dice}}</span>
|
||||
</div>
|
||||
<div class="flexcol">
|
||||
|
||||
{{#if charac}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Distance bonus dice(s) : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="distanceBonusDice" value="{{distanceBonusDice}}" data-dtype="String" >
|
||||
{{#select distanceBonusDice}}
|
||||
<option value="0">0</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
<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}}
|
||||
|
||||
{{#if hasCover}}
|
||||
{{#if (eq subMode "ocv")}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Cover : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="hasCover" value="{{hasCover}}" data-dtype="String" >
|
||||
{{#select hasCover}}
|
||||
<option value="none">None</option>
|
||||
<option value="cover50">Cover at 50% (+1 dice)</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
<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>
|
||||
{{/if}}
|
||||
<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 situational}}
|
||||
{{#if (eq subMode "omcv")}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Situational : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="situational" value="{{situational}}" data-dtype="String" >
|
||||
{{#select situational}}
|
||||
<option value="none">None</option>
|
||||
<option value="dodge">Dodge (+1 dice)</option>
|
||||
<option value="prone">Prone (+1 dice)</option>
|
||||
<option value="moving">Moving (+1 dice)</option>
|
||||
<option value="Engaged">Engaged (+1 dice)</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
<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>
|
||||
{{/if}}
|
||||
<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 save}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{save.label}} : </span>
|
||||
<span class="roll-dialog-label">{{save.value}}d6</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if ability}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Ability : </span>
|
||||
<span class="roll-dialog-label">{{ability.value}}d6</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if weapon}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Weapon : </span>
|
||||
<span class="roll-dialog-label">{{weapon.name}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if shield}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Use shield ? : </span>
|
||||
<span class="roll-dialog-label"><input type="checkbox" id="useshield" name="useshield" {{checked useshield}}/></span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{shield.name}} : </span>
|
||||
<span class="roll-dialog-label">{{shield.data.shielddie}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if skill}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Skill : </span>
|
||||
<span class="roll-dialog-label">{{skill.name}} - {{skill.data.skilldice}}</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Feature die or SL+2? : </span>
|
||||
<span class="roll-dialog-label">{{#if skill.data.isfeatdie}} Yes {{else}} No {{/if}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if noAdvantage}}
|
||||
<div>
|
||||
<span class="roll-dialog-label">No advantage due to condition : {{noAdvantage.name}}</span>
|
||||
</div>
|
||||
{{#if item}}
|
||||
<div class="flexrow">
|
||||
<span class="item-field-label-long margin-item-list">{{upperFirst item.type}} - {{upperFirst item.name}}</span>
|
||||
{{#if item.roll}}
|
||||
<span class="item-field-label-medium margin-item-list">{{item.roll}}-</span>
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Advantage : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="advantage" value="{{advantage}}" data-dtype="String" >
|
||||
{{#select advantage}}
|
||||
<option value="none">None</option>
|
||||
<option value="advantage1">1 Advantage</option>
|
||||
<option value="advantage2">2 Advantages</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
<span class="item-field-label-medium margin-item-list">{{item.system.roll}}-</span>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Disadvantage : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="disadvantage" value="{{disadvantage}}" data-dtype="String" >
|
||||
{{#select disadvantage}}
|
||||
<option value="none">None</option>
|
||||
<option value="disadvantage1">1 Disadvantage</option>
|
||||
<option value="disadvantage2">2 Disadvantages</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Roll with Advantage/Disadvantage : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="rollAdvantage" value="{{rollAdvantage}}" data-dtype="String" >
|
||||
{{#select rollAdvantage}}
|
||||
<option value="none">None</option>
|
||||
<option value="roll-advantage">Roll with Advantage</option>
|
||||
<option value="roll-disadvantage">Roll with Disadvantage</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#if forceAdvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">1 Advantage from condition : {{forceAdvantage.name}}
|
||||
{{#if advantageFromTarget}} (Provided by targetted actor) {{/if}}
|
||||
</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if forceDisadvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">1 Disadvantage from condition : {{forceDisadvantage.name}} </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if forceRollAdvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Roll Advantage from condition : {{forceRollAdvantage.name}} </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if forceRollDisadvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Roll Disadvantage from condition : {{forceRollDisadvantage.name}} </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="item-field-label-long margin-item-list">Bonus/Penalty : </span>
|
||||
<select class="item-field-label-medium" type="text" id="bonusMalus" value="{{bonusMalus}}" data-dtype="Number" >
|
||||
{{#select bonusMalus}}
|
||||
<option value="-10">-10</option>
|
||||
<option value="-9">-9</option>
|
||||
<option value="-8">-8</option>
|
||||
<option value="-7">-7</option>
|
||||
<option value="-6">-6</option>
|
||||
<option value="-5">-5</option>
|
||||
<option value="-4">-4</option>
|
||||
<option value="-3">-3</option>
|
||||
<option value="-2">-2</option>
|
||||
<option value="-1">-1</option>
|
||||
<option value="0">0</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
<option value="10">10</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user