Initial commit of Elemental character sheet (New Sheet) (#4968)

* Initial commit of Elemental character sheet

* Removed Table layout in top left corner of sheet. Began adjusting the equipment lists for better space usage. Added logo to images.

* Updated Logo and renamed.

* - Made some layout adjustments.
- Added more fields for Weapon and Armor information.
- Added Bonuses/Impairments with injuries that calc current health

* Updated translation information

* Updated image

* Redesign of the character sheet to support tabs

* update screenshot for sheet
This commit is contained in:
Shawn P Conlin
2019-04-22 23:32:51 -05:00
committed by Cassie Levett
parent 91f2ee63aa
commit 92548739bf
7 changed files with 1381 additions and 0 deletions
+350
View File
@@ -0,0 +1,350 @@
.sheet-container {
position:relative;
width: 800px;
background-color: black;
color: green;
position: relative;
display: inline-block;
border: 4px double gold;
border-radius:15px;
padding: 10px;
}
.sheet-header {
padding-bottom: 10px;
border-bottom: 4px double gold;
}
.sheet-tabs {
margin-top: 10px;
position: relative;
width: 800px; }
.sheet-tabs::after {
clear: both;
content: '';
display: block; }
.sheet-tabs .sheet-tab {
width: 800px; }
.sheet-tabs .sheet-tab:nth-of-type(2) > input[type="radio"], .sheet-tabs .sheet-tab:nth-of-type(2) > .sheet-tab-label {
margin-left: 20%; }
.sheet-tabs .sheet-tab:nth-of-type(3) > input[type="radio"], .sheet-tabs .sheet-tab:nth-of-type(3) > .sheet-tab-label {
margin-left: 40%; }
.sheet-tabs .sheet-tab:nth-of-type(4) > input[type="radio"], .sheet-tabs .sheet-tab:nth-of-type(4) > .sheet-tab-label {
margin-left: 60%; }
.sheet-tabs .sheet-tab:nth-of-type(5) > input[type="radio"], .sheet-tabs .sheet-tab:nth-of-type(5) > .sheet-tab-label {
margin-left: 80%; }
.sheet-tabs .sheet-tab > input[type="radio"] {
height: 30px;
margin: 0;
opacity: 0;
position: absolute;
top: 0;
width: 20%;
z-index: 1; }
.sheet-tabs .sheet-tab > input[type="radio"]:hover ~ .sheet-tab-label {
background: #111111;
color: white;
border-bottom-color: gold;
}
.sheet-tabs .sheet-tab > .sheet-tab-label {
align-items: center;
background: #555555;
border-radius: 6px 6px 0 0;
border: 2px solid gold;
color: white;
display: flex;
font-size: 11px;
font-variant: small-caps;
font-weight: bold;
height: 30px;
justify-content: center;
margin: 0;
position: absolute;
text-transform: uppercase;
top: 0;
width: 20%;
border-left-color: gold;
border-top-color: gold;
border-right-color: gold;
border-bottom-color: gold;
}
.sheet-tabs .sheet-tab > input[type="radio"]:checked ~ .sheet-tab-label {
background: black;
border-color: gold;
border-bottom-color: black;
color: green;
}
.sheet-tabs .sheet-tab > input[type="radio"]:checked {
cursor: auto; }
.sheet-tabs .sheet-tab > input[type="radio"]:checked ~ .sheet-tab-content {
display: block;
}
.sheet-tabs .sheet-tab .sheet-tab-content {
display: none;
min-height: 300px;
padding-top: 32px;
width: 100%;
z-index: 10;
}
.sheet-content {
padding: 5px;
border: 2px solid gold;
border-radius: 0 10px 10px 10px;
min-height:300px;
}
.sheet-label {
float: left;
width: 50px;
color: white;
font-weight:bold;
font-size: 12px;
height: 12px;
}
.sheet-input {
float: left;
width: calc(100% - 75px);
}
.sheet-heading {
font-size: 1.5em;
font-weight:bold;
border:0px;
border-radius:0px;
font-variant: small-caps;
}
.sheet-smallblock {
margin: 5px;
float: left;
}
.sheet-block {
background: #333333;
border-radius:15px;
border: 1px solid gold;
padding: 5px;
color: lightgrey;
min-height: 50px;
text-align: center;
}
.sheet-block input {
font-size: 12px;
line-height:15px;
height: 15px;
margin-bottom:5px;
}
.sheet-block select {
font-size: 12px;
line-height:15px;
height: 15px;
margin-bottom:5px;
padding: 0;
}
.sheet-block option:disabled {
font-weight: bold;
}
/* Hide actual radio */
.sheet-block input[type="radio"] {
opacity: 0;
width: 16px;
height: 16px;
position: relative;
top: 5px;
left: 6px;
margin: -10px;
cursor: pointer;
z-index: 1;
}
/* Fake radio */
.sheet-block input[type="radio"] + span::before {
margin-right: 4px;
border: solid 1px #a8a8a8;
line-height: 14px;
text-align: center;
display: inline-block;
vertical-align: middle;
box-shadow: 0 0 2px #ccc;
background: #f6f6f6;
background: radial-gradient(black, black);
content: "•";
width: 12px;
height: 12px;
font-size: 24px;
border-radius: 50%;
}
/* Remove dot from all radios _after_ selected one */
.sheet-block input[type="radio"]:checked ~ input[type="radio"] + span::before {
content: "";
}
table.sheet-xp {
width: 250px;
}
table.sheet-xp th{
text-align: center;
font-weight:bold;
border:1px solid gold;
border-radius:15px;
}
table.sheet-xp td{
text-align: center;
border:1px solid gold;
border-radius:15px;
padding:5px;
color: white;
}
.sheet-attrname {
font-weight:bold;
font-size: 16px;
width:145px;
background:transparent;
border:0px;
color:White;
}
.sheet-skillblock {
margin-left:20px;
}
.sheet-top {
border-bottom: 2px double gold;
display: inline-block;
width:100%;
padding-bottom: 5px;
margin-bottom: 5px;
}
.sheet-blocklabel {
float: left;
font-weight:bold;
background:transparent;
border:0px;
color:White;
height: 100%;
vertical-align: middle;
}
.sheet-rolltemplate-basic div.sheet-template-container {
background: black;
color: white;
border: 2px solid gold !important;
border-radius: 10px;
}
.sheet-rolltemplate-basic .sheet-template-header {
color: green;
padding: 2px;
border-bottom: 1px solid gold;
line-height: 1.6em;
font-size: 1.2em;
font-weight: bold;
font-variant: small-caps;
text-align: center;
}
.sheet-rolltemplate-basic div {
padding: 5px;
border-bottom: 1px solid gold;
}
.sheet-rolltemplate-basic .inlinerollresult {
display: inline-block;
min-width: 1.5em;
text-align: center;
border: 1px solid gold;
border-radius: 5px;
background: #333333;
}
.sheet-rolltemplate-basic .inlinerollresult.fullcrit {
border: 1px solid gold;
background: green;
}
.sheet-rolltemplate-basic .inlinerollresult.fullfail {
border: 1px solid gold;
background: red;
}
.sheet-rolltemplate-basic .inlinerollresult.importantroll {
border: 1px solid gold;
background: blue;
}
.sheet-rolltemplate-stat div.sheet-template-container {
background: black;
color: white;
border: 2px solid gold !important;
border-radius: 10px;
}
.sheet-rolltemplate-stat .sheet-template-header {
color: green;
padding: 2px;
border-bottom: 1px solid gold;
line-height: 1.6em;
font-size: 1.2em;
font-weight: bold;
font-variant: small-caps;
text-align: center;
}
.sheet-rolltemplate-stat div {
padding: 5px;
border-bottom: 1px solid gold;
}
.sheet-rolltemplate-stat .inlinerollresult {
display: inline-block;
min-width: 1.5em;
text-align: center;
border: 1px solid gold;
border-radius: 5px;
background: #333333;
}
.sheet-rolltemplate-stat .inlinerollresult.fullfail {
border: 1px solid gold;
background: #333333;
}
.sheet-rolltemplate-stat .inlinerollresult.fullcrit {
border: 1px solid gold;
background: #333333;
}
.sheet-rolltemplate-stat .inlinerollresult.importantroll {
border: 1px solid gold;
background: #333333;
}
.sheet-rollbutton {
background: gold;
color: black;
border: 0;
cursor: pointer;
border-radius: 10px;
}
.sheet-derstat {
width: 35px;
background: transparent;
color: white;
border: 0;
text-align: center;
}
+763
View File
@@ -0,0 +1,763 @@
<div class='sheet-container'>
<div class='sheet-header'>
<div class='sheet-2colrow'>
<div class='sheet-col'>
<div class="sheet-block">
<div class="row">
<label class='sheet-label' data-i18n="name-u">Name:</label>
<input type="text" class='sheet-input' name="attr_character_name" placeholder="Character Name" />
</div>
<div class="row">
<label class='sheet-label' data-i18n="title-u">Title:</label>
<input type="text" class='sheet-input' name="attr_character_title" placeholder="Character Title" />
</div>
<div class="row">
<label class='sheet-label' data-i18n="species-u">Species:</label>
<input type="text" class='sheet-input' name="attr_character_race" placeholder="Race/Species" />
</div>
<br />
</div>
</div>
<div class='sheet-col'>
<img style="padding-top:15px;" src="https://github.com/SPConlin/roll20-character-sheets/blob/elemental/Elemental/images/logo.png?raw=true" />
</div>
</div>
</div>
<div class="sheet-tabs">
<div class="sheet-tab sheet-tab-core">
<input type="radio" name="attr_tab" value="core" checked="checked">
<span class="sheet-tab-label">Core</span>
<div class="sheet-tab-content">
<div class="sheet-content">
<div class='sheet-2colrow'>
<div class='sheet-col'>
<div class="sheet-heading">Experience Points</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 82px;" data-i18n="total-u">Total</span>
<span class="sheet-blocklabel" style="width: 84px;" data-i18n="spent-u">Spent</span>
<span class="sheet-blocklabel" style="width: 82px;" data-i18n="sacrifice-u">Sacrificed</span>
<span class="sheet-blocklabel" style="width: 80px;" data-i18n="reserve-u">Reserve</span>
</div>
<input type="number" class="sheet-number" style="width: 80px;" name="attr_xp_total" placeholder="0" />
<input type="number" class="sheet-derstat" style="width: 80px;" name="attr_xp_spent" value="0" readonly />
<input type="number" class="sheet-number" style="width: 80px;" name="attr_xp_sacrificed" placeholder="0" />
<input type="number" class="sheet-derstat" style="width: 80px;" name="attr_xp_reserve" value="0" readonly />
</div>
<br />
<div class="sheet-heading" data-i18n="attrskill-u">Attributes & Skills</div>
<div class="sheet-block">
<button type="roll" class="sheet-rollbutton" name="roll_agi" value="&{template:basic} {{type= Attribute}} {{name= Agility}} {{roll= [[1d6+@{agi}]]}} {{explode= [[1d6]]}}"></button>
<input type="text" style="width:275px;" class="sheet-attrname" data-i18n="agi-u" value="Agility" readonly />
<input type="number" class="sheet-number" name="attr_agi" value="0" />
<input type="hidden" name="attr_agi_xp_used" value="0" />
<input type="hidden" name="attr_agiskill_xp_used" value="0" />
<div class="sheet-skillblock">
<fieldset class="repeating_agiskills">
<button type="roll" class="sheet-rollbutton" name="roll_agi_skill" value="&{template:basic} {{type= Skill}} {{name= @{agi_skill} @{agi_skill_spec} }} {{roll= [[1d6 + @{agi} + @{agi_skill_rating}]]}} {{explode= [[1d6]]}}"></button>
<select style="width:125px;" name="attr_agi_skill">
<option value="" data-i18n="flaws" disabled>Skills</option>
<option value="Assassination" data-i18n="assassination">Assassination</option>
<option value="Athletics" data-i18n="athletics">Athletics</option>
<option value="Cover" data-i18n="cover">Cover</option>
<option value="Driving" data-i18n="driving">Driving</option>
<option value="Grappling" data-i18n="grappling">Grappling</option>
<option value="Marksmanship" data-i18n="marksmanship">Marksmanship</option>
<option value="Missle Deflection" data-i18n="missle_deflection">Missle Deflection</option>
<option value="Multistrike" data-i18n="multistrike">Multistrike</option>
<option value="Piloting" data-i18n="piloting">Piloting</option>
<option value="Riding" data-i18n="riding">Riding</option>
<option value="Sailing" data-i18n="sailing">Sailing</option>
<option value="Sleight-of-hand" data-i18n="sleight-of-hand">Sleight-of-Hand</option>
<option value="Stealth" data-i18n="stealth">Stealth</option>
<option value="Sworn Enemy" data-i18n="sworn_enemy">Sworn Enemy*</option>
<option value="Team Tactics" data-i18n="team_tactics">Team Tactics</option>
<option value="Unarmed Strike" data-i18n="unarmed_strike">Unarmed Strike</option>
<option value="Weapon Mastery" data-i18n="weapon_mastery">Weapon Mastery*</option>
<option value="" data-i18n="flaws" disabled>Flaws</option>
<option value='Clumsiness' data-i18n='clumsiness'>Clumsiness</option>
<option value='Handicap' data-i18n='handicap'>Handicap</option>
</select>
<input type="text" style="width: 125px;" name="attr_agi_skill_spec" value="" data-i18n-placeholder="skillspec-u" placeholder="Specifics" />
<input type="number" class="sheet-attrval" name="attr_agi_skill_rating" value="0" />
</fieldset>
</div>
</div>
<br />
<div class="sheet-block">
<button type="roll" class="sheet-rollbutton" name="roll_tough" value="&{template:basic} {{type= Attribute}} {{name= Toughness}} {{roll= [[1d6+@{tough}]]}} {{explode= [[1d6]]}}"></button>
<input type="text" style="width:275px;" class="sheet-attrname" data-i18n="tough-u" value="Toughness" readonly />
<input type="number" class="sheet-number" name="attr_tough" value="0" />
<input type="hidden" name="attr_tough_xp_used" value="0" />
<input type="hidden" name="attr_toughskill_xp_used" value="0" />
<div class="sheet-skillblock">
<fieldset class="repeating_toughskills">
<button type="roll" class="sheet-rollbutton" name="roll_tough_skill" value="&{template:basic} {{type= Skill}} {{name= @{tough_skill} @{tough_skill_spec} }} {{roll= [[1d6 + @{tough} + @{tough_skill_rating}]]}} {{explode= [[1d6]]}}"></button>
<select style="width:125px;" name="attr_tough_skill">
<option value="" data-i18n="skills" disabled>Skills</option>
<option value='Aquatic' data-i18n='aquatic'>Aquatic</option>
<option value='Armored Combat' data-i18n='armored combat'>Armored Combat</option>
<option value='Charge' data-i18n='charge'>Charge</option>
<option value='Endurance' data-i18n='endurance'>Endurance</option>
<option value='Bighty Blow' data-i18n='mighty blow'>Mighty Blow</option>
<option value='Resistance' data-i18n='resistance'>Resistance*</option>
<option value='Second Wind' data-i18n='second wind'>Second Wind</option>
<option value='Strength' data-i18n='strength'>Strength</option>
<option value='Unlife' data-i18n='unlife'>Unlife</option>
<option value="" data-i18n="flaws" disabled>Flaws</option>
<option value='Breathless' data-i18n='breathless'>Breathless</option>
<option value='Frailty' data-i18n='frailty'>Frailty</option>
<option value='Sunlight sensitivity' data-i18n='sunlight sensitivity'>Sunlight Sensitivity</option>
<option value='Vulnerability' data-i18n='vulnerability'>Vulnerability</option>
<option value='Weakness' data-i18n='weakness'>Weakness</option>
</select>
<input type="text" style="width: 125px;" name="attr_tough_skill_spec" value="" data-i18n-placeholder="skillspec-u" placeholder="Specifics" />
<input type="number" class="sheet-attrval" name="attr_tough_skill_rating" value="0" />
</fieldset>
</div>
</div>
<br />
<div class="sheet-block">
<button type="roll" class="sheet-rollbutton" name="roll_aware" value="&{template:basic} {{type= Attribute}} {{name= Awareness}} {{roll= [[1d6+@{aware}]]}} {{explode= [[1d6]]}}"></button>
<input type="text" style="width:275px;" class="sheet-attrname" data-i18n="aware-u" value="Awareness" readonly />
<input type="number" class="sheet-number" name="attr_aware" value="0" />
<input type="hidden" name="attr_aware_xp_used" value="0" />
<input type="hidden" name="attr_awareskill_xp_used" value="0" />
<div class="sheet-skillblock">
<fieldset class="repeating_awareskills">
<button type="roll" class="sheet-rollbutton" name="roll_aware_skill" value="&{template:basic} {{type= Skill}} {{name= @{aware_skill} @{aware_skill_spec} }} {{roll= [[1d6 + @{aware} + @{aware_skill_rating}]]}} {{explode= [[1d6]]}}"></button>
<select style="width:125px;" name="attr_aware_skill">
<option value="" data-i18n="Skills" disabled>Skills</option>
<option value='Appraisal' data-i18n='appraisal'>Appraisal</option>
<option value='Arcane Lore' data-i18n='arcane lore'>Arcane Lore</option>
<option value='Background' data-i18n='background'>Background*</option>
<option value='Computers' data-i18n='computers'>Computers</option>
<option value='Criminology' data-i18n='criminology'>Criminology</option>
<option value='Fixing' data-i18n='fixing'>Fixing</option>
<option value='Heavy Weapon' data-i18n='heavy_weapon'>Heavy Weapon*</option>
<option value='Languages' data-i18n='languages'>Languages*</option>
<option value='Locks & Traps' data-i18n='locks_traps'>Locks & Traps</option>
<option value='Medicine' data-i18n='medicine'>Medicine</option>
<option value='Memory' data-i18n='memory'>Memory</option>
<option value='Nightvision' data-i18n='nightvision'>Nightvision</option>
<option value='Observation' data-i18n='observation'>Observation</option>
<option value='Power or Spell' data-i18n='power_or_spell'>Power or Spell*</option>
<option value='Psychology' data-i18n='psychology'>Psychology</option>
<option value='Research' data-i18n='research'>Research</option>
<option value='Senses' data-i18n='senses'>Senses</option>
<option value='Sixth Sense' data-i18n='sixth sense'>Sixth Sense</option>
<option value='Survival' data-i18n='survival'>Survival*</option>
<option value='Surgery' data-i18n='surgery'>Surgery</option>
<option value='Surveillance' data-i18n='surveillance'>Surveillance</option>
<option value='Trivia' data-i18n='trivia'>Trivia</option>
<option value='Underworld' data-i18n='underworld'>Underworld</option>
<option value="" data-i18n="flaws" disabled>Flaws</option>
<option value='Absent-mindedness' data-i18n='absent-mindedness'>Absent-Mindedness</option>
<option value='Blindness' data-i18n='blindness'>Blindness</option>
<option value='Deafness' data-i18n='deafness'>Deafness</option>
</select>
<input type="text" style="width: 125px;" name="attr_aware_skill_spec" value="" data-i18n-placeholder="skillspec-u" placeholder="Specifics" />
<input type="number" class="sheet-attrval" name="attr_aware_skill_rating" value="0" />
</fieldset>
</div>
</div>
<br />
<div class="sheet-block">
<button type="roll" class="sheet-rollbutton" name="roll_will" value="&{template:basic} {{type= Attribute}} {{name= Will}} {{roll= [[1d6+@{will}]]}} {{explode= [[1d6]]}}"></button>
<input type="text" style="width:275px;" class="sheet-attrname" data-i18n="will-u" value="Will" readonly />
<input type="number" class="sheet-number" name="attr_will" value="0" />
<input type="hidden" name="attr_will_xp_used" value="0" />
<input type="hidden" name="attr_willskill_xp_used" value="0" />
<div class="sheet-skillblock">
<fieldset class="repeating_willskills">
<button type="roll" class="sheet-rollbutton" name="roll_will_skill" value="&{template:basic} {{type= Skill}} {{name= @{will_skill} @{will_skill_spec} }} {{roll= [[1d6 + @{will} + @{will_skill_rating}]]}} {{explode= [[1d6]]}}"></button>
<select style="width:125px;" name="attr_will_skill">
<option value="" data-i18n="skills" disabled>Skills</option>
<option value='Animal Handling' data-i18n='animal_handling'>Animal Handling*</option>
<option value='Art' data-i18n='art'>Art*</option>
<option value='Bargaining' data-i18n='bargaining'>Bargaining</option>
<option value='Battle Rage' data-i18n='battle_rage'>Battle Rage</option>
<option value='Command' data-i18n='command'>Command</option>
<option value='Focus' data-i18n='focus'>Focus</option>
<option value='Followers' data-i18n='followers'>Followers</option>
<option value='Impersonation' data-i18n='impersonation'>Impersonation</option>
<option value='Intimidation/Fear' data-i18n='intimidation_fear'>Intimidation/Fear</option>
<option value='Luck' data-i18n='luck'>Luck</option>
<option value='Oratory' data-i18n='oratory'>Oratory</option>
<option value='Persuasion' data-i18n='persuasion'>Persuasion</option>
<option value='Politics' data-i18n='politics'>Politics</option>
<option value='Reputation' data-i18n='reputation'>Reputation*</option>
<option value='Street Smarts' data-i18n='street_smarts'>Street Smarts</option>
<option value='Trickery' data-i18n='trickery'>Trickery</option>
<option value="" data-i18n="flaws" disabled>Flaws</option>
<option value='Addiction' data-i18n='addiction'>Addiction*</option>
<option value='Cowardice' data-i18n='cowardice'>Cowardice</option>
<option value='Code of Honor' data-i18n='code_of_honor'>Code of Honor*</option>
<option value='Flashbacks' data-i18n='flashbacks'>Flashbacks</option>
<option value='Greed' data-i18n='greed'>Greed*</option>
<option value='Outcast' data-i18n='outcast'>Outcast*</option>
<option value='Phobia' data-i18n='phobia'>Phobia*</option>
<option value='Unluck' data-i18n='unluck'>Unluck</option>
<option value='Unmistakable Feature' data-i18n='unmistakable_feature'>Unmistakable Feature*</option>
</select>
<input type="text" style="width: 125px;" name="attr_will_skill_spec" value="" data-i18n-placeholder="skillspec-u" placeholder="Specifics" />
<input type="number" class="sheet-attrval" name="attr_will_skill_rating" value="0" />
</fieldset>
</div>
</div>
</div>
<div class='sheet-col'>
<div class="sheet-heading" data-i18n='derstat'>Derived Statistics</div>
<div class="sheet-block sheet-smallblock">
<div class="sheet-top">
<button type="roll" class="sheet-rollbutton" style="width:65px" name="roll_health" value="&{template:stat} {{name= Health}} {{check= [[2d6]]}}" data-i18n="health-u">Health</button>
</div>
<input type="text" class="sheet-derstat" style="width:40px" name="attr_curhealth" value="0" readonly />/<input type="text" class="sheet-derstat" style="width:35px" name="attr_health" value="0" readonly />
</div>
<div class="sheet-block sheet-smallblock">
<div class="sheet-top">
<button type="roll" class="sheet-rollbutton" style="width:65px" name="roll_move" value="&{template:stat} {{name= Move}} {{check= [[2d6]]}}" data-i18n="move-u">Move</button>
</div>
<input type="text" class="sheet-derstat" style="width:40px" name="attr_curmove" value="0" readonly />/<input type="text" class="sheet-derstat" style="width: 35px;" name="attr_move" value="0" readonly />
</div>
<div class="sheet-block sheet-smallblock">
<div class="sheet-top">
<button type="roll" class="sheet-rollbutton" style="width:65px" name="roll_init" value="&{template:stat} {{name= Initiative}} {{check= [[2d6]]}}" data-i18n="init-u">Init</button>
</div>
<input type="text" class="sheet-derstat" style="width:40px" name="attr_curinit" value="0" readonly />/<input type="text" class="sheet-derstat" style="width: 35px;" name="attr_initiative" value="0" readonly />
</div>
<div class="sheet-block sheet-smallblock">
<div class="sheet-top">
<button type="roll" class="sheet-rollbutton" style="width:65px" name="roll_spirit" value="&{template:stat} {{name= Spirit}} {{check= [[2d6]]}}" data-i18n="spirit-u">Spirit</button>
</div>
<input type="text" class="sheet-derstat" style="width:40px" name="attr_curspirit" value="0" readonly />/<input type="text" class="sheet-derstat" style="width: 35px;" name="attr_spirit" value="0" readonly />
</div>
<br/>
<div class="sheet-heading" data-i18n='bonus'>Bonuses & Penalties</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='atk'>
Attack
</div>
<input type="text" class="sheet-number" style="width:50px" name="attr_atk" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='defense'>
Defense
</div>
<input type="text" class="sheet-number" style="width:50px" name="attr_def" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='damage'>
Damage
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_dam" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:110px;">
<div class="sheet-top" data-i18n='impair'>
Impairment Level
</div>
<input type="radio" name="attr_impair" value="0" readonly checked="true" /><span style="margin-right: 5px; border-right:2px solid gold;" ></span>
<input type="radio" name="attr_impair" value="1" readonly /><span></span>
<input type="radio" name="attr_impair" value="2" readonly /><span></span>
<input type="radio" name="attr_impair" value="3" readonly /><span></span>
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='injury'>
Injuries
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_injury" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='move-u'>
Move
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_move_mod" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='init-u'>
Init
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_init_mod" value="0" />
</div>
<div class="sheet-block sheet-smallblock" style="width:55px">
<div class="sheet-top" data-i18n='spirit-u'>
Spirit
</div>
<input type="number" class="sheet-number" style="width:50px" name="attr_spirit_mod" value="0" />
</div>
<br/>
<div class="sheet-heading" data-i18n='notes-u'>Notes</div>
<div class="sheet-block">
<textarea name="attr_notes" style="width:95%; height:200px;"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-tab sheet-tab-equipment">
<input type="radio" name="attr_tab" value="equipment">
<span class="sheet-tab-label">Equipment</span>
<div class="sheet-tab-content">
<div class="sheet-content">
<div class="sheet-heading">Weapons</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 155px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="ammo-u">Ammo</span>
<span class="sheet-blocklabel" style="width: 50px;" data-i18n="rel-u">Rel</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="rng-u">Range</span>
<span class="sheet-blocklabel" style="width: 80px;" data-i18n="dam-u">DAM</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="aoe-u">AOE</span>
<span class="sheet-blocklabel" style="width: 50px;" data-i18n="wt-u">Wt</span>
<span class="sheet-blocklabel" style="width: 100px;" data-i18n="notes-u">Notes</span>
</div>
<fieldset class="repeating_weapons">
<input type="text" style="width:150px" name="attr_weaponname" />
<input type="text" style="width:50px" name="attr_weaponammo" />
<input type="text" style="width:50px" name="attr_weaponrel" />
<input type="text" style="width:50px" name="attr_weaponrng" />
<input type="text" style="width:75px" name="attr_weapondmg" />
<input type="text" style="width:50px" name="attr_weaponaoe" />
<input type="text" style="width:50px" name="attr_weaponwt" />
<input type="text" style="width:270px" name="attr_weaponnote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
<div class="sheet-2colrow">
<div class="sheet-col">
<div class="sheet-heading">Armor</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 250px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="arm-u">ARM</span>
<span class="sheet-blocklabel" style="width: 20px;" data-i18n="wt-u">Wt</span>
</div>
<fieldset class="repeating_armor">
<input type="text" style="width:250px" name="attr_armorname" />
<input type="text" style="width:50px" name="attr_armorsoak" />
<input type="text" style="width:50px" name="attr_armorwt" />
<br />
<input type="text" style="margin-left:20px; width:335px" name="attr_armornote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
<div class="sheet-heading">Mounts & Vehicles</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 140px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="crew-u">Crew</span>
<span class="sheet-blocklabel" style="width: 30px;" data-i18n="agiabbr-u">AGI</span>
<span class="sheet-blocklabel" style="width: 62px;" data-i18n="move-u">Move</span>
<span class="sheet-blocklabel" style="width: 37px;" data-i18n="arm-u">ARM</span>
<span class="sheet-blocklabel" style="width: 20px;" data-i18n="health-u">Health</span>
</div>
<fieldset class="repeating_armor">
<input type="text" style="width:135px" name="attr_mntname" />
<input type="text" style="width:50px" name="attr_mntcrew" />
<input type="text" style="width:30px" name="attr_mntagi" />
<input type="text" style="width:60px" name="attr_mntmove" />
<input type="text" style="width:30px" name="attr_mntarm" />
<input type="text" style="width:35px" name="attr_mnthealth" />
<br />
<input type="text" style="margin-left:20px; width:335px" name="attr_mntnote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
</div>
<div class="sheet-col">
<div class="sheet-heading">Equipment</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 180px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 130px;" data-i18n="loc-u">Location</span>
<span class="sheet-blocklabel" style="width: 20px;" data-i18n="wt-u">Wt</span>
</div>
<fieldset class="repeating_equipment">
<input type="text" style="width:175px" name="attr_equipname" />
<input type="text" style="width:125px" name="attr_equiploc" />
<input type="text" style="width:50px" name="attr_equipwt" />
<br />
<input type="text" style="margin-left:20px; width:335px" name="attr_equipnote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sheet-tab sheet-tab-features">
<input type="radio" name="attr_tab" value="features">
<span class="sheet-tab-label">Spells & Powers</span>
<div class="sheet-tab-content">
<div class="sheet-content">
<div class="sheet-heading">Spells & Psionics</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 155px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="dif-u">DIF</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="cast-u">Casting Time</span>
<span class="sheet-blocklabel" style="width: 55px;" data-i18n="rng-u">Range</span>
<span class="sheet-blocklabel" style="width: 80px;" data-i18n="dur-u">Duration</span>
<span class="sheet-blocklabel" style="width: 350px;" data-i18n="notes-u">Notes</span>
</div>
<fieldset class="repeating_spells">
<input type="text" style="width:150px" name="attr_spellname" />
<input type="text" style="width:50px" name="attr_spelldif" />
<input type="text" style="width:50px" name="attr_casttime" />
<input type="text" style="width:50px" name="attr_spellrng" />
<input type="text" style="width:75px" name="attr_spellduration" />
<input type="text" style="width:375px" name="attr_spellnote" data-i18n-placeholder="notes-u" placeholder="Notes" />
</fieldset>
</div>
<div class="sheet-heading">Powers</div>
<div class="sheet-block">
<div class="sheet-top">
<span class="sheet-blocklabel" style="width: 155px;" data-i18n="name-u">Name</span>
<span class="sheet-blocklabel" style="width: 130px;" data-i18n="rng-u">Range</span>
<span class="sheet-blocklabel" style="width: 200px;" data-i18n="meffect-u">Description</span>
</div>
<fieldset class="repeating_spells">
<input type="text" style="width:150px" name="attr_powername" />
<input type="text" style="width:125px" name="attr_powerrng" />
<input type="text" style="width:475px" name="attr_majoreffect" />
</fieldset>
</div>
</div>
</div>
</div>
<div class="sheet-tab sheet-tab-features" style="display:none">
<input type="radio" name="attr_tab" value="">
<span class="sheet-tab-label"></span>
<div class="sheet-tab-content">
<div class="sheet-content">
Settings
</div>
</div>
</div>
<div class="sheet-tab sheet-tab-features" style="display:none">
<input type="radio" name="attr_tab" value="advanced">
<span class="sheet-tab-label">Advanced Settings</span>
<div class="sheet-tab-content">
<div class="sheet-content">
Settings
</div>
</div>
</div>
</div>
</div>
<rolltemplate class="sheet-rolltemplate-basic">
<div class="sheet-template-container">
<div class="sheet-template-header" data-i18n="sc-u">{{type}} Check</div>
<div class="sheet-template-row">{{name}}: {{roll}}
{{#rollWasCrit() roll}}
<span> + </span>{{explode}}
{{#rollWasCrit() explode}}
<span data-i18n="crit-u">Critical!</span>
{{/rollWasCrit() explode}}
{{/rollWasCrit() roll}}
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-stat">
<div class="sheet-template-container">
<div class="sheet-template-header" data-i18n="statc-u">Stat Check</div>
<div class="sheet-template-row">
{{#rollTotal() check 12}}
Fumble {{name}}: {{check}}
{{/rollTotal() check 12}}
{{#rollTotal() check 2}}
Crit {{name}}: {{roll}}
{{/rollTotal() check 2}}
{{#rollBetween() check 3 11}}
{{name}}: {{check}}
{{/rollBetween() check 3 11}}
</div>
</div>
</rolltemplate>
<script type="text/worker">
on("change:agi", function() {
getAttrs(["agi","xp_total","xp_sacrificed","move_mod","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
agi = parseInt(values.agi,10)||0;
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
move_mod = parseInt(values.move_mod,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
agi_xp_used = calc_XPUsed(agi);
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
move: 9 + agi_xp_used,
curmove: 9 + agi_xp_used + move_mod,
agi_xp_used: agi_xp_used,
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
on("change:tough", function() {
getAttrs(["tough","xp_total","xp_sacrificed","injury","agi_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
tough = parseInt(values.tough,10)||0;
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
injuries = parseInt(values.injury,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
tough_xp_used = calc_XPUsed(tough);
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
health: 9 + tough_xp_used,
curhealth: 9 + tough_xp_used - injuries,
tough_xp_used: tough_xp_used,
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
on("change:aware", function() {
getAttrs(["aware","xp_total","xp_sacrificed","init_mod","tough_xp_used","agi_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
aware = parseInt(values.aware,10)||0;
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
init_mod = parseInt(values.init_mod,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
aware_xp_used = calc_XPUsed(aware);
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
initiative: 9 + aware_xp_used,
curinit: 9 + aware_xp_used + init_mod,
aware_xp_used: aware_xp_used,
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
on("change:will", function() {
getAttrs(["will","xp_total","xp_sacrificed","spirit_mod","tough_xp_used","aware_xp_used","agi_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
will = parseInt(values.will,10)||0;
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
spirit_mod = parseInt(values.spirit_mod,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
will_xp_used = calc_XPUsed(will);
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
spirit: 9 + will_xp_used,
curspirit: 9 + will_xp_used + spirit_mod,
will_xp_used: will_xp_used,
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
on("change:xp_total", function() {
getAttrs(["xp_total","xp_spent","xp_sacrificed"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_spent = parseInt(values.xp_spent,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
setAttrs({
xp_reserve: xp_total - xp_spent - xp_sacrificed
});
});
});
on("change:xp_sacrificed", function() {
getAttrs(["xp_total","xp_spent","xp_sacrificed"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_spent = parseInt(values.xp_spent,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
setAttrs({
xp_reserve: xp_total - xp_spent - xp_sacrificed
});
});
});
on("change:injury", function() {
getAttrs(["health","injury"], function(values) {
health = parseInt(values.health,10)||0;
injuries = parseInt(values.injury,10)||0;
setAttrs({
curhealth: health - injuries
});
});
});
on("change:move_mod", function() {
getAttrs(["move","move_mod"], function(values) {
move = parseInt(values.move,10)||0;
move_mod = parseInt(values.move_mod,10)||0;
setAttrs({
curmove: move + move_mod
});
});
});
on("change:init_mod", function() {
getAttrs(["initiative","init_mod"], function(values) {
init = parseInt(values.initiative,10)||0;
init_mod = parseInt(values.init_mod,10)||0;
setAttrs({
curinit: init + init_mod
});
});
});
on("change:spirit_mod", function() {
getAttrs(["spirit","spirit_mod"], function(values) {
spirit = parseInt(values.spirit,10)||0;
spirit_mod = parseInt(values.spirit_mod,10)||0;
setAttrs({
curspirit: spirit + spirit_mod
});
});
});
on('change:repeating_agiskills remove:repeating_agiskills', () => {
repeatingXPSum("agiskill_xp_used","agiskills","agi_skill_rating", function() {
getAttrs(["xp_total","xp_sacrificed","agi_xp_used","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
});
on('change:repeating_toughskills remove:repeating_toughskills', () => {
repeatingXPSum("toughskill_xp_used","toughskills","tough_skill_rating", function() {
getAttrs(["xp_total","xp_sacrificed","agi_xp_used","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
});
on('change:repeating_awareskills remove:repeating_awareskills', () => {
repeatingXPSum("awareskill_xp_used","awareskills","aware_skill_rating", function() {
getAttrs(["xp_total","xp_sacrificed","agi_xp_used","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
});
on('change:repeating_willskills remove:repeating_willskills', () => {
repeatingXPSum("willskill_xp_used","willskills","will_skill_rating", function() {
getAttrs(["xp_total","xp_sacrificed","agi_xp_used","tough_xp_used","aware_xp_used","will_xp_used","agiskill_xp_used","toughskill_xp_used","awareskill_xp_used","willskill_xp_used"], function(values) {
xp_total = parseInt(values.xp_total,10)||0;
xp_sacrificed = parseInt(values.xp_sacrificed,10)||0;
agi_xp_used = parseInt(values.agi_xp_used,10)||0;
tough_xp_used = parseInt(values.tough_xp_used,10)||0;
aware_xp_used = parseInt(values.aware_xp_used,10)||0;
will_xp_used = parseInt(values.will_xp_used,10)||0;
agiskill_xp_used = parseInt(values.agiskill_xp_used,10)||0;
toughskill_xp_used = parseInt(values.toughskill_xp_used,10)||0;
awareskill_xp_used = parseInt(values.awareskill_xp_used,10)||0;
willskill_xp_used = parseInt(values.willskill_xp_used,10)||0;
xpUsed = agi_xp_used + tough_xp_used + aware_xp_used + will_xp_used + agiskill_xp_used + toughskill_xp_used + awareskill_xp_used + willskill_xp_used;
setAttrs({
xp_spent: xpUsed,
xp_reserve: xp_total - xpUsed - xp_sacrificed
});
});
});
});
function calc_XPUsed(grade) {
total = 0;
if (grade >= 0) {
for (i = 1; i <= grade; i++) {total += i; }
} else {
total = grade;
}
return total;
}
/* ===== PARAMETERS ==========
destination = the name of the attribute that stores the total quantity
section = name of repeating fieldset, without the repeating_
fields = the name of the attribute field to be summed
can be a single attribute: 'weight'
or an array of attributes: ['weight','number','equipped']
multiplier (optional) = a multiplier to to entire fieldset total. For instance, if summing coins of weight 0.02, might want to multiply the final total by 0.02.
*/
const repeatingXPSum = (destination, section, fields, callback, multiplier = 1) => {
if (!Array.isArray(fields)) fields = [fields];
getSectionIDs(`repeating_${section}`, idArray => {
const attrArray = idArray.reduce( (m,id) => [...m, ...(fields.map(field => `repeating_${section}_${id}_${field}`))],[]);
getAttrs(attrArray, v => {
console.log("===== values of v: "+ JSON.stringify(v) +" =====");
// getValue: if not a number, returns 1 if it is 'on' (checkbox), otherwise returns 0..
const getValue = (section, id,field) => parseFloat(v[`repeating_${section}_${id}_${field}`], 10) || (v[`repeating_${section}_${id}_${field}`] === 'on' ? 1 : 0);
const sumTotal = idArray.reduce((total, id) => total + fields.reduce((subtotal,field) => subtotal * calc_XPUsed(getValue(section, id,field)),1),0);
setAttrs({[destination]: sumTotal * multiplier}, callback);
});
});
};
</script>
Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

+8
View File
@@ -0,0 +1,8 @@
{
"html": "elemental.html",
"css": "elemental.css",
"authors": "Shawn P. Conlin",
"preview": "elemental.png",
"roll20userid": "2315022",
"instructions": "A character sheet for use with Elemental from Gildor Games. The sheet is designed to be generic since the RPG is not genre specific."
}
+130
View File
@@ -0,0 +1,130 @@
{
"name-u": "Name",
"title-u": "Title:",
"species-u": "Species:",
"total-u": "Total",
"spent-u": "Spent",
"sacrifice-u": "Sacrificed",
"reserve-u": "Reserve",
"attrskill-u": "Attributes &amp; Skills",
"agi-u": "",
"flaws": "Flaws",
"assassination": "Assassination",
"athletics": "Athletics",
"cover": "Cover",
"driving": "Driving",
"grappling": "Grappling",
"marksmanship": "Marksmanship",
"missle_deflection": "Missle Deflection",
"multistrike": "Multistrike",
"piloting": "Piloting",
"riding": "Riding",
"sailing": "Sailing",
"sleight-of-hand": "Sleight-of-Hand",
"stealth": "Stealth",
"sworn_enemy": "Sworn Enemy*",
"team_tactics": "Team Tactics",
"unarmed_strike": "Unarmed Strike",
"weapon_mastery": "Weapon Mastery*",
"clumsiness": "Clumsiness",
"handicap": "Handicap",
"skillspec-u": "Specifics",
"tough-u": "",
"skills": "Skills",
"aquatic": "Aquatic",
"armored combat": "Armored Combat",
"charge": "Charge",
"endurance": "Endurance",
"mighty blow": "Mighty Blow",
"resistance": "Resistance*",
"second wind": "Second Wind",
"strength": "Strength",
"unlife": "Unlife",
"breathless": "Breathless",
"frailty": "Frailty",
"sunlight sensitivity": "Sunlight Sensitivity",
"vulnerability": "Vulnerability",
"weakness": "Weakness",
"aware-u": "",
"Skills": "Skills",
"appraisal": "Appraisal",
"arcane lore": "Arcane Lore",
"background": "Background*",
"computers": "Computers",
"criminology": "Criminology",
"fixing": "Fixing",
"heavy_weapon": "Heavy Weapon*",
"languages": "Languages*",
"locks_traps": "Locks &amp; Traps",
"medicine": "Medicine",
"memory": "Memory",
"nightvision": "Nightvision",
"observation": "Observation",
"power_or_spell": "Power or Spell*",
"psychology": "Psychology",
"research": "Research",
"senses": "Senses",
"sixth sense": "Sixth Sense",
"survival": "Survival*",
"surgery": "Surgery",
"surveillance": "Surveillance",
"trivia": "Trivia",
"underworld": "Underworld",
"absent-mindedness": "Absent-Mindedness",
"blindness": "Blindness",
"deafness": "Deafness",
"will-u": "",
"animal_handling": "Animal Handling*",
"art": "Art*",
"bargaining": "Bargaining",
"battle_rage": "Battle Rage",
"command": "Command",
"focus": "Focus",
"followers": "Followers",
"impersonation": "Impersonation",
"intimidation_fear": "Intimidation/Fear",
"luck": "Luck",
"oratory": "Oratory",
"persuasion": "Persuasion",
"politics": "Politics",
"reputation": "Reputation*",
"street_smarts": "Street Smarts",
"trickery": "Trickery",
"addiction": "Addiction*",
"cowardice": "Cowardice",
"code_of_honor": "Code of Honor*",
"flashbacks": "Flashbacks",
"greed": "Greed*",
"outcast": "Outcast*",
"phobia": "Phobia*",
"unluck": "Unluck",
"unmistakable_feature": "Unmistakable Feature*",
"derstat": "Derived Statistics",
"health-u": "Health",
"move-u": "Move",
"init-u": "Init",
"spirit-u": "Spirit",
"bonus": "Bonuses &amp; Penalties",
"arm-u": "ARM",
"injury": "Injuries",
"impair": "Impairment Level",
"atk": "Attack",
"defense": "Defense",
"damage": "Damage",
"ammo-u": "Ammo",
"rel-u": "Rel",
"rng-u": "Range",
"dam-u": "DAM",
"aoe-u": "AOE",
"wt-u": "Wt",
"notes-u": "Notes",
"crew-u": "Crew",
"agiabbr-u": "AGI",
"loc-u": "Location",
"dif-u": "DIF",
"cast-u": "Casting Time",
"dur-u": "Duration",
"meffect-u": "Description",
"sc-u": " Skill Check",
"statc-u": "Stat Check"
}
+130
View File
@@ -0,0 +1,130 @@
{
"name-u": "Name",
"title-u": "Title:",
"species-u": "Species:",
"total-u": "Total",
"spent-u": "Spent",
"sacrifice-u": "Sacrificed",
"reserve-u": "Reserve",
"attrskill-u": "Attributes &amp; Skills",
"agi-u": "",
"flaws": "Flaws",
"assassination": "Assassination",
"athletics": "Athletics",
"cover": "Cover",
"driving": "Driving",
"grappling": "Grappling",
"marksmanship": "Marksmanship",
"missle_deflection": "Missle Deflection",
"multistrike": "Multistrike",
"piloting": "Piloting",
"riding": "Riding",
"sailing": "Sailing",
"sleight-of-hand": "Sleight-of-Hand",
"stealth": "Stealth",
"sworn_enemy": "Sworn Enemy*",
"team_tactics": "Team Tactics",
"unarmed_strike": "Unarmed Strike",
"weapon_mastery": "Weapon Mastery*",
"clumsiness": "Clumsiness",
"handicap": "Handicap",
"skillspec-u": "Specifics",
"tough-u": "",
"skills": "Skills",
"aquatic": "Aquatic",
"armored combat": "Armored Combat",
"charge": "Charge",
"endurance": "Endurance",
"mighty blow": "Mighty Blow",
"resistance": "Resistance*",
"second wind": "Second Wind",
"strength": "Strength",
"unlife": "Unlife",
"breathless": "Breathless",
"frailty": "Frailty",
"sunlight sensitivity": "Sunlight Sensitivity",
"vulnerability": "Vulnerability",
"weakness": "Weakness",
"aware-u": "",
"Skills": "Skills",
"appraisal": "Appraisal",
"arcane lore": "Arcane Lore",
"background": "Background*",
"computers": "Computers",
"criminology": "Criminology",
"fixing": "Fixing",
"heavy_weapon": "Heavy Weapon*",
"languages": "Languages*",
"locks_traps": "Locks &amp; Traps",
"medicine": "Medicine",
"memory": "Memory",
"nightvision": "Nightvision",
"observation": "Observation",
"power_or_spell": "Power or Spell*",
"psychology": "Psychology",
"research": "Research",
"senses": "Senses",
"sixth sense": "Sixth Sense",
"survival": "Survival*",
"surgery": "Surgery",
"surveillance": "Surveillance",
"trivia": "Trivia",
"underworld": "Underworld",
"absent-mindedness": "Absent-Mindedness",
"blindness": "Blindness",
"deafness": "Deafness",
"will-u": "",
"animal_handling": "Animal Handling*",
"art": "Art*",
"bargaining": "Bargaining",
"battle_rage": "Battle Rage",
"command": "Command",
"focus": "Focus",
"followers": "Followers",
"impersonation": "Impersonation",
"intimidation_fear": "Intimidation/Fear",
"luck": "Luck",
"oratory": "Oratory",
"persuasion": "Persuasion",
"politics": "Politics",
"reputation": "Reputation*",
"street_smarts": "Street Smarts",
"trickery": "Trickery",
"addiction": "Addiction*",
"cowardice": "Cowardice",
"code_of_honor": "Code of Honor*",
"flashbacks": "Flashbacks",
"greed": "Greed*",
"outcast": "Outcast*",
"phobia": "Phobia*",
"unluck": "Unluck",
"unmistakable_feature": "Unmistakable Feature*",
"derstat": "Derived Statistics",
"health-u": "Health",
"move-u": "Move",
"init-u": "Init",
"spirit-u": "Spirit",
"bonus": "Bonuses &amp; Penalties",
"arm-u": "ARM",
"injury": "Injuries",
"impair": "Impairment Level",
"atk": "Attack",
"defense": "Defense",
"damage": "Damage",
"ammo-u": "Ammo",
"rel-u": "Rel",
"rng-u": "Range",
"dam-u": "DAM",
"aoe-u": "AOE",
"wt-u": "Wt",
"notes-u": "Notes",
"crew-u": "Crew",
"agiabbr-u": "AGI",
"loc-u": "Location",
"dif-u": "DIF",
"cast-u": "Casting Time",
"dur-u": "Duration",
"meffect-u": "Description",
"sc-u": " Skill Check",
"statc-u": "Stat Check"
}