diff --git a/13th_Age/13th_Age.html b/13th_Age/13th_Age.html index b535d8eb36..0d7537aabd 100644 --- a/13th_Age/13th_Age.html +++ b/13th_Age/13th_Age.html @@ -55,12 +55,12 @@ - - - - - - + + + + + + diff --git a/13th_Age/README.md b/13th_Age/README.md index 740c384385..ac202fb896 100644 --- a/13th_Age/README.md +++ b/13th_Age/README.md @@ -1,5 +1,10 @@ -Early stages of the character sheet for 13th Age. +Functional 13th Age Sheet -I am for now focusing on functionality for now. Far from complete +Important field data for macros. -known issues, auto fields are not added to attributes, meaning the auto field for mods+level is not going to show till that works +@{STRMOD} represents the strength mod on its own. +@{STRMODLevel} is the same mod with the current level attached + +This works with str replaced with any 3 letter stat abreviation (Dex, CHA, etc) + +I reccomend using [[]] around these fields when added to your macros or else you see the whole math formula in the roll. diff --git a/AD&D_2E/2ESheet.html b/AD&D_2E/2ESheet.html index 380ed3c2ac..5fd790e1fc 100644 --- a/AD&D_2E/2ESheet.html +++ b/AD&D_2E/2ESheet.html @@ -464,7 +464,66 @@ Current weight:
-Current weight:
+Current weight:
+

+

Currency calculator

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CurrencyQuantityCopperSilverElectrumGoldPlatinum
Copper
Silver
Electrum
Gold
Platinum
+

Wealth


Platinum (5gp)
diff --git a/Adventure Pack/AdventurePack.css b/Adventure Pack/AdventurePack.css new file mode 100644 index 0000000000..c666e63965 --- /dev/null +++ b/Adventure Pack/AdventurePack.css @@ -0,0 +1,28 @@ + +.charsheet label { + text-align: right; padding-top: 10px; +} + +.charsheet h3 { + margin-bottom: 10px; + background:#000; + color:#fff; + text-align:center; +} +.charsheet input { +display: inline-block; +} + +.charsheet input.sheet-short { +width: 3.5em; +} + +.charsheet { +background-image: url("http://freeseamlesstextures.com/images/28-faded-parchment-background-sml.jpg"); +} + +.charsheet table td, .charsheet table th { + font-size: 1.2em; + font-weight: bold; + text-align: center; +} diff --git a/Adventure Pack/AdventurePack.html b/Adventure Pack/AdventurePack.html new file mode 100644 index 0000000000..a6c4350766 --- /dev/null +++ b/Adventure Pack/AdventurePack.html @@ -0,0 +1,211 @@ +
+
+ + + + + + + + +
+
+
+
+

Combat Info

+ + + + + + + + + + + + + +
   
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Weapon NameTypeATKAttackDamageRangeAmmoQtyMax
    
+
+
+
+
+

Skills

+ + + + + + + + + + + + + + +
SkillValueCheck
+
+
+
+

Ability Scores

+ + + + + + + + + + + + +
AbilityScoreMod
+
+
+
+

Saving Throws

+ + + + + + + + + +
SaveValueCheck
+
+

Info

+ + + + + + + + + +
 Gp Xp
+
+
+
+
+
+

Gear Carried / worn

+ + + + +
Worn Equipment
+
+ + + + + + +
     
+
+
+
+

Special / Feats

+ +
+
    +
    +
  • +
  • +
    +
+
+
+

Spells

+
+
+ + + + +
Used Zero-Level Spells
+
+ + + + +
     
+
+
+
+ + + + +
Used 1st-Level Spells
+
+ + + + +
     
+
+
+
+
\ No newline at end of file diff --git a/CWOD/Mage/Mage.css b/CWOD/Mage/Mage.css new file mode 100644 index 0000000000..770c12ef56 --- /dev/null +++ b/CWOD/Mage/Mage.css @@ -0,0 +1,142 @@ +.charsheet label { + display: inline-block; + width: 75px; + text-align: right; +} + +.charsheet input { + display: inline-block; + width: 155px; +} + +.sheet-col strong.sheet-dee { + font-size: 1.4em; + font-weight: bold; + padding-right: 4px; +} + +.charsheet input.sheet-short { + width: 3.5em; +} + +.charsheet { + background-color: white; +} + +.charsheet table td, .charsheet table th { + font-size: 1.2em; + font-weight: bold; + text-align: center; +} + +select.sheet-dtype { + width: 60px; + vertical-align: top; +} + +/* Hide actual dot/checkbox */ +input[type="radio"], +input[type="checkbox"] +{ + opacity: 0; + position: absolute; + cursor: pointer; + z-index: 1; + vertical-align: middle; +} + +/* Styles common to fake dot and checkbox */ +input[type="radio"] + span::before, +input[type="checkbox"] + span::before +{ + border: solid 1px #a8a8a8; + line-height: 14px; + text-align: middle; + display: inline-block; + vertical-align: middle; + + -moz-box-shadow: 0 0 2px #ccc; + -webkit-box-shadow: 0 0 2px #ccc; + box-shadow: 0 0 2px #ccc; + + background: #f6f6f6; + background: -moz-radial-gradient(#f6f6f6, #dfdfdf); + background: -webkit-radial-gradient(#f6f6f6, #dfdfdf); + background: -ms-radial-gradient(#f6f6f6, #dfdfdf); + background: -o-radial-gradient(#f6f6f6, #dfdfdf); + background: radial-gradient(#f6f6f6, #dfdfdf); +} + +/* Styles unique to fake dot (checked or left of checked) */ +input[type="radio"] + span::before +{ + content: "•"; + width: 12px; + height: 12px; + font-size: 36px; + + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; +} + +/* Styles unique to fake checkbox (unchecked) */ +input[type="checkbox"] + span::before +{ + content: ""; + opacity: .5; + width: 14px; + height: 14px; + font-size: 12px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Styles unique to fake checkbox (checked) */ +input[type="checkbox"]:checked + span::before +{ + border: solid 1px transparent; + background: transparent; + content: "✖"; + color: #a00; + + -moz-box-shadow: 0 0 2px transparent; + -webkit-box-shadow: 0 0 2px transparent; + box-shadow: 0 0 2px transparent; +} + +input[type="checkbox"]:hover:checked + span::before +{ + -moz-box-shadow: 0 0 2px #ccc; + -webkit-box-shadow: 0 0 2px #ccc; + box-shadow: 0 0 2px #ccc; + + border: solid 1px #a8a8a8; + margin-right: 0px; +} + +/* Remove dot from all radios _after_ selected one */ +input[type="radio"]:checked ~ input[type="radio"] + span::before +{ + content: ""; +} + +/* Show checkbox when hovering or when it's checked */ +input[type="checkbox"]:hover + span::before +{ + opacity: 1; +} + +/* Fade out dots when checkbox is checked */ +input[type="checkbox"]:checked ~ input[type="radio"] + span +{ + opacity: 0.5; +} + +/* Hide checked dots when checkbox is checked */ +input[type="checkbox"]:checked ~ input[type="radio"] + span::before +{ + content: ""; +} diff --git a/CWOD/Mage/Mage.html b/CWOD/Mage/Mage.html new file mode 100644 index 0000000000..a55de5286b --- /dev/null +++ b/CWOD/Mage/Mage.html @@ -0,0 +1,414 @@ +

+ +

+ +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ +
+ +

Attributes

+ +
+
+

Physical

+
+
+

Social

+
+
+

Mental

+
+
+
+
+

Strength

+

Dexterity

+

Stamina

+
+
+ +
+ +
+
+ +
+
+
+

Charisma

+

Manipulation

+

Appearance

+
+
+ +
+ +
+
+ +
+
+
+

Intelligence

+

Wits

+

Perception

+
+
+ +
+ +
+
+ +
+
+
+ +
+ +

Abilities

+
+
+

Talents

+
+
+

Skills

+
+
+

Knowledges

+
+
+ +
+
+

Alterness

+

Athletics

+

Awareness

+

Brawl

+

Dodge

+

Expression

+

Intimidation

+

Leadership

+

Streetwise

+

Subterfuge

+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Craft

+

Drive

+

Etiquette

+

Firearms

+

Meditation

+

Melee

+

Performance

+

Stealth

+

Survival

+

Technology

+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Academics

+

Computer

+

Cosmology

+

Enigmas

+

Investigation

+

Law

+

Linguistics

+

Medicine

+

Occult

+

Science

+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +

Spheres

+ +
+
+

Corresondence

+

Entropy

+

Forces

+
+
+ +
+ +
+
+ +
+
+
+

Life

+

Matter

+

Mind

+
+
+ +
+ +
+
+ +
+
+
+

Prime

+

Spirit

+

Time

+
+
+ +
+ +
+
+ +
+
+
+ +
+ +

Advantages

+ +
+

Backgrounds

+
+ + + + + + +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

Other Traits

+
+ + + + + + +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

Merits

+ +
+ +
+

Arete

+ +


+

Willpower

+ +
+ +
+


+

Quintessence

+








+

Paradox

+


+

Flaws

+ +
+ +
+

Health

+
+

Bruised

+

Hurt

+

Injured

+

Wounded

+

Mauled

+

Crippled

+

Incapacitated

+
+
+ +
+

-1     +

+
+

-1     +

+
+

-2     +

+
+

-2     +

+
+

-5     +

+
+ +
+


+

Resonance

+
+

Dynamic

+

Entropic

+

Static

+
+
+ +
+ +
+
+ +
+
+
+

Experience

+
+
+ +
+

Notes

+ +
diff --git a/CWOD/Mage/README.md b/CWOD/Mage/README.md new file mode 100644 index 0000000000..fbff2d22ed --- /dev/null +++ b/CWOD/Mage/README.md @@ -0,0 +1,7 @@ +Character sheet for Mage the Ascension, Second Edition, revised, by White Wolf Publishing. + +I still need to figure out how to do the Quintessence wheel. + +I need to figure up a better way to do the health tracker, so it can reflect the different types of damage. + +A big thanks goes out to Brian Shields and Benjamin Bandelow. I used the exalted sheet they made as a starting point and as such much, maybe most, of this code it theirs. diff --git a/CWOD/Vampire/README.md b/CWOD/Vampire/README.md new file mode 100644 index 0000000000..94dcbe59b4 --- /dev/null +++ b/CWOD/Vampire/README.md @@ -0,0 +1,3 @@ +Character sheet for Vampire The Maquerade, Second Edition, revised, by White Wolf Publishing. + +A big thanks goes out to Brian Shields and Benjamin Bandelow. I used the exalted sheet they made as a starting point and as such much, maybe most, of this code it theirs. diff --git a/CWOD/Vampire/Vampire.css b/CWOD/Vampire/Vampire.css new file mode 100644 index 0000000000..ff80694199 --- /dev/null +++ b/CWOD/Vampire/Vampire.css @@ -0,0 +1,143 @@ +.charsheet label { + display: inline-block; + width: 85px; + text-align: right; +} + +.charsheet input { + display: inline-block; + width: 155px; +} + +.sheet-col strong.sheet-dee { + font-size: 1.4em; + font-weight: bold; + padding-right: 4px; +} + +.charsheet input.sheet-short { + width: 3.5em; +} + +.charsheet { + background-color: white; +} + +.charsheet table td, .charsheet table th { + font-size: 1.2em; + font-weight: bold; + text-align: center; +} + +select.sheet-dtype { + width: 60px; + vertical-align: top; +} + +/* Hide actual dot/checkbox */ +input[type="radio"], +input[type="checkbox"] +{ + opacity: 0; + position: absolute; + cursor: pointer; + z-index: 1; + vertical-align: middle; +} + +/* Styles common to fake dot and checkbox */ +input[type="radio"] + span::before, +input[type="checkbox"] + span::before +{ + border: solid 1px #a8a8a8; + line-height: 14px; + text-align: middle; + display: inline-block; + vertical-align: middle; + margin: 0 0 0 -3px; + + -moz-box-shadow: 0 0 2px #ccc; + -webkit-box-shadow: 0 0 2px #ccc; + box-shadow: 0 0 2px #ccc; + + background: #f6f6f6; + background: -moz-radial-gradient(#f6f6f6, #dfdfdf); + background: -webkit-radial-gradient(#f6f6f6, #dfdfdf); + background: -ms-radial-gradient(#f6f6f6, #dfdfdf); + background: -o-radial-gradient(#f6f6f6, #dfdfdf); + background: radial-gradient(#f6f6f6, #dfdfdf); +} + +/* Styles unique to fake dot (checked or left of checked) */ +input[type="radio"] + span::before +{ + content: "•"; + width: 12px; + height: 12px; + font-size: 36px; + + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; +} + +/* Styles unique to fake checkbox (unchecked) */ +input[type="checkbox"] + span::before +{ + content: ""; + opacity: .5; + width: 14px; + height: 14px; + font-size: 12px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Styles unique to fake checkbox (checked) */ +input[type="checkbox"]:checked + span::before +{ + border: solid 1px transparent; + background: transparent; + content: "✖"; + color: #a00; + + -moz-box-shadow: 0 0 2px transparent; + -webkit-box-shadow: 0 0 2px transparent; + box-shadow: 0 0 2px transparent; +} + +input[type="checkbox"]:hover:checked + span::before +{ + -moz-box-shadow: 0 0 2px #ccc; + -webkit-box-shadow: 0 0 2px #ccc; + box-shadow: 0 0 2px #ccc; + + border: solid 1px #a8a8a8; + margin-right: 0px; +} + +/* Remove dot from all radios _after_ selected one */ +input[type="radio"]:checked ~ input[type="radio"] + span::before +{ + content: ""; +} + +/* Show checkbox when hovering or when it's checked */ +input[type="checkbox"]:hover + span::before +{ + opacity: 1; +} + +/* Fade out dots when checkbox is checked */ +input[type="checkbox"]:checked ~ input[type="radio"] + span +{ + opacity: 0.5; +} + +/* Hide checked dots when checkbox is checked */ +input[type="checkbox"]:checked ~ input[type="radio"] + span::before +{ + content: ""; +} diff --git a/CWOD/Vampire/Vampire.html b/CWOD/Vampire/Vampire.html new file mode 100644 index 0000000000..22617f3609 --- /dev/null +++ b/CWOD/Vampire/Vampire.html @@ -0,0 +1,460 @@ +

+ +

+ +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ +
+ +

Attributes

+ +
+
+

Physical

+
+
+

Social

+
+
+

Mental

+
+
+
+
+

Strength

+

Dexterity

+

Stamina

+
+
+ +
+ +
+
+ +
+
+
+
+
+

Charisma

+

Manipulation

+

Appearance

+
+
+ +
+ +
+
+ +
+
+
+
+
+

Intelligence

+

Wits

+

Perception

+
+
+ +
+ +
+
+ +
+
+
+ +
+ +

Abilities

+
+
+

Talents

+
+
+

Skills

+
+
+

Knowledges

+
+
+ +
+
+

Alterness

+

Athletics

+

Brawl

+

Dodge

+

Empathy

+

Expression

+

Intimidation

+

Leadership

+

Streetwise

+

Subterfuge

+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Animal Ken

+

Craft

+

Drive

+

Etiquette

+

Firearms

+

Melee

+

Performance

+

Security

+

Stealth

+

Survival

+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Academics

+

Computer

+

Finance

+

Investigation

+

Law

+

Linguistics

+

Medicine

+

Occult

+

Politics

+

Science

+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +

Advantages

+ +
+

Diciplines

+
+ + + + + + +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

+

Other Traits

+
+ + + + + + + + +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

+

Paths

+
+ + + + + + +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+ +
+

Backgrounds

+
+ + + + + + +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +

Path of Enlightenment

+
+ +
+ +

+

Willpower

+ +
+ +
+
+

Blood Pool

+
+ +
+
+ +
+
+ +
+
+ +
+

+

Notes

+ +

+

Merits

+ +
+ +
+

Vitues


+
+

Conscience/Conviction



+

Self-Control/Instint



+

Courage

+
+
+
+ +
+

+ +
+

+ +
+
+



+

Health

+
+

Bruised

+

Hurt

+

Injured

+

Wounded

+

Mauled

+

Crippled

+

Incapacitated

+
+
+ +
+

-1     +

+
+

-1     +

+
+

-2     +

+
+

-2     +

+
+

-5     +

+
+ +
+
+
+

Weakness

+
+
+ +
+
+

Experience

+
+
+ +
+

+

Flaws

+ +
diff --git a/D&D_4E/D&D_4E.css b/D&D_4E/D&D_4E.css index f49a1e0846..775ae69959 100644 --- a/D&D_4E/D&D_4E.css +++ b/D&D_4E/D&D_4E.css @@ -1,45 +1,226 @@ -.charsheet .sheet-3colrowCust .sheet-col { - width: calc(33% - 4px); - margin-right: 5px; +/* + Full CSS Reset + http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ +.charsheet .sheet-wrapper div, .charsheet .sheet-wrapper span, .charsheet .sheet-wrapper label, +.charsheet .sheet-wrapper h1, .charsheet .sheet-wrapper h2, .charsheet .sheet-wrapper h3, .charsheet .sheet-wrapper h4, .charsheet .sheet-wrapper h5, .charsheet .sheet-wrapper h6, .charsheet .sheet-wrapper p, +.charsheet .sheet-wrapper table, .charsheet .sheet-wrapper caption, .charsheet .sheet-wrapper tbody, .charsheet .sheet-wrapper tfoot, .charsheet .sheet-wrapper thead, .charsheet .sheet-wrapper tr, .charsheet .sheet-wrapper th, .charsheet .sheet-wrapper td { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + color: #404040; + vertical-align: baseline; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} +/* HTML5 display-role reset for older browsers */ +.charsheet .sheet-wrapper table { + border-collapse: collapse; + border-spacing: 0; } -.sheet-col:last-child { - margin-right: 0!important; +.charsheet .sheet-wrapper input::-webkit-outer-spin-button, +.charsheet .sheet-wrapper input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; } -.charsheet label { - display: inline-block; - width: 75px; - text-align: right; +.charsheet .sheet-wrapper textarea { + resize: none; } -.charsheet input[type='number'], .charsheet input[type='text'] { - display: inline-block; - width: 165px; -} +/* + Define our own styles for everything we will be using. + More work but it ensures the sheet is in total control of itself. +*/ +.charsheet { +} .charsheet { background-color: white; } +.charsheet .sheet-wrapper h2 { + margin: 1px 0; + font-weight:bold; + font-size: 15px; +} + +.charsheet .sheet-wrapper input, .charsheet .sheet-wrapper textarea, .charsheet .sheet-wrapper select, .charsheet .sheet-wrapper input[type="number"] { + display: inline-block; + border: 1px solid #ccc; + padding: 2px; + height: 28px; + width: 100%; + font-size: 12px; + line-height: 16px; + font-weight: normal; + margin: 0; + color: #555; + background-color: white; + vertical-align: middle; + cursor: auto; + letter-spacing: normal; + word-spacing: normal; + text-transform: none; + text-indent: 0px; + text-shadow: none; + text-align: start; + + -webkit-rtl-ordering: logical; + -webkit-user-select: text; + + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + -webkit-transition: border linear .2s,box-shadow linear .2s; + -moz-transition: border linear .2s,box-shadow linear .2s; + -ms-transition: border linear .2s,box-shadow linear .2s; + -o-transition: border linear .2s,box-shadow linear .2s; + transition: border linear .2s,box-shadow linear .2s; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + -webkit-writing-mode: horizontal-tb; +} + +.charsheet .sheet-wrapper input { + -webkit-appearance: textfield; +} + +.charsheet .sheet-wrapper input[type="checkbox"] { + margin-top: 7px; + height: 13px; + width: 13px; + color: #555; + border: 1px solid #ccc; + + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); + -webkit-transition: border linear .2s,box-shadow linear .2s; + -moz-transition: border linear .2s,box-shadow linear .2s; + -ms-transition: border linear .2s,box-shadow linear .2s; + -o-transition: border linear .2s,box-shadow linear .2s; + transition: border linear .2s,box-shadow linear .2s; +} + +.charsheet .sheet-wrapper textarea { + width: 98%; + height: 50px; + font-size: 13px; + line-height: 18px; +} + +.charsheet .sheet-wrapper label { + display: inline-block; + width: 100%; + font-size: 12px; + text-align: left; + height: 28px; + line-height: 28px; + vertical-align: middle; +} + +.charsheet .sheet-wrapper .sheet-3colrow .sheet-col { + width: calc(33% - 3px) !important; + margin-right: 2px !important; +} + +.charsheet .sheet-wrapper .sheet-3colrow .sheet-col:last-child { + margin-right: 0 !important; +} + +.charsheet .sheet-wrapper .sheet-2colrow .sheet-col { + width: calc(50% - 3px) !important; + margin-right: 2px !important; +} + +.charsheet .sheet-wrapper .sheet-2colrow .sheet-col:last-child { + margin-right: 0 !important; +} + +/* Main */ + +.charsheet .sheet-wrapper .sheet-row { + height: 34px; + margin: 0 0 2px; +} + +.charsheet .sheet-wrapper .sheet-alternative:nth-child(2n) { + background-color: #E3E3E3; +} + +.charsheet .sheet-wrapper .sheet-header { + height: 20px; + margin: 0; +} + +.charsheet .sheet-wrapper .sheet-header label { + padding: 0; + font-size: 9px; + height: 20px; + line-height: 20px; + font-weight: normal; + word-wrap:break-word; +} + +.charsheet .sheet-wrapper .sheet-item { + display: inline-block; + width: 100%; + height: 34px; + vertical-align: middle; + margin: 0 -2px; + text-align: left; + padding: 3px 2px; +} + +.charsheet .sheet-wrapper .sheet-item.sheet-multiline label { + line-height: 9px; + padding-top: 1px; +} + +.charsheet .sheet-wrapper .sheet-item.sheet-tiny { + width: calc(15% - 3%); +} + +.charsheet .sheet-wrapper .sheet-item.sheet-small { + width: calc(20% - 0.5%); +} + +.charsheet .sheet-wrapper textarea.sheet-small { + height: 32px; +} + +.charsheet .sheet-wrapper .sheet-item.sheet-med { + width: calc(30% - 0.5%); +} + +.charsheet .sheet-wrapper .sheet-item.sheet-large { + width: calc(40% - 5%); +} + +.charsheet .sheet-wrapper .sheet-item.sheet-huge { + width: calc(80% - 3%); +} + /* baseinfo - Top section with name, class, etc */ .sheet-baseinfo { - display: inline-block; - width: 149px; - margin-right: 3px; -} - -.sheet-baseinfo label, .sheet-baseinfo input, .sheet-baseinfo select { - display: block; - text-align: left; - width: 100%; - margin: 0; -} - -.sheet-baseinfo label { - border-top: 1px solid black; - width: 92%; + display: inline-block; + width: 145px; + margin-right: 3px; } .sheet-baseinfo.sheet-number { @@ -56,153 +237,29 @@ } /* statblock */ -.sheet-statblock { - margin-bottom: 10px; +.charsheet .sheet-wrapper .sheet-statblock { + margin-bottom: 5px; } -.sheet-statblock:last-child { +.charsheet .sheet-wrapper .sheet-statblock:last-child { margin-bottom: 0!important; } -.sheet-statblock input[type='number'], .sheet-statblock input[type='text'] { - display: inline-block; - border: 1px solid #ccc; - padding: 4px; - height: 28px; - width: 50px; - font-size: 13px; - line-height: 18px; - margin: 0; -} - -.sheet-statblock label { - padding: 5px 0; - font-size: 13px; - line-height: 18px; - height: 28px; - margin: 0; - text-align: left; - width: 100%; -} - -.sheet-statblock .sheet-black label { +.charsheet .sheet-wrapper .sheet-statblock .sheet-black label { color: white; } -.sheet-statblock input, .sheet-statblock select, .sheet-statblock textarea { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; -} - -.sheet-statblock h2 { +.charsheet .sheet-wrapper .sheet-statblock h2 { width: 100%; background-color: black; color: white; text-align: center; } -.sheet-statblock .sheet-rowitem { - height: 40px; - margin: 2px 0; -} - -.sheet-statblock .sheet-tinyitem, -.sheet-statblock .sheet-smallitem, -.sheet-statblock .sheet-meditem, -.sheet-statblock .sheet-medlargeitem, -.sheet-statblock .sheet-largeitem, -.sheet-statblock textarea { - display: inline-block; - padding: 6px 5px; - width: calc(80% - 13px); - height: 28px; - vertical-align: middle; - margin: 0 -2px; - text-align: left; -} - -.sheet-statblock textarea { - width: 100%; - height: 50px; - font-size: 13px; - line-height: 18px; -} - -.sheet-statblock textarea.sheet-small { - height: 32px; -} - -.sheet-statblock input[type='checkbox'] { - height: 28px; -} - -.sheet-statblock .sheet-tinyitem input[type='number'], .sheet-statblock .sheet-tinyitem input[type='text'], .sheet-statblock .sheet-tinyitem select, -.sheet-statblock .sheet-smallitem input[type='number'], .sheet-statblock .sheet-smallitem input[type='text'], .sheet-statblock .sheet-smallitem select, -.sheet-statblock .sheet-meditem input[type='number'], .sheet-statblock .sheet-meditem input[type='text'], .sheet-statblock .sheet-meditem select, -.sheet-statblock .sheet-medlargeitem input[type='number'], .sheet-statblock .sheet-medlargeitem input[type='text'], .sheet-statblock .sheet-medlargeitem select, -.sheet-statblock .sheet-largeitem input[type='number'], .sheet-statblock .sheet-largeitem input[type='text'], .sheet-statblock .sheet-largeitem select { - width: 100%; -} - -.sheet-statblock .sheet-tinyitem { - width: calc(15% - 10px); - padding: 6px 3px; -} - -.sheet-statblock .sheet-smallitem { - width: calc(20% - 4px); -} - -.sheet-statblock .sheet-meditem { - width: calc(33% - 9px); -} - -.sheet-statblock .sheet-medlargeitem { - width: calc(40% - 8px); -} - -.sheet-statblock .sheet-halfblack { +.charsheet .sheet-wrapper .sheet-statblock .sheet-halfblack { background: linear-gradient(to right, white 50%, black 50%); } -.sheet-statblock .sheet-black { +.charsheet .sheet-wrapper .sheet-statblock .sheet-black { background: black; color: white; -} - -.sheet-statblock .sheet-headerrowitem .sheet-tinyitem, -.sheet-statblock .sheet-headerrowitem .sheet-smallitem, -.sheet-statblock .sheet-headerrowitem .sheet-meditem, -.sheet-statblock .sheet-headerrowitem .sheet-medlargeitem, -.sheet-statblock .sheet-headerrowitem .sheet-largeitem { - padding: 0 5px; - height: 20px; -} - -.sheet-statblock .sheet-headerrowitem .sheet-tinyitem { - padding: 6px 3px; -} - -.sheet-statblock .sheet-headerrowitem label { - padding: 0; - font-size: 9px; - line-height: 9px; - font-weight: normal; - word-wrap:break-word; -} - -/* Fixes */ - -input[type='number'] { - -moz-appearance:textfield; -} - -input::-webkit-outer-spin-button, -input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; -} - -textarea { - resize: none; } \ No newline at end of file diff --git a/D&D_4E/D&D_4E.html b/D&D_4E/D&D_4E.html index 02722cb5c8..61103147f9 100644 --- a/D&D_4E/D&D_4E.html +++ b/D&D_4E/D&D_4E.html @@ -1,931 +1,918 @@ -
- -
-
- -
-
-
-
+
+
-
-
- - -
-
-
- - -
-
-
-
-
- -
- -
- -
- - -
- -
-

Hit Points

- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- - -
-
- - - -
-
- -
-
- -
-
- - -
-
- -
-
- +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ + +
+
+
+
+
-
-

Initiative

- -
-
- +
+ +
+ +
+ + +
+ +
+

Hit Points

+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+ +
+
+ + +
+
+ + + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+
- -
-
- + +
+

Initiative

+ +
+
+ +
+
+
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
-
- -
-
- + +
+
+ +
+
- -
-
- + +
+

Movement

+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
- + +
+

Action Point

+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
-
-

Movement

- -
-
- -
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
+ +
-
-

Action Point

- -
-
- +
+

Defenses

+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+

Ability Scores

+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
- -
-
- +
+

Senses

+ +
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
- -
- -
+ + +
- -
+ +
-
-

Defenses

- -
-
- +
+

Skills

+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- -
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- -
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
-
- -
-

Ability Scores

- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
-

Senses

- -
-
- -
-
- -
-
-
-
- -
-
- -
-
- -
-
- -
-
-
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
- -
-
- -
- - -
- - -
- -
-

Skills

- -
-
- -
-
- -
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
- -
- -
- -
- -
- - -
-
-

Feats

-
- -
-
+
+
- -
-
-

Powers

-
-
-
- -
-
- -
-
- -
-
- -
-
-
-
- -
-
- -
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
+
-
+
+ + +
+
+

Feats

+
+ +
+
+
+ + +
+
+

Powers

+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
\ No newline at end of file diff --git a/D&D_4E/D&D_4E.png b/D&D_4E/D&D_4E.png new file mode 100644 index 0000000000..d84ac7d4fa Binary files /dev/null and b/D&D_4E/D&D_4E.png differ diff --git a/D&D_4E/README.md b/D&D_4E/README.md index bfe713b92d..8df41b31f0 100644 --- a/D&D_4E/README.md +++ b/D&D_4E/README.md @@ -1,16 +1,66 @@ -This will be a D&D 4th Edition character sheet. It's currently just a copy of the Kitchen sink sample sheet, so by no means complete. Feel free to contribute as you see fit. +Useful Attributes: --Ville S +level // current level. +halflevel // current half level. -Would a TODO file be useful for co-ordinating what everyone might be working on, or is there a better way to do it on Git? +hp // current and max hit points. +hp-bloodied // bloodied value. +surge-value // your surge value. +surges // current and max number of surges daily. +tmp-hp // temporary hit points. -F.ex. +initiative // your initiative mod, this + 1d20 = your initiative. (Todo: Add roll button if Riley adds buttons with text.) -General layout //Unfinished, getting to it ASAP -Ville S //Done -Alex L. +speed // your speed in squares. -Ability Scores //Added basic scores, working on modifiers / mod + ½ level, defenses. -Ville S //Done -Alex L. +action-points // your current number of action points. -Skills //To do, soon. -Someone else //Done -Alex L. +ac // your amour class. +fort // your fortitude. +ref // your reflex. +will // your will. + +// attribute scores: +strength +constitution +dexterity +intelligence +wisdom +charisma +*attribute from above*-mod // (ie strength-mod) attribute modifier. +*attribute from above*-mod-level // (ie strength-mod-level) attribute modifier with half level. + +passive-insight // your passive insight. +passive-perception // your passive perception. + +// skills (all with half level). (Todo: Add roll button if Riley adds buttons with text.) +acrobatics +arcana +athletics +bluff +diplomacy +dungeoneering +endurance +heal +history +insight +intimidate +nature +perception +religion +stealth +streetwise +thievery + +Updates: + +2014-04-16 19:26 : +Full CSS reworking, almost all styles now controlled by css file (not dependant on roll20's base css file). + +-Alex L. + +2014-04-12 21:25 : +As everything in the D&D 4E sheet is now pretty much in working order, a proper readme file detailing special use cases and general how-to's could be useful? Intent would be for someone with zero knowledge of code should be familiar with how to use the sheet after reading this file. -Ville S. 2014-04-09 20:23 : Updated html and css to resemble classic B/W 4th Edition character sheet. @@ -18,4 +68,4 @@ Updated html and css to resemble classic B/W 4th Edition character sheet. ToDo: Rolls - Waiting on Rileys response re:Buttons with text. --Alex L. \ No newline at end of file +-Alex L. diff --git a/D&D_4E/sheet.json b/D&D_4E/sheet.json new file mode 100644 index 0000000000..1bbee18137 --- /dev/null +++ b/D&D_4E/sheet.json @@ -0,0 +1,7 @@ +{ + "html": "D&D_4E.html", + "css": "D&D_4E.css", + "authors": "Alex L., Ville S.", + "preview": "D&D_4E.png", + "instructions": "# D&D 4E classic character sheet\r## Useful Attributes\r\r* level\r* halflevel\r\r* hp\r* hp-bloodied\r* surge-value\r* surges\r* tmp-hp\r\r* initiative\r* speed\r* action-points\r\r* ac\r* fort\r* ref\r* will\r\r**ability scores**\r\r* strength\r* constitution\r* dexterity\r* intelligence\r* wisdom\r*charisma\r* [ability]-mod\r* [ability]-mod-level *modifier with half level*\r\r* passive-insight\r* passive-perception\r\r**skills**\r\r* acrobatics\r* arcana\r* athletics\r* bluff\r* diplomacy\r* dungeoneering\r* endurance\r* heal\r* history\r* insight\r* intimidate\r* nature\r* perception\r* religion\r* stealth\r* streetwise\r* thievery" +} \ No newline at end of file diff --git a/DnDNext/DnDNext.css b/DnDNext/D&DNext.css similarity index 76% rename from DnDNext/DnDNext.css rename to DnDNext/D&DNext.css index 63ae2dbeb5..0ae08fc30d 100644 --- a/DnDNext/DnDNext.css +++ b/DnDNext/D&DNext.css @@ -25,12 +25,16 @@ padding-right: 1px; } +.charsheet input.sheet-check { + width: 20px; +} + .charsheet input.sheet-short { width: 45px; } .charsheet { - background-image: url(""); + background-image: url("http://freeseamlesstextures.com/images/38-vintage-paper-background-thb.jpg"); font-family: "Times New Roman"; } @@ -45,3 +49,12 @@ padding: 0px; vertical-align: middle; } + +select.sheet-dtype { + width: 60px; + vertical-align: top; +} + +.charsheet textarea { + resize: none; +} diff --git a/DnDNext/D&DNext.html b/DnDNext/D&DNext.html index 75ce7788fa..18a8e34760 100644 --- a/DnDNext/D&DNext.html +++ b/DnDNext/D&DNext.html @@ -1,18 +1,18 @@
- +
- +

D&DNext Character Sheet

D&DNext Character Sheet

- +
- + @@ -28,20 +28,15 @@
-

-
Name
Name
Race
Alignment
- - - - - +
+
 
- + @@ -72,44 +67,44 @@

Ability Scores

-
+
- + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +
Score  ModifierMod
STR STR 
DEX DEX 
CON CON 
INT INT 
WIS WIS 
CHA CHA 
@@ -120,7 +115,7 @@

Statistics

- +
@@ -131,29 +126,29 @@ - + - - - - - - - - - - - - - + + + + + + + + + + + + + - +
 
/
/
 
 
 
 
@@ -161,7 +156,7 @@
-
+
@@ -182,151 +177,177 @@
-
+
- +

Ideals

-

Flaws

+

Bonds

-

Feats

+

Flaws

-
-
+
+
-

Proficiencies

- +
- - + + + +
Saving Throws  

Proficiencies

+ + + + + - - + + - - + + - - + + - - + +
Saving Throws 
Armor  Armor 
Weapons  Weapons 
Tools  Tools 
Languages  Languages 
-

Class Features & Abilities

- + + + + + + + + + +

Class Features & Feats

-
+
-
+
- -

 

- +
- - + + + + + + + + + + + + + + - - + + + + - - + + + + - - - - - - - - - - + + + +
Athletics - STR - - Athletics Prof. + Exp.
Acrobatics Prof. + Exp.
Sleight of Hand Prof. + Exp.
Acrobatics - DEX - - Stealth Prof. + Exp.
Sleight of Hand- DEX - - Arcana Prof. + Exp.
Stealth- DEX - -
Arcana - INT - -
History - INT - - History Prof. + Exp.
- -

Skills

- +
- - + + + - - + + + - - + + + - - + + + - - + + + - - + + + @@ -334,67 +355,77 @@
- -

 

-
Nature - INT - + Nature Prof. + Exp.
Religion - INT - + Religion Prof. + Exp.
Search - INT - + Search Prof. + Exp.
Animal Handling - WIS - + Animal HandlingProf. + Exp.
Insight - WIS - + Insight Prof. + Exp.
Medicine - WIS - + Medicine Prof. + Exp.
+
- - + + + - - + + + - - + + + - - + + + - - + + + - - + + +
Perception - WIS - + Perception Prof. + Exp.
Survival - WIS - + Survival Prof. + Exp.
Deception - CHA - + Deception Prof. + Exp.
Intimidation - CHA - + Intimidation Prof. + Exp.
Performance - CHA - + Performance Prof. + Exp.
Persuasion - CHA - + Persuasion Prof. + Exp.
-
+
- - - + + +
-
+
- +
@@ -409,7 +440,7 @@ - + @@ -419,7 +450,7 @@ - + @@ -429,7 +460,7 @@ - + @@ -439,7 +470,7 @@ - + @@ -449,7 +480,7 @@ - + @@ -459,7 +490,7 @@ - + @@ -470,9 +501,9 @@
WEAPON
-
+
- +
@@ -504,16 +535,25 @@
ARMOR
-
+

Spellcasting

- +
- - + + + +
+ +
@@ -523,11 +563,11 @@
- +
- - + + @@ -573,7 +613,7 @@

Spells Known

-
Spells Per DaySpells Cast  Spells Per Day    Spells Cast  
Lvl. 1 
+
@@ -581,7 +621,7 @@ - + - + - + - +
@@ -592,7 +632,7 @@
@@ -603,7 +643,7 @@
@@ -614,7 +654,7 @@
@@ -628,68 +668,64 @@


- +
- + - +
  - - + +  
  - - + +  
-
-
+
+

Equipment & Treasure

- +
- +

/Lbs.


Magic Items


Magic Items

- +
- - + +
cp
sp
gp
ep
pp
ep
pp
- +
- + - -

Gems & Art Objects

Treasure, Gems & Art Objects

- - - +

Equipment

Equipment

diff --git a/Exalted2e/README.md b/Exalted2e/README.md index 804fe5071d..21cd62a1a6 100644 --- a/Exalted2e/README.md +++ b/Exalted2e/README.md @@ -12,4 +12,5 @@ Character sheet for _Exalted, Second Edition_ by White Wolf Publishing. If you feel you've contributed to the development of this character sheet, don't forget to add your name here! -* Brian Shields \ No newline at end of file +* Brian Shields +* Benjamin Bandelow diff --git a/Exalted2e/exalted2e.css b/Exalted2e/exalted2e.css index 71b083fef5..57b0a010cd 100644 Binary files a/Exalted2e/exalted2e.css and b/Exalted2e/exalted2e.css differ diff --git a/Exalted2e/exalted2e.html b/Exalted2e/exalted2e.html index 9eea47dbad..0639433ad4 100644 --- a/Exalted2e/exalted2e.html +++ b/Exalted2e/exalted2e.html @@ -1,544 +1,607 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  - - -   - - -
  - - -   - - -
  - - -   - - -

Attributes

- Strength -
- - - - - -
-
  - Charisma -
- - - - - -
-
  - Perception -
- - - - - -
-
- Dexterity -
- - - - - -
-
  - Manipulation -
- - - - - -
-
  - Intelligence -
- - - - - -
-
- Stamina -
- - - - - -
-
  - Appearance -
- - - - - -
-
  - Wits -
- - - - - -
-

Abilities

Dawn Zenith Twilight
- - Archery -
- - - - - - - -
-
  - - Integrity -
- - - - - - - -
-
  - - Craft -
- - - - - - - -
-
- - Martial Arts -
- - - - - - - -
-
  - - Performance -
- - - - - - - -
-
  - - Investigation -
- - - - - - - -
-
- - Melee -
- - - - - - - -
-
  - - Presence -
- - - - - - - -
-
  - - Lore -
- - - - - - - -
-
- - Thrown -
- - - - - - - -
-
  - - Resistance -
- - - - - - - -
-
  - - Medicine -
- - - - - - - -
-
- - War -
- - - - - - - -
-
  - - Survival -
- - - - - - - -
-
  - - Occult -
- - - - - - - -
-
Night Eclipse Specialties
- - Athletics -
- - - - - - - -
-
  - - Bureaucracy -
- - - - - - - -
-
  -
- - -
- - - - - -
-
-
- - Awareness -
- - - - - - - -
-
  - - Linguistics -
- - - - - - - -
-
- - Dodge -
- - - - - - - -
-
  - - Ride -
- - - - - - - -
-
- - Larceny -
- - - - - - - -
-
  - - Sail -
- - - - - - - -
-
- - Stealth -
- - - - - - - -
-
  - - Socialize -
- - - - - - - -
-
\ No newline at end of file +
+
+ + + + + + +
+ +
+

+ +

+
+ +
+ + + + + +
+
+ +
+ +
+

Attributes

+
+ +
+ +
+

Physical

+

Strength

+
+ + + + + + +
+

Dexterity

+
+ + + + + + +
+

Stamina

+
+ + + + + + +
+
+ +
+

Social

+

Charisma

+
+ + + + + + +
+

Manipulation

+
+ + + + + + +
+

Appearance

+
+ + + + + + +
+
+ +
+

Mental

+

Intelligence

+
+ + + + + + +
+

Wits

+
+ + + + + + +
+

Perception

+
+ + + + + + +
+
+ +
+ +

Skills

+ +
+ +
+

Dawn

+

Archery

+
+ + + + + + + + +
+

Martial Arts

+
+ + + + + + + + +
+

Melee

+
+ + + + + + + + +
+

Thrown

+
+ + + + + + + + +
+

War

+
+ + + + + + + + +
+
+ +
+

Zenith

+

Integrity

+
+ + + + + + + + +
+

Performance

+
+ + + + + + + + +
+

Presence

+
+ + + + + + + + +
+

Resistance

+
+ + + + + + + + +
+

Survival

+
+ + + + + + + + +
+
+ +
+

Twilight

+

Craft

+
+ + + + + + + + +
+

Investigation

+
+ + + + + + + + +
+

Lore

+
+ + + + + + + + +
+

Medicine

+
+ + + + + + + + +
+

Occult

+
+ + + + + + + + +
+
+ +
+

Night

+

Athletics

+
+ + + + + + + + +
+

Awareness

+
+ + + + + + + + +
+

Dodge

+
+ + + + + + + + +
+

Larceny

+
+ + + + + + + + +
+

Stealth

+
+ + + + + + + + +
+
+ +
+

Eclipse

+

Bureaucracy

+
+ + + + + + + + +
+

Linguistics

+
+ + + + + + + + +
+

Ride

+
+ + + + + + + + +
+

Sail

+
+ + + + + + + + +
+

Socialize

+
+ + + + + + + + +
+
+ +
+ +

Specialties

+
+ + +
+ + + +
+
+ +
+ +

Other Values

+ +
+ +
+

Powers

+

Essence

+
+ + + + + + + + + + + +
+

Willpower

+
+ + + + + + + + + + + +
+

Limit

+
+ + + + + + + + + + + + +
+

Peripheral Essence

+  /  +

Personal Essence

+  /  +
+ +
+

Virtues

+

Main Virtue

+
+ + + + + +
+

Compassion

+
+ + + + + + +
+

Conviction

+
+ + + + + + +
+

Temperance

+
+ + + + + + +
+

Valor

+
+ + + + + + +
+
+ +
+

Derived Stats

+ + + + + + + + + + + + + + + + +
Move | Dash
Parry DV | Dodge DV
Bashing Soak | Lethal Soak
+
+ +
+

Merits

+ + +
+ +

Flaws

+ +
\ No newline at end of file diff --git a/Exalted2e/install-proposal.md b/Exalted2e/install-proposal.md new file mode 100644 index 0000000000..88e044f8f7 --- /dev/null +++ b/Exalted2e/install-proposal.md @@ -0,0 +1,36 @@ +## _Exalted, Second Edition_ Character Sheet Installation Instructions + +_This file is only a proposal._ + +`Standard Character Sheet installation instructions go here` + +In addition to the above, you will need to create some rollable tables in order to ensure that the roll buttons on the character sheet function correctly. These steps can assist in your _Exalted_ game even if you do not use the buttons on the character sheet. + +Rollable tables are available from the second tab from the right in the campaign window, along with card decks. + +1. Create a table named `exalted`: + 1. Press "+ Add" in the Rollable Tables section of the tab. + 1. Select the "new-table" table that was created. + 1. Rename the table "exalted". + 1. Add the possible successes to the table: + 1. Press "+ Add" in the Table Items section of the table window. + 1. Name the first item "botch", and and click "Save Changes". + 1. Press "+ Add" in the Table Items section of the table window. + 1. Name the second item "0", give it a weight of 5, and click "Save Changes". + 1. Press "+ Add" in the Table Items section of the table window. + 1. Name the third item "1", give it a weight of 3, and click "Save Changes". + 1. Press "+ Add" in the Table Items section of the table window. + 1. Name the fourth item "2", and click "Save Changes". + 1. Click "Save Changes". +1. Create a table named `exalted-damage`: + 1. Press "+ Add" in the Rollable Tables section of the tab. + 1. Select the "new-table" table that was created. + 1. Rename the table "exalted-damage". + 1. Add the possible successes to the table: + 1. Press "+ Add" in the Table Items section of the table window. + 1. Name the first item "0", give it a weight of 6, and click "Save Changes". + 1. Press "+ Add" in the Table Items section of the table window. + 1. Name the second item "1", give it a weight of 4, and click "Save Changes". + 1. Click "Save Changes". + +When rolling the `exalted` table, please note that the result will display "botch" if an only if there were no successes _and_ the first roll was a botch. If you use inline rolls, you should hover your mouse over any result of 0, to ensure that it wasn't also a botch. diff --git a/Fate_Core/Fate_Core.htm b/Fate_Core/Fate_Core.htm new file mode 100644 index 0000000000..961e739476 --- /dev/null +++ b/Fate_Core/Fate_Core.htm @@ -0,0 +1,152 @@ +
+
+ FATE CORE +
+
+
+
+
+
+ +
+
+ +
+
+ + + +
+
+ +
+
+ + +
+
+
+ + +
+
+ + + +
+ +
+
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Supurb (+5)
Great (+4)
Good (+3)
Fair (+2)
Average (+1)
+
+
+
+ +
+
+ + + +
+
+
+ + +
+
+ + +
+
+
+
+
+
+ + + + + + + + +
1 2 3 4
+
+
+
+
+ + + + + + + + +
1 2 3 4
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
\ No newline at end of file diff --git a/Fate_Core/style.css b/Fate_Core/style.css new file mode 100644 index 0000000000..5e14a8bc00 --- /dev/null +++ b/Fate_Core/style.css @@ -0,0 +1,45 @@ +.sheet-header { + min-width: 800px; + background: black; + color: white; + clear: both; + margin-bottom: 4px; +} +.sheet-colHead { + min-width: 600px; + background: black; + color: white; + clear: both; + margin-bottom: 4px; +} +.sheet-colHeadSmall { + + background: black; + color: white; + clear: both; + margin-bottom: 4px; +} +.sheet-inText { + border-style: solid; + border-color: gray; + border-width: 1px 1px 1px 1px; + clear: both; + margin-bottom: 4px; +} + +.sheet-skill { + border-style: solid; + border-color: black; + border-width: 1px 1px 1px 1px; +} + +.sheet-skill2 { + border-style: solid; + border-color: gray; + border-width: 1px 1px 1px 1px; +} +.sheet-checkDark { + border-style: solid; + border-color: black; + border-width: 1px 1px 1px 1px; +} \ No newline at end of file diff --git a/Mongoose_Traveller/MongooseTraveller.css b/Mongoose_Traveller/MongooseTraveller.css new file mode 100644 index 0000000000..d14c6e4a1d --- /dev/null +++ b/Mongoose_Traveller/MongooseTraveller.css @@ -0,0 +1 @@ +/* Nothing here yet */ diff --git a/Mongoose_Traveller/MongooseTraveller.html b/Mongoose_Traveller/MongooseTraveller.html new file mode 100644 index 0000000000..ef79b71727 --- /dev/null +++ b/Mongoose_Traveller/MongooseTraveller.html @@ -0,0 +1,45 @@ +Mongoose Traveller / 2300AD Char Sheet +
+CHARACTER INFO +
+CHARACTERISTICS +
+SKILLS +
+ +
+ + + + + + +
+ +
+ + + + + +
+ +
+ + + + + +
+ +
+ +
+WEAPONS +
+EQUIPMENT +
+FINANCES +
+
+
diff --git a/Numenera/Numenera.css b/Numenera/Numenera.css new file mode 100644 index 0000000000..4364622d1c --- /dev/null +++ b/Numenera/Numenera.css @@ -0,0 +1,58 @@ +.charsheet label { + display: inline-block; + width: 65px; + text-align: center; + font-size: 12px; + font-weight: ; + font-family: "Times New Roman"; + text-shadow: 0px 0px 0px #ff0000; + vertical-align: middle; +} +.charsheet .sheet-3colrowCust .sheet-col { + width: calc(33% - 4px); + margin-right: 5px; +} +.charsheet .sheet-4colrowCust .sheet-col { + width: calc(22% - 4px); + margin-right: 5px; +} +.charsheet input { + display: inline-block; + width: 165px; +} + +.sheet-col strong.sheet-dee { + font-size: 1em; + font-weight: bold; + padding-right: 1px; +} + +.charsheet input.sheet-short { + width: 35px; +} + +.charsheet { + background-image: url("http://freeseamlesstextures.com/images/17-worn-cardboard-background-thb.jpg"); + font-family: "Times New Roman"; +} + + +.charsheet table td, .charsheet table th { + font-size: 12px; + font-weight: bold; + font-family: "Times New Roman"; + text-align: center; + width: 0%; + border: 0px solid black; + padding: 0px; + vertical-align: middle; +} + +select.sheet-dtype { + width: 60px; + vertical-align: top; +} + +.charsheet textarea { + resize: none; +} diff --git a/Numenera/Numenera.html b/Numenera/Numenera.html new file mode 100644 index 0000000000..7d8e8c0401 --- /dev/null +++ b/Numenera/Numenera.html @@ -0,0 +1,290 @@ +
+ +
+
+
+ + + + + + + + + + + + + + +
+
+ +
+ IS A
+ +
+ WHO
+ +
+
+ +
+
+ + + + + + + + + +
+ +
+ +
+
+
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+ + + /
+ +
+ + + /
+ +
+ + + /
+ +
+
+ + + + + + + +


+
+ + + + + + +
1d6+
+
+ + + + + + +

RECOVERY ROLLS

+
+ + + + + + + + + +

  1 Action  

  10 Min.  

  1 Hour  

  10 Hours  
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

T

S

T

S

T

S

T

S

T

S

T

S

T

S

T

S

T

S

T

S

T

S

T

S

T

S

T

S

T

S
+
+
+
+
+
+ + + + + + + + + +
+

SPECIAL ABILITIES


+
+ +
+
+
+ + + + + + + + + + + + +
+

CYPHERS


+
+ +
+ +
+
+ + + + + + + + + +
+

Artifacts & Oddities


+
+ +
+
+
+ + + + + + + + + +
+

POSSESSIONS


+
+ +
+
+
diff --git a/Numenera/ReadMe.md b/Numenera/ReadMe.md new file mode 100644 index 0000000000..92ee7163eb --- /dev/null +++ b/Numenera/ReadMe.md @@ -0,0 +1,3 @@ +This sheet was fairly easy to design. Since Numenera is very streamlined and there aren't a whole lot of rolls or modifiers it was all about laying out the fields in similar way to PnP character sheet. + +I'm sure others will have ideas and methods on improvement, and I look forward to seeing them. diff --git a/Pathfinder/pathfinder.css b/Pathfinder/pathfinder.css new file mode 100644 index 0000000000..645a6b147a --- /dev/null +++ b/Pathfinder/pathfinder.css @@ -0,0 +1,108 @@ + +.charsheet label { + display: inline-block; + width: 75px; + text-align: right; +} + +.charsheet input { + background-color: transparent; + border-style: solid; + border-color: black; + border-width: 0px 0px 2px 0px; +} + +.charsheet input.sheet-inputbox { + background-color: transparent; + border-style: solid; + border-color: black; + border-width: 1px 1px 1px 1px; +} + +.even { + border: 1px solid black; + background-color: #AAA; +} + +.odd { + border: 1px solid black; + background-color: #DDD; +} + +fieldset { + display: none; +} + +.sheet-colorred { + display: inline-block; + text-align: center; +} +.sheet_barbarianlink:hover + div{ + overflow: auto; + height: auto; + display: block; + background-color: gray; + position: absolute; + text-align: left; +} + +.sheet_barbarianshowhide { + overflow: hidden; + height: 0px; + ddisplay: none; +} + +.sheet-col strong.sheet-dee { + font-size: 1.4em; + font-weight: bold; + padding-right: 4px; +} + +.charsheet input.sheet-short { + width: 3.5em; +} + +.charsheet table td.sheet-skillsbox { + font-size: 0.60em; + text-align: left; +} + +.charsheet { + background-color: white; + background-image: none; +} + +.charsheet table th { + font-size: 0.8em; + text-align: center; +} + +.charsheet table td.sheet-statlabel-big-gray { + background-color: gray; + color: white; + font-size: 0.9em; + text-align: center; +} + +.charsheet table td.sheet-statlabel-big { + background-color: black; + color: white; + font-size: 0.9em; + text-align: center; +} +.charsheet table td.sheet-statlabel { + background-color: black; + color: white; + font-size: 0.7em; + text-align: center; +} + +.charsheet table td { + font-weight: bold; + text-align: center; +} + +select.sheet-dtype { + width: 60px; + vertical-align: top; +} \ No newline at end of file diff --git a/Pathfinder/pathfinder.html b/Pathfinder/pathfinder.html index 93f4522d24..8b78803936 100644 --- a/Pathfinder/pathfinder.html +++ b/Pathfinder/pathfinder.html @@ -1,230 +1,789 @@ -
-
-

- -

-
+ +
+

+
 
Character Sheet
+

Character Name
+

Alignment
+

Player Name
+
+

Character Level
+

Deity
+

Homeland
+
+

Race
+

Size
+

Gender
+

Age
+

Height
+

Weight
+

Hair
+

Eyes
-
- -
- - - - - - - +
+
+
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ability NameAbility
Score
Ability
Modifier
Temp
Adjust
Temp
Modifier
STR
Strength
DEX
Dexterity
CON
Constitution
INT
Intelligence
WIS
Wisdom
CHA
Charisma
+
+ + + + + + + + + + + + +
HP
Hit Points

Total

DR

Wounds/Current HP

Nonlethal Damage
+ + + + + + + +
INITIATIVE
Modifier
=
Total
 
+
Dex
Modifier

Misc
Modifier
+
+ + + + + + + + + + + + + +
AC
Armor Class

Total
 
= 10 +



Armor
Bonus
+
Shield
Bonus
+
Dex
Modifier
+
Size
Modifier
+
Natural
Armor
+
Deflection
Modifier
+
Misc
Modifier
+
+ + + + + + + + +
TOUCH
Touch Armor Class
FLAT-FOOTED
Armor Class

Modifiers
+
+ Character Class and Levels (hover below for table) +
+ + + + + + + + + +
Class + + LevelHP
+
+
+
+
Barbarian
| +
Bard
| +
Cleric
| +
Druid
| +
Fighter
| +
Monk
| +
Paladin
| +
Ranger

+
Rogue
| +
Sorcerer
| +
Wizard
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Saving ThrowsTotalBase
Save
Ability
Modifier
Magic
Modifier
Misc
Modifier
Temp
Modifier

Modifiers
Fortitude
(Constitution)
= + + + +
Reflex
(Dexterity)
= + + + +
Will
(Wisdom)
= + + + +
+
+ + + + + + + +
Base Attack Bonus (BAB)
Spell
Resistance
+
+ + + + + + + + + +
CMB
Total
 
=
Base Attack
Bonus
+
Strength
Modifier
+ +
Size
Modifier

Modifiers

+
+ + + + + + + + + +
CMD
Total
 
=
Base Attack
Bonus
+
Strength
Modifier
+
Dexterity
Modifier
+ + 10
Size
Modifier
+
+ + + + +
Weapons
-
- - - - - -
- -
- - - - - - - -
- - - -
- -
- -
- -

Attributes

- - Modifier - Modifier - Modifier - Modifier - Modifier - Modifier - -
- - - -
- -
- - - feet - - - - -
- - - -
-
-
-

Saving Throws

- + - + - + - -
-
- -
- -
- -
-

Weapons

-
- Attack Bonus + Critical
- Type - - Range Ammunition Damage + + + + + + + + + + + + + + + + + + + + + + + +
WeaponAttack BonusCritical
TypeRangeAmmunitionDamage
- - -
-

Armor

-
- Item Bonus + Type - - Check Penalty -
Spell Failure% Weightlbs. Properties +
+ + + + +
AC Items
+ +
+ + + + + + + + + + + + + + + + + + + +
Item NameBonusTypeCheck PenaltySpell FailureWeightProperties
- -
+
+ + + + + + + + + + + + + + + + + +
ShieldBonusCheck PenaltySpell FailureWeightProperties
+
+ + + + +
+ + + + +
Gear
+ +
+ + + + + + + + + +
Item NameWt.
+
+
+ + + + +
Feats
+ +
+ + + + + + + +
Feat Name
+
+
+
+ + + + +
Spells
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Spells KnownSpell
Save DC
LevelSpells
Per Day
Bonus Spells
0
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
+ + + + +

Conditional Modifiers
+
+ +
+ + +
+
-
-

Skills

-
- Skill Total = Ability Mod - - + Ranks + Misc Mod -
-
-
-
-
-

Spells

- Spells Known
0
1
2
3 -
4
5
6
7 -
8
9 -
- -
-

----------

- Spells Save DC
0
1
2
3 -
4
5
6
7 -
8
9 -
- -
-

----------

- Spells Per Day
0
1
2
3 -
4
5
6
7 -
8
9 -
- -
-

----------

- Bonus Spells
----
1
2
3 -
4
5
6
7 -
8
9 -
-
-
+
+ + + + + -
-

O-level spells

-
- +
+ + + + + +
SPEED
Land

Base speed

With Armor

Temp Modifiers
  
Fly        Manuverability             Swim
 
Climb            Burrow
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SKILLS
Skill NamesTotal
Bonus
Ability
Mod.
RanksMisc.
Mod
Acrobatics= Dex++
Appraise= Int++
Bluff= Cha++
Climb= Str++
Diplomacy= Cha++
Disable Device*= Dex++
Disguise= Cha++
Escape Artist= Dex++
Fly= Dex++
Handle Animal*= Cha++
Heal= Wis++
Intimidate= Cha++
Knowledge (Arcana)= Int++
Knowledge (Dungeoneering)= Int++
Knowledge (Engineering)= Int++
Knowledge (Geography)= Int++
Knowledge (History)= Int++
Knowledge (Local)= Int++
Knowledge (Nature)= Int++
Knowledge (Nobility)= Int++
Knowledge (Planes)= Int++
Knowledge (Relgion)= Int++
Linguistics= Int++
Perception= Wis++
Ride= Dex++
Sense Motive= Wis++
Sleight of Hand= Dex++
Spellcraft= Int++
Stealth= Dex++
Survival= Wis++
Swim= Str++
Use Magic Device= Cha++
+ Craft
+
+ + +
Craft = Int++
-

1-level spells

-
- + Perform
+
+ + +
Perform = Cha++
-

2-level spells

-
- + Profession
+
+ + +
Profession = Wis++
-

3-level spells

-
- + Conditional Modifiers
+
+
-

4-level spells

-
- -
-

5-level spells

-
- -
-

6-level spells

-
- -
-

7-level spells

-
- -
-

8-level spells

-
- -
-

9-level spells

-
- -
-
-
-
-

Feats

-
- + Languages
+
+
- -
-

Gear

-
- + + Spells
+ Level 0 +
+
+
- -

Special Abilities

-
- +
+ Level 1 +
+
+
+
+ Level 2 +
+
+
+
+
+ Level 3 +
+
+
+
+
+ Level 4 +
+
+
+
+
+ Level 5 +
+
+
+
+
+ Level 6 +
+
+
+
+
+ Level 7 +
+
+
+
+
+ Level 8 +
+
+
+
+
+ Level 9 +
+
+
+
+
+ +
+
+
+ +Experience Points +
+

Game Date
+

Campaign Date
+

Experience
+
+
+
+Money +

CP
+

SP
+

GP
+

PP
+
diff --git a/Pathfinder/pathfinderpreview.jpg b/Pathfinder/pathfinderpreview.jpg new file mode 100644 index 0000000000..d756274a06 Binary files /dev/null and b/Pathfinder/pathfinderpreview.jpg differ diff --git a/Pathfinder/sheet.json b/Pathfinder/sheet.json new file mode 100644 index 0000000000..57c0da2c3b --- /dev/null +++ b/Pathfinder/sheet.json @@ -0,0 +1,7 @@ +{ + "html": "pathfinder.html", + "css": "pathfinder.css", + "authors": "Barry R. (original by Roll20 Team)", + "preview": "pathfinderpreview.png", + "instructions": "This sheet should appear similar to the sheet that appears in the pathfinder core rulebook." +} \ No newline at end of file diff --git a/README.md b/README.md index 549d1f296c..5ac6ba5da9 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,18 @@ Contributing If you want to help improve an existing sheet, just clone this repository, make your changes, and submit a pull request. If you would like to contribute a new sheet for the community to use, just clone this repository and create a new folder with the name of the game system that the sheet is for. Then send a pull request. If you have any questions or aren't familiar with Github or git in general, feel free to drop us a line at team@roll20.net and we can help you get set up. +**Creating a sheet.json File** + +When you are ready to submit your template for **public use**, create a `sheet.json` file in your sheet's folder (see the kitchensink folder for an example sheet.json file). The file has the following fields: + +* `html`: The name of the HTML file for the sheet (e.g. `kitchensink.html`) +* `css`: The name of the CSS file for the sheet (e.g. `kitchensink.css`) +* `authors`: A simple string telling who contributed toward the sheet (e.g. `Riley Dutton`) +* `preview`: The name of an image file which should be included in your sheet folder showing a preview/screenshot of the sheet (will be displayed in-app at 500x500 resolution) (e.g. `kitchensink.png`) +* `instructions`: Markdown-formatted instructions for using the sheet. If there are any particular setup steps, special rolls you want to make the player aware of, etc., this is the place to put that info. Try to be succinct. + +After we have reviewed your sheet if we approve it we will add it to the `approved.yaml` file in the root directory which will cause it to be available to everyone on the main Roll20 site. If we reject your sheet, we will comment on your Github commit and let you know what changes need to be made before it can be accepted. + Guidelines ========== diff --git a/WFRP-2nd-Ed/CustomPowerCardRolls.js b/WFRP-2nd-Ed/CustomPowerCardRolls.js new file mode 100644 index 0000000000..40bd8ceea5 --- /dev/null +++ b/WFRP-2nd-Ed/CustomPowerCardRolls.js @@ -0,0 +1,705 @@ +// VARIABLE & FUNCTION DECLARATIONS -- DO NOT ALTER!! +var PowerCardScript = PowerCardScript || {}; +var getBrightness = getBrightness || {}; +var hexDec = hexDec || {}; + +// USER CONFIGUATION +var POWERCARD_ROUNDED_CORNERS = true; +var POWERCARD_ROUNDED_INLINE_ROLLS = true; +var POWERCARD_BORDER_SIZE = 1; +var POWERCARD_BORDER_COLOR = "#000"; +var POWERCARD_USE_PLAYER_COLOR = true; + + +on("chat:message", function(msg) { + if (msg.type != "api") return; + + // Get the API Chat Command + msg.who = msg.who.replace(" (GM)", ""); + msg.content = msg.content.replace("(GM) ", ""); + var command = msg.content.split(" ", 1); + + // !roll --versus|WeaponSkill --charactername|@{selected|character_name} --tokenname|@{selected|token_name} --modifier|?{Attack Modifier|0} --type|Attack --weapon|Primary + + // DEFINE VARIABLES + var n = msg.content.split(" --"); + var parameters = {}; + var Tag = ""; + var Content = ""; + var RollObject = {}; + var operator = "<="; + + // CREATE OBJECT ARRAY + var a = 1; + while (n[a]) { + Tag = n[a].substring(0, n[a].indexOf("|")); + Content = n[a].substring(n[a].indexOf("|") + 1); + parameters[Tag] = Content; + a++; + } + + // Define RollObject Variables + RollObject.AttributeName = parameters.versus; + RollObject.AttributeValue = ""; + RollObject.CharacterName = parameters.charactername; + RollObject.DisplayName = parameters.tokenname; + RollObject.TestModifier = parameters.modifier; + RollObject.RollType = parameters.type; + RollObject.DamageAdd = Number("3"); + RollObject.WeaponName = "Placeholder"; + RollObject.PrimaryWeapon = true; if (parameters.weapon == "Secondary") {RollObject.PrimaryWeapon = false}; + RollObject.ImpactWeapon = false; + RollObject.RangedAttack = false; if ((RollObject.AttributeName == "BallisticSkill") && (RollObject.RollType == "Attack")) {RollObject.RangedAttack = true}; + RollObject.AmmoCount = 0; + RollObject.AmmoMax = 0; + RollObject.DiceRollExpression = "1d100"; + RollObject.DamageRollExpression = "1d10"; + RollObject.TestSuccess = "false"; + RollObject.HitLocation = ""; + RollObject.HitLocationToolTip = ""; + RollObject.DiceRollResultToolTip = ""; + RollObject.PowerCardContent = "" + + if (RollObject.RollType == "Attack") { + RollObject.PowerCardContent = "--desc --name|" + RollObject.DisplayName + " --leftsub|" + (RollObject.RangedAttack ? "Ranged Attack" : "Melee Attack") + " --rightsub|Half Action --custom_diceroll|"; + } else if (RollObject.RollType == "Parry") { + RollObject.PowerCardContent = "--desc --name|" + RollObject.DisplayName + " --leftsub|Parry" + " --rightsub|Reaction --custom_diceroll|"; + } else if (RollObject.RollType == "Dodge") { + RollObject.PowerCardContent = "--desc --name|" + RollObject.DisplayName + " --leftsub|Dodge" + " --rightsub|Reaction --custom_diceroll|"; + } else if (RollObject.RollType == "Attribute") { + RollObject.PowerCardContent = "--desc --name|" + RollObject.DisplayName + " --leftsub|"+ RollObject.AttributeName + "" + " --rightsub|Stat Test --custom_diceroll|"; + } + + var characters = findObjs({ _type: "character", name: RollObject.CharacterName }); + var character = characters.shift(); + + var rollDice = function (){ + sendChat("", "[[" + RollObject.DiceRollExpression + " ]]", function (m) { + var rolldata = m[0].inlinerolls[1]; + RollObject.RawDiceRoll = rolldata.results.rolls; + + sendChat("", "[[" + RollObject.DamageRollExpression + " ]]", function (d) { + var rolldata = d[0].inlinerolls[1]; + RollObject.RawDamageRoll = rolldata.results.rolls; + + sendChat("", "[[" + RollObject.DamageRollExpression + " ]]", function (d) { + var rolldata = d[0].inlinerolls[1]; + RollObject.RawImpactRoll = rolldata.results.rolls; + + rollResult(); + + }); + }); + }); + + + } + + if (command == "!roll") { + rollDice(); + } + + var rollResult = function() { + + RollObject.DiceRollResult = getResult(RollObject.RawDiceRoll); + + if (character) { + var attributes = findObjs({ _type: "attribute", _characterid: character.get('_id') }); + + _.each(attributes, function(obj) { + var attributeName = obj.get("name"); + + if (attributeName == RollObject.AttributeName) { + RollObject.AttributeValue = obj.get("current"); + } + + if (RollObject.RangedAttack == false) { + if (RollObject.PrimaryWeapon) { + if (attributeName == "MeleeWeapon") { + RollObject.WeaponName = obj.get("current"); + } + if (attributeName == "MeleeDamage") { + RollObject.DamageAdd = Number(obj.get("current")); + } + } else { + if (attributeName == "MeleeWeapon") { + RollObject.WeaponName = obj.get("max"); + } + if (attributeName == "MeleeDamage") { + RollObject.DamageAdd = Number(obj.get("max")); + } + } + } else { + if (RollObject.PrimaryWeapon) { + if (attributeName == "RangedWeapon") { + RollObject.WeaponName = obj.get("current"); + } + if (attributeName == "RangedDamage") { + RollObject.DamageAdd = Number(obj.get("current")); + } + } else { + if (attributeName == "RangedWeapon") { + RollObject.WeaponName = obj.get("max"); + } + if (attributeName == "RangedDamage") { + RollObject.DamageAdd = Number(obj.get("max")); + } + } + if (attributeName == "Ammo") { + RollObject.AmmoCount = Number(obj.get("current")); + RollObject.AmmoMax = Number(obj.get("max")); + } + } + }); + + } + + modifiedExpression = Number(RollObject.AttributeValue) + Number(RollObject.TestModifier); + + var result = null; + var difference = 0; + var degrees = 0; + var new_expression = 'result = (' + RollObject.DiceRollResult + ' ' + operator + ' ' + modifiedExpression + ');'; + + try { + eval(new_expression); + } catch (e) { + //log(e); + } + + try { + difference = Math.abs(RollObject.DiceRollResult - eval(modifiedExpression)); + } catch (e) { + //log(e); + } + + try { + degrees = Math.floor(difference / 10); + } catch (e) { + //log(e); + } + + if (result) { + RollObject.TestSuccess = true; + if(RollObject.RollType == "Attack") { + + var x = RollObject.DiceRollResult; + var y = x.toString(); + if (y.length == 2) { + var z = y.split("").reverse().join(""); + } else { + var z = y + "0"; + } + + var reverseRoll = Number(z); + + if(reverseRoll < 11) { + RollObject.HitLocation = "Head"; + RollObject.HitLocationToolTip = RollObject.DiceRollResult + " reversed is " + reverseRoll + "; 01-10 strikes Head location"; + } else if (reverseRoll < 26) { + RollObject.HitLocation = "Right Arm"; + RollObject.HitLocationToolTip = RollObject.DiceRollResult + " reversed is " + reverseRoll + "; 11-25 strikes Right Arm location"; + } else if (reverseRoll < 41) { + RollObject.HitLocation = "Left Arm"; + RollObject.HitLocationToolTip = RollObject.DiceRollResult + " reversed is " + reverseRoll + "; 26-40 strikes Left Arm location"; + } else if (reverseRoll < 81) { + RollObject.HitLocation = "Body"; + RollObject.HitLocationToolTip = RollObject.DiceRollResult + " reversed is " + reverseRoll + "; 41-80 strikes Body location"; + } else if (reverseRoll < 91) { + RollObject.HitLocation = "Right Leg"; + RollObject.HitLocationToolTip = RollObject.DiceRollResult + " reversed is " + reverseRoll + "; 81-90 strikes Right Leg location"; + } else if (reverseRoll < 101) { + RollObject.HitLocation = "Left Leg"; + RollObject.HitLocationToolTip = RollObject.DiceRollResult + " reversed is " + reverseRoll + "; 91-100 strikes Left Arm location"; + } + + if (RollObject.TestSuccess) { + RollObject.PowerCardContent += " --custom_dmgroll| "; + }; + } + } + + + if(RollObject.RangedAttack == true) { + reduceAmmo(character); + } + + RollObject.DegreesOfSuccess = (degrees + 1); + RollObject.DegreesOfSuccessToolTip = "Difference of " + difference; + + + RollObject.DiceRollResultToolTip = "Rolling 1d100(" + RollObject.DiceRollResult + ") versus " + RollObject.AttributeName + " (" + RollObject.AttributeValue + ") " + ( (RollObject.TestModifier > -1) ? " + " : "") + RollObject.TestModifier; + + RollObject.DamageRollResult = getResult(RollObject.RawDamageRoll) + RollObject.DamageRollTotal = RollObject.DamageRollResult + RollObject.DamageAdd; + RollObject.DamageRollTotalToolTip = "Rolling 1d10(" + RollObject.DamageRollResult + ") " + ((RollObject.DamageAdd > -1) ? "+ " : "- ") + Math.abs(RollObject.DamageAdd) + " = (" + RollObject.DamageRollTotal + ")"; + + if (RollObject.WeaponName == "Pistol") {RollObject.ImpactWeapon = true}; + RollObject.ImpactRollResult = getResult(RollObject.RawImpactRoll) + RollObject.ImpactRollTotal = RollObject.ImpactRollResult + RollObject.DamageAdd; + RollObject.ImpactRollTotalToolTip = "Rolling 1d10(" + RollObject.ImpactRollResult + ") " + ((RollObject.DamageAdd > -1) ? "+ " : "- ") + Math.abs(RollObject.DamageAdd) + " = (" + RollObject.ImpactRollTotal + ")"; + + createPowerCard(msg, RollObject); + } +}); + +var reduceAmmo = function(character) { + + var targetsMatched = findObjs({_type: "graphic", represents: character.get('_id')}); + if(targetsMatched.length === 0) { + sendChat(msg.who, "target " + character + " not found."); + } + + // Reduce the value of bar2 on the token by 1. + for(var x in targetsMatched) { + var target = targetsMatched[x]; + + if(target.get("bar2_value") !== "") { + target.set("bar2_value", (target.get("bar2_value") - 1)); + } + + } +}; + +PowerCardScript.buildInline = function (expression, rolls, crit) { + var InlineBorderRadius = (POWERCARD_ROUNDED_INLINE_ROLLS) ? 5 : 0; + var rollOut = '= max); + failRoll = failRoll || (value <= low); + rollOut += ''; + rollOut += value + '+'; + } + rollOut = rollOut.substring(0, rollOut.length - 1) + ')'; + } + + // ROLL.TYPE Math + var operator, operand; + if (r.type == 'M') { + rollOut += r.expr; + if (r.expr.length == 1) { + math = r.expr; + } else { + operator = ('' + r.expr).substring(0, 1); + operand = ('' + r.expr).substring(operator.search(/[\d(]/) === 0 ? 0 : 1); + } + + if (operand.search(/([\d+\-*/() d]|floor\(|ceil\()+\)?/g) === 0) { + operand = operand.split('floor').join('Math.floor'); + operand = operand.split('ceil').join('Math.ceil'); + operand = eval((operator == '-' ? '-' : '') + operand); + } else { + operand = parseInt(operand); + } + + switch (operator) { + default: + case '+': + case '-': + modTotal += operand; + break; + case '*': + modTotal *= operand; + break; + case '/': + modTotal /= operand; + break; + } + } + + if (r.type == 'G') { + // Do nothing... + } + } + } + rollOut += '" class="a inlinerollresult showtip tipsy-n'; + rollOut += (critRoll && failRoll ? ' importantroll' : (critRoll ? ' fullcrit' : (failRoll ? ' fullfail' : ''))) + '">' + modTotal + ''; + return rollOut; +}; + +// These functions determine the brightness of a html color hexcode. +// Copied from: http://blog.routydevelopment.com/2010/07/how-to-s... + +function getBrightness(hex) { + hex = hex.replace('#', ''); + var c_r = hexDec(hex.substr(0, 2)); + var c_g = hexDec(hex.substr(2, 2)); + var c_b = hexDec(hex.substr(4, 2)); + return ((c_r * 299) + (c_g * 587) + (c_b * 114)) / 1000; +} + + +function hexDec(hex_string) { + hex_string = (hex_string + '').replace(/[^a-f0-9]/gi, ''); + return parseInt(hex_string, 16); +} + +function createPowerCard (msg, RollObject) { + //Custom Variables + var critRoll = false; + var failRoll = false; + + // DEFINE VARIABLES + var n = RollObject.PowerCardContent.split(" --"); //Customised this line + var PowerCard = {}; + var DisplayCard = ""; + var NumberOfAttacks = 1; + var NumberOfDmgRolls = 1; + var Tag = ""; + var Content = ""; + + // CREATE POWERCARD OBJECT ARRAY + var a = 1; + while (n[a]) { + Tag = n[a].substring(0, n[a].indexOf("|")); + Content = n[a].substring(n[a].indexOf("|") + 1); + if (Tag.substring(0, 6).toLowerCase() == "attack") { + NumberOfAttacks = Tag.substring(6); + if (NumberOfAttacks === 0 || !NumberOfAttacks) NumberOfAttacks = 1; + Tag = "attack"; + } + if (Tag.substring(0, 6).toLowerCase() == "damage") { + NumberOfDmgRolls = Tag.substring(6); + if (NumberOfDmgRolls === 0 || !NumberOfDmgRolls) NumberOfDmgRolls = 1; + Tag = "damage"; + } + PowerCard[Tag] = Content; + a++; + } + + // CREATE TITLE STYLE + var TitleStyle = " font-family: Georgia; font-size: large; font-weight: normal; text-align: center; vertical-align: middle; padding: 5px 0px; margin-top: 0.2em; border: " + POWERCARD_BORDER_SIZE + "px solid " + POWERCARD_BORDER_COLOR + ";"; + + // ROUNDED CORNERS ON TOP OF POWER CARD + TitleStyle += (POWERCARD_ROUNDED_CORNERS) ? " border-radius: 10px 10px 0px 0px;" : ""; + + // LIST OF PRE-SET TITLE TEXT & BACKGROUND COLORS + var AtWill = " color: #FFF; background-color: #040;"; + var Encounter = " color: #FFF; background-color: #400;"; + var Daily = " color: #FFF; background-color: #444;"; + var Item = " color: #FFF; background-color: #e58900;"; + var Recharge = " color: #FFF; background-color: #004;"; + + // CHECK FOR PRESET TITLE COLORS + if (!POWERCARD_USE_PLAYER_COLOR) { + if (PowerCard.usage !== undefined && PowerCard.txcolor === undefined && PowerCard.bgcolor === undefined) { + // PRESET TITLE COLORS + TitleStyle += AtWill; + if (PowerCard.usage.toLowerCase() == "encounter") TitleStyle += Encounter; + if (PowerCard.usage.toLowerCase() == "daily") TitleStyle += Daily; + if (PowerCard.usage.toLowerCase() == "item") TitleStyle += Item; + if (PowerCard.usage.toLowerCase().substring(0, 8) == "recharge") TitleStyle += Recharge; + } else { + // CUSTOM TITLECARD TEXT & BACKGROUND COLORS + TitleStyle += (PowerCard.txcolor !== undefined) ? " color: " + PowerCard.txcolor + ";" : " color: #FFF;"; + TitleStyle += (PowerCard.bgcolor !== undefined) ? " background-color: " + PowerCard.bgcolor + ";" : " background-color: #040;"; + } + } else { + // SET TITLE BGCOLOR TO PLAYER COLOR --- OVERRIDES ALL OTHER COLOR OPTIONS --- + var PlayerBGColor = getObj("player", msg.playerid).get("color"); + var PlayerTXColor = "#000"; + if (getBrightness(PlayerBGColor) < 50) { + PlayerTXColor = "#FFF"; + } + TitleStyle += " color: " + PlayerTXColor + "; background-color: " + PlayerBGColor + ";"; + } + + // DEFINE .leftsub and .rightsub + if (PowerCard.leftsub === undefined) PowerCard.leftsub = (PowerCard.usage !== undefined) ? PowerCard.usage : ""; + if (PowerCard.rightsub === undefined) PowerCard.rightsub = (PowerCard.action !== undefined) ? PowerCard.action : ""; + var PowerCardDiamond = (PowerCard.leftsub == "" || PowerCard.rightsub == "") ? "" : " ♦ "; + + // BEGIN DISPLAYCARD CREATION + DisplayCard += "
" + PowerCard.name; + DisplayCard += (PowerCard.leftsub !== "" || PowerCard.rightsub !== "") ? "
" + PowerCard.leftsub + PowerCardDiamond + PowerCard.rightsub + "
" : "
"; + + // ROW STYLE VARIABLES + var OddRow = " background-color: #CEC7B6; color: #000;"; + var EvenRow = " background-color: #B6AB91; color: #000;"; + var RowStyle = " padding: 5px; border-left: " + POWERCARD_BORDER_SIZE + "px solid " + POWERCARD_BORDER_COLOR + "; border-right: " + POWERCARD_BORDER_SIZE + "px solid " + POWERCARD_BORDER_COLOR + "; border-radius: 0px;"; + var RowBackground = OddRow; + var RowNumber = 1; + var Indent = 0; + var KeyCount = 0; + + // KEY LOOP + var Keys = Object.keys(PowerCard); + var ReservedTags = "attack, damage, custom_diceroll, custom_dmgroll"; //Note - Have to add in the custom tags here. + var IgnoredTags = "emote, name, usage, action, defense, dmgtype, txcolor, bgcolor, leftsub, rightsub, ddn, desc, crit"; + while (KeyCount < Keys.length) { + Tag = Keys[KeyCount]; + Content = PowerCard[Keys[KeyCount]]; + if (Tag.charAt(0) === "^") { + Indent = (parseInt(Tag.charAt(1)) > 0) ? Tag.charAt(1) : 1; + Tag = (parseInt(Tag.charAt(1)) > 0) ? Tag.substring(2) : Tag.substring(1); + RowStyle += " padding-left: " + (Indent * 1.5) + "em;"; + } + + // CHECK FOR RESERVED & IGNORED TAGS + if (ReservedTags.indexOf(Tag) != -1) { + // ATTACK ROLLS + if (Tag.toLowerCase() == "attack") { + var AttackMessage = PowerCard.attack.substring(PowerCard.attack.indexOf("]]") + 2); + var AttackNumber = parseInt(PowerCard.attack.slice(PowerCard.attack.indexOf("[[") + 2, PowerCard.attack.indexOf("]]"))); + + for (var AttackCount = 0; AttackCount < NumberOfAttacks; AttackCount++) { + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + if (PowerCard.ddn === undefined) { + DisplayCard += "
$[[" + AttackNumber + "]] vs " + PowerCard.defense + AttackMessage + "
"; + } else { + DisplayCard += "
$[[" + AttackNumber + "]]" + AttackMessage + " vs Armor Class
"; + } + if (NumberOfAttacks > 1 && PowerCard.ddn === undefined) AttackMessage = ""; + } + } + + // Custom Dice Rolls + if (Tag.toLowerCase() == "custom_diceroll") { + critRoll = false; + failRoll = false; + if (RollObject.DiceRollResult > 95) {failRoll = true}; + if (RollObject.DiceRollResult < 6) {critRoll = true}; + + if (RollObject.RollType == "Attack") { + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
Weapon: " + RollObject.WeaponName + "
"; + } else if (RollObject.RollType == "Attribute") { + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
" + RollObject.AttributeName + ": " + RollObject.AttributeValue + "
"; + } + + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
" + ((RollObject.RollType == "Attack") ? "Attack" : "Skill") + " Modifier: " + ( (RollObject.TestModifier>0) ? "+" : "") + RollObject.TestModifier + "
"; + + if (RollObject.RangedAttack == true) { + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
Ammo: " + RollObject.AmmoCount + "/" + RollObject.AmmoMax + " subtract 1
"; + } + + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
Rolled a " + RollObject.DiceRollResult + "
"; + + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
" + ((RollObject.RollType == "Attack") ? (RollObject.TestSuccess ? 'Hit' : 'Missed') : (RollObject.TestSuccess ? 'Succeeded' : 'Failed')) + " with " + RollObject.DegreesOfSuccess + " degrees of " + (RollObject.TestSuccess ? 'success' : 'failure') + "
"; + + } + + // Custom Damage Roll + if (Tag.toLowerCase() == "custom_dmgroll") { + critRoll = false; + failRoll = false; + if (RollObject.DamageRollResult == 1) {failRoll = true}; + if (RollObject.DamageRollResult == 10) {critRoll = true}; + + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
Damage: " + "1d10 " + ((RollObject.DamageAdd > -1) ? "+ " : "- ") + Math.abs(RollObject.DamageAdd) + "
"; + + if (RollObject.ImpactWeapon == true) { + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
Qualities: " + "Impact" + "
"; + } + + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
Target takes " + RollObject.DamageRollTotal + " damage to the " + RollObject.HitLocation + "" + "
"; + + if (RollObject.ImpactWeapon == true) { + critRoll = false; + failRoll = false; + if (RollObject.ImpactRollResult == 1) {failRoll = true}; + if (RollObject.ImpactRollResult == 10) {critRoll = true}; + + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
" + "- or - " + "
"; + + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
Target takes " + RollObject.ImpactRollTotal + " damage to the " + RollObject.HitLocation + "" + "
"; + } + + } + + // DAMAGE ROLLS + if (Tag.toLowerCase() == "damage") { + var DamageMessage = PowerCard.damage.substring(PowerCard.damage.indexOf("]]") + 2); + var DamageNumber = parseInt(PowerCard.damage.slice(PowerCard.damage.indexOf("[[") + 2, PowerCard.damage.indexOf("]]"))); + if (PowerCard.dmgtype === undefined) PowerCard.dmgtype = ""; + for (var DamageCount = 0; DamageCount < NumberOfDmgRolls; DamageCount++) { + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
$[[" + DamageNumber + "]] " + PowerCard.dmgtype + " " + DamageMessage + "
"; + } + } + } else if (IgnoredTags.indexOf(Tag.toLowerCase()) != -1) { + // Do nothing + } else { + RowBackground = (RowNumber % 2 == 1) ? OddRow : EvenRow; + RowNumber += 1; + DisplayCard += "
" + Tag + ": " + Content + "
"; + } + KeyCount++; + } + + // ADD ROUNDED CORNERS & BORDER TO BOTTOM OF POWER CARD + if (POWERCARD_ROUNDED_CORNERS && KeyCount == (Keys.length)) DisplayCard = DisplayCard.replace(/border-radius: 0px;(?!.*border-radius: 0px;)/g, "border-radius: 0px 0px 10px 10px; border-bottom: " + POWERCARD_BORDER_SIZE + "px solid " + POWERCARD_BORDER_COLOR + ";"); + if (!POWERCARD_ROUNDED_CORNERS && POWERCARD_BORDER_SIZE) DisplayCard = DisplayCard.replace(/border-radius: 0px;(?!.*border-radius: 0px;)/g, "border-bottom: " + POWERCARD_BORDER_SIZE + "px solid " + POWERCARD_BORDER_COLOR + ";"); + // INLINE ROLLS REPLACEMENT + var Count = 0; + if (msg.inlinerolls !== undefined) { + while (Count < msg.inlinerolls.length) { + // Replace inline roll placeholder in DisplayCard + var numCopies = DisplayCard.split("$[[" + Count + "]]").length - 1; + for (var i = 0; i < numCopies; i++) { + sendChat("", Count + " [[" + msg.inlinerolls[Count].expression + " ]]", function (m) { + var idx = parseInt(m[0].content.split(" ")[0]); + var rolldata = m[0].inlinerolls[1]; + var inlineroll = PowerCardScript.buildInline( + rolldata.expression, + rolldata.results.rolls, + PowerCard.crit + ); + DisplayCard = DisplayCard.replace("$[[" + idx + "]]", inlineroll); + if (DisplayCard.search(/\$\[\[\d+\]\]/g) == -1) { + // SEND OUTPUT TO CHAT + if (PowerCard.emote !== undefined) sendChat(msg.who, "/emas " + PowerCard.emote); + if (PowerCard.desc !== undefined) sendChat("", "/desc "); + sendChat("", "/direct " + DisplayCard); + } + }); + } + Count += 1; + } + } else { + if (PowerCard.emote !== undefined) sendChat(msg.who, "/emas " + PowerCard.emote); + if (PowerCard.desc !== undefined) sendChat("", "/desc "); + sendChat("", "/direct " + DisplayCard); + } + +} + + +var getResult = function (rolls) { + var modTotal = 0; + var math; + + for (var k in rolls) { + if (rolls.hasOwnProperty(k)) { + var r = rolls[k]; + // ROLL.TYPE Roll + if (r.type == 'R') { + for (var m = 0; m < r.results.length; m++) { + var value = r.results[m].v; + var drop = r.results[m].d; + if (!drop) { + switch (math) { + default: + case '+': + modTotal += value; + math = ''; + break; + case '-': + modTotal -= value; + math = ''; + break; + case '*': + modTotal *= value; + math = ''; + break; + case '/': + modTotal /= value; + math = ''; + break; + } + } + } + } + + // ROLL.TYPE Math + var operator, operand; + if (r.type == 'M') { + if (r.expr.length == 1) { + math = r.expr; + } else { + operator = ('' + r.expr).substring(0, 1); + operand = ('' + r.expr).substring(operator.search(/[\d(]/) === 0 ? 0 : 1); + } + + if (operand.search(/([\d+\-*/() d]|floor\(|ceil\()+\)?/g) === 0) { + operand = operand.split('floor').join('Math.floor'); + operand = operand.split('ceil').join('Math.ceil'); + operand = eval((operator == '-' ? '-' : '') + operand); + } else { + operand = parseInt(operand); + } + + switch (operator) { + default: + case '+': + case '-': + modTotal += operand; + break; + case '*': + modTotal *= operand; + break; + case '/': + modTotal /= operand; + break; + } + } + + if (r.type == 'G') { + // Do nothing... + } + + if (r.type == 'V') { + // Do nothing... + } + } + } + return modTotal; +}; diff --git a/WFRP-2nd-Ed/Readme.txt b/WFRP-2nd-Ed/Readme.txt new file mode 100644 index 0000000000..dfb730c204 --- /dev/null +++ b/WFRP-2nd-Ed/Readme.txt @@ -0,0 +1 @@ +This needs to be used with the API script in the same folder which has custom rolls based on the PowerCard API by Honey Badger and RollResult by someone else. diff --git a/WFRP-2nd-Ed/WFRP-2nd-Ed.css b/WFRP-2nd-Ed/WFRP-2nd-Ed.css new file mode 100644 index 0000000000..adc533b205 --- /dev/null +++ b/WFRP-2nd-Ed/WFRP-2nd-Ed.css @@ -0,0 +1,212 @@ +.charsheet .sheet-3colrowCust .sheet-col { + width: calc(33% - 4px); + margin-right: 5px; +} + +.sheet-col:last-child { + margin-right: 0!important; +} + +.charsheet label { + display: inline-block; + width: 75px; + text-align: right; +} + +.charsheet input[type='number'], .charsheet input[type='text'] { + display: inline-block; + width: 165px; +} + +.charsheet { + background-color: white; +} + +/* baseinfo - Top section with name, class, etc */ + +.sheet-baseinfo { + display: inline-block; + width: 149px; + margin-right: 3px; +} + +.sheet-baseinfo label, .sheet-baseinfo input, .sheet-baseinfo select { + display: block; + text-align: left; + width: 100%; + margin: 0; +} + +.sheet-baseinfo label { + border-top: 1px solid black; + width: 92%; +} + +.sheet-baseinfo.sheet-number { + width: 39px; + margin-right: 10px; +} + +.sheet-baseinfo.sheet-short { + width: 60px; +} + +.sheet-baseinfo.sheet-medium { + width: 100px; +} + +/* statblock */ +.sheet-statblock { + margin-bottom: 10px; +} + +.sheet-statblock:last-child { + margin-bottom: 0!important; +} + +.sheet-statblock input[type='number'], .sheet-statblock input[type='text'] { + display: inline-block; + border: 1px solid #ccc; + padding: 4px; + height: 28px; + width: 50px; + font-size: 13px; + line-height: 18px; + margin: 0; +} + +.sheet-statblock label { + padding: 5px 0; + font-size: 13px; + line-height: 18px; + height: 28px; + margin: 0; + text-align: left; + width: 100%; +} + +.sheet-statblock .sheet-black label { + color: white; +} + +.sheet-statblock input, .sheet-statblock select, .sheet-statblock textarea { + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.sheet-statblock h2 { + width: 100%; + background-color: black; + color: white; + text-align: center; +} + +.sheet-statblock .sheet-rowitem { + height: 40px; + margin: 2px 0; +} + +.sheet-statblock .sheet-tinyitem, +.sheet-statblock .sheet-smallitem, +.sheet-statblock .sheet-meditem, +.sheet-statblock .sheet-medlargeitem, +.sheet-statblock .sheet-largeitem, +.sheet-statblock textarea { + display: inline-block; + padding: 6px 5px; + width: calc(80% - 13px); + height: 28px; + vertical-align: middle; + margin: 0 -2px; + text-align: left; +} + +.sheet-statblock textarea { + width: 100%; + height: 50px; + font-size: 13px; + line-height: 18px; +} + +.sheet-statblock textarea.sheet-small { + height: 32px; +} + +.sheet-statblock input[type='checkbox'] { + height: 28px; +} + +.sheet-statblock .sheet-tinyitem input[type='number'], .sheet-statblock .sheet-tinyitem input[type='text'], .sheet-statblock .sheet-tinyitem select, +.sheet-statblock .sheet-smallitem input[type='number'], .sheet-statblock .sheet-smallitem input[type='text'], .sheet-statblock .sheet-smallitem select, +.sheet-statblock .sheet-meditem input[type='number'], .sheet-statblock .sheet-meditem input[type='text'], .sheet-statblock .sheet-meditem select, +.sheet-statblock .sheet-medlargeitem input[type='number'], .sheet-statblock .sheet-medlargeitem input[type='text'], .sheet-statblock .sheet-medlargeitem select, +.sheet-statblock .sheet-largeitem input[type='number'], .sheet-statblock .sheet-largeitem input[type='text'], .sheet-statblock .sheet-largeitem select { + width: 100%; +} + +.sheet-statblock .sheet-tinyitem { + width: calc(15% - 10px); + padding: 6px 3px; +} + +.sheet-statblock .sheet-smallitem { + width: calc(20% - 4px); +} + +.sheet-statblock .sheet-meditem { + width: calc(33% - 9px); +} + +.sheet-statblock .sheet-medlargeitem { + width: calc(40% - 8px); +} + +.sheet-statblock .sheet-largeitem { + width: calc(50% - 8px); +} + +.sheet-statblock .sheet-halfblack { + background: linear-gradient(to right, white 50%, black 50%); +} +.sheet-statblock .sheet-black { + background: black; + color: white; +} + +.sheet-statblock .sheet-headerrowitem .sheet-tinyitem, +.sheet-statblock .sheet-headerrowitem .sheet-smallitem, +.sheet-statblock .sheet-headerrowitem .sheet-meditem, +.sheet-statblock .sheet-headerrowitem .sheet-medlargeitem, +.sheet-statblock .sheet-headerrowitem .sheet-largeitem { + padding: 0 5px; + height: 20px; +} + +.sheet-statblock .sheet-headerrowitem .sheet-tinyitem { + padding: 6px 3px; +} + +.sheet-statblock .sheet-headerrowitem label { + padding: 0; + font-size: 9px; + line-height: 9px; + font-weight: normal; + word-wrap:break-word; +} + +/* Fixes */ + +input[type='number'] { + -moz-appearance:textfield; +} + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +textarea { + resize: none; +} diff --git a/WFRP-2nd-Ed/WFRP-2nd-Ed.html b/WFRP-2nd-Ed/WFRP-2nd-Ed.html new file mode 100644 index 0000000000..895f5715fd --- /dev/null +++ b/WFRP-2nd-Ed/WFRP-2nd-Ed.html @@ -0,0 +1,868 @@ +
+ +
+ +
+
+ +
+ + +
+ +
+ + +
+
+
+ + +
+
+
+
+
+ +
+
+ +
+ +
+ +
+ + +
+ + +
+

Characteristics

+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + +
+

Initiative

+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + +
+

Fate Points

+ +
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+ + +
+ + +
+

Health

+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+ + +
+

Defenses

+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
+

Movement

+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ + +
+ +
+

Skills

+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+ +
+ +
+ + +
+
+

Talents

+
+ +
+
+
+ + + + +
diff --git a/approved.yaml b/approved.yaml new file mode 100644 index 0000000000..abad353935 --- /dev/null +++ b/approved.yaml @@ -0,0 +1,4 @@ +# Contributors: Do not edit this file. We will add your game when it has been approved. +kitchensink: +- kitchensink +- Kitchen Sink \ No newline at end of file diff --git a/kitchensink/kitchensink.html b/kitchensink/kitchensink.html index 4e344e2db7..b9242489c6 100644 --- a/kitchensink/kitchensink.html +++ b/kitchensink/kitchensink.html @@ -2,7 +2,7 @@
- + diff --git a/kitchensink/kitchensink.png b/kitchensink/kitchensink.png new file mode 100644 index 0000000000..4087cbed67 Binary files /dev/null and b/kitchensink/kitchensink.png differ diff --git a/kitchensink/sheet.json b/kitchensink/sheet.json new file mode 100644 index 0000000000..05a2c4d916 --- /dev/null +++ b/kitchensink/sheet.json @@ -0,0 +1,7 @@ +{ + "html": "kitchensink.html", + "css": "kitchensink.css", + "authors": "Roll20 Team (@roll20app)", + "preview": "kitchensink.png", + "instructions": "**This is a test**\n\nYou can put Markdown-formatted instructions here for how to use your sheet. Please try to keep it moderately-short (500 characters or less is preferred)." +} \ No newline at end of file